我是 Swift 初学者,没有 Objective-C 经验。我想创建一个 UIView 子类,它显示来自 IP 摄像机(RTSP、ONVIF)的视频流。
看来我需要使用 ffmpeg 库 http://sourceforge.net/projects/ffmpeg-ios/
我确实找到了一个日文版的 ffmpeg 教程 ;-) http://qiita.com/tottokotkd/items/d9d376d5993961627aec
有人知道使用 Swift 流式传输 IP 摄像机的教程吗?
最佳答案
我已经回答过类似的问题here ,但由于此处涉及 Swift,我将尽可能提供扩展答案。
首先,我想引用日语教程你的意思是this .我没有关于 Switf/C 桥接的经验,但如果教程真的有效,似乎有一个带有 C 导入的头文件(在这种情况下 Tutorials-Bridging-Header.h
包含实际的 ffmpeg标题)就足够了。之后,至少根据教程,您可以在代码中使用 ffmpeg 数据类型和函数(至少在 Tutorial1.swift
中是这样的 - 它直接调用 avcodec_decode_video2
和其他)。
如果 Swift 互操作就像看起来那么简单:
1) 你需要一个 iOS 版本的 ffmpeg,要么使用你有 XCode 项目的 SourceForge/Github 项目(但是,如果你只需要 RTSP 和某些编解码器,你可能仍然需要根据你的需要调整项目,因为根据许可因素,您可能需要禁用某些编码器 - 特别是 H.264)或获取 ffmpeg 源并使用 iOS 工具链自行构建它,这实际上并不难(我之前的帖子中已经提到)。
2) 然后您需要链接并加载 ffmpeg(您在教程中看到的所有 av_register_all 内容)并将其提供给流:
2a) 对于 RTSP,如果您现在使用谷歌搜索 avio_open
的流的 RTSP url 是一个好的开始,您可以将 url 直接提供给它,ffmpeg 传输和解复用器应该处理实际的连接,然后您可以使用 av_read_frame
从流中提取数据,有点类似于 this .
2b) 对于 ONVIF,您需要实际实现 xml 请求以检索流 URI,如果它是 RTSP,则播放常规 RTSP 流,如果它是具有标准内容类型的 HTTP 流 avio_open
也应该能够处理它。
3) 在ffmpeg中找到需要的解码器,解码从av_read_frame
获取的数据,呈现在你的view上。
关于ios - 如何使用 Swift 从 iOS 访问/流式传输 IP 摄像机(RTSP、ONVIF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785729/