我是Swift程序员的开始,没有Objective-C经验。我想创建一个UIView子类,它显示来自IP摄像机(RTSP,ONVIF)的视频流。
看起来我需要使用ffmpeg库http://sourceforge.net/projects/ffmpeg-ios/
我确实在日语中找到了一个ffmpeg教程;-) http://qiita.com/tottokotkd/items/d9d376d5993961627aec
有没有人知道使用Swift流式传输IP摄像头的教程?
答案 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
获得的数据并将其呈现在您的视图中。