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

时间:2015-04-22 00:43:51

标签: 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摄像头的教程?

1 个答案:

答案 0 :(得分:2)

我已经回答了类似问题here,但由于Swift参与其中,我会尽量提供一个扩展答案。

首先,我想通过参考日语教程,你的意思是this。我没有关于Switf / C桥接的经验,但是如果教程实际上有效,那么看起来有一个包含C导入的头文件(在这种情况下Tutorials-Bridging-Header.h包含实际的ffmpeg头文件)就足够了。之后,至少根据教程,您可以在代码中使用ffmpeg数据类型和函数(至少在Tutorial1.swift中会发生这种情况 - 它直接调用avcodec_decode_video2和其他人)。

如果Swift互操作如此简单:

1)您需要一个iOS版本的ffmpeg,要么使用SourceForge / Github项目,您要有一个XCode项目(但是,如果您只需要RTSP和某些编解码器,您可能仍需要调整项目以满足您的需求,因为根据许可因素,您可能需要禁用某些编码器 - 特别是H.264)或者使用iOS工具链自行构建ffmpeg源,实际上并不那么难(我在上一篇文章中已经提到过)。

2)然后你需要链接并加载ffmpeg(你在教程中看到的所有av_register_all内容)并将其提供给流:

2a)对于RTSP,如果您现在为avio_open流搜索流的RTSP网址是一个良好的开端,您可以直接提供网址,ffmpeg传输和解复用器应该处理实际的连接然后您可以使用av_read_frame从流中提取数据,有点类似于this

2b)对于ONVIF,您需要实际实现xml请求以检索流URI,如果它是RTSP则播放是常规RTSP流,如果它是具有标准内容类型avio_open的HTTP流也应该能够处理它。

3)在ffmpeg中找到所需的解码器,解码从av_read_frame获得的数据并将其呈现在您的视图中。