ios - 如何使用 Swift 从 iOS 访问/流式传输 IP 摄像机(RTSP、ONVIF)

标签 ios swift ffmpeg rtsp

我是 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/

相关文章:

ios - 何时在 Objective-C 中使用 NS_INLINE 函数

ios - FBSDKAppEvents.activateApp() 无法识别的选择器发送到实例

ios - 如何延迟方法/动画?

Swift 2.0 : Cannot invoke with an argument list of type. ..(HTTP 请求)

swift - 我可以将参数传递给 Swift 中的 Singleton 类吗?和一般单例使用

ffmpeg 将 hls 转换为 rtsp 协议(protocol)

具有负偏移量的ffmpeg裁剪

ios - 检测用户点击何时禁止更改照片库

swift - 重启 AVAssetWriter

command-line - ffmpeg 合唱过滤器错误 : At least one output file must be specified