iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)
2016-06-15 14:08
1001 查看
推流端:自己开发难度很大,视频直播就被卡死了,音频根本没来得及弄,最终使用了github上开源的框架。
原生开发基本流程:AVFoundation获取视频流,得到未编码的CMSampleBuffer,需要编码成Mpeg-4格式。编码分软编码和硬编码,考虑到iOS8之后VideoToolBox开放使用,选用VideoToolBox进行编码。坑爹的是针对它连文档都没有。github上有一个二次开发的OC版本叫VideoToolBoxPlus,地址:https://github.com/McZonk/VideoToolboxPlus,成功度过硬编码难关。推流选择使用RTMP,选择第三方库libRTMP,并编译成功。编译方法在上一篇笔记中。服务器采用Nginx+rtmp搭建,地址:http://www.henishuo.com/mac_nginx_rtmp_server/?utm_source=tuicool&utm_medium=referral。最终阵亡在RTMP传输上,RTMP需要传输H.264格式的视频流,需要把编码后的CMSampleBuffer再编码为H.264格式进行传输。
从CMSampleBuffer提取相关数据组装SPS、PPS、视频数据NALU,再将NALU通过RTMP传输到服务器。最终结果是服务器端能收到数据,但不能正确解析视频格式。分析为组装NALU时出错或用RTMP传输时传值出错。这段耗时一个多星期的原生开发到此结束了。
VideoCore:地址:https://github.com/jgh-/VideoCore经过不断的寻找,终于找到了这个框架,但pod下来之后,编译过不去。还是六个月之前更新的。新浪有一个folk过来的,我没用。地址:https://github.com/sinacloud/VideoCore。还有个貌似腾讯的,看提交注释像是改了些bug,并且上次提交日期就在一个月之前,说明还在维护,可以尝试使用:https://github.com/goodow/VideoCore。
GDLiveStreaming:这是最终选用的第三方框架。地址:https://github.com/goodow/GDLiveStreaming。据说是腾讯直播的音视频采集和RTMP推流,纯OC接口,使用方便。使用教程:http://www.jianshu.com/p/83da490c0f95。使用上面搭建的本地服务器测试,直播延时在4s左右,而且是真正的开源代码,可以自己研究怎么使用了。网上一堆直播SDK,放在github上,下下来一看,.a库!!!好坑。这个还算比较良心了,学习用也不错。
mac测试服务器:采用Nginx+rtmp搭建,地址:http://www.henishuo.com/mac_nginx_rtmp_server/?utm_source=tuicool&utm_medium=referral。
拉流端:之前笔记中介绍过的FFMPEG+kxMovie,可以正常使用。之前发现bilibili站有一个开源项目叫 ijkplayer,貌似很不错,地址:https://github.com/Bilibili/ijkplayer。
最终结果:通过使用GDLiveStreaming + (Nginx+RTMP) + (FFMPEG+KxMovie),实现了简单的直播视频功能,手机推流+服务器+另一台手机拉流观看直播。
原生开发基本流程:AVFoundation获取视频流,得到未编码的CMSampleBuffer,需要编码成Mpeg-4格式。编码分软编码和硬编码,考虑到iOS8之后VideoToolBox开放使用,选用VideoToolBox进行编码。坑爹的是针对它连文档都没有。github上有一个二次开发的OC版本叫VideoToolBoxPlus,地址:https://github.com/McZonk/VideoToolboxPlus,成功度过硬编码难关。推流选择使用RTMP,选择第三方库libRTMP,并编译成功。编译方法在上一篇笔记中。服务器采用Nginx+rtmp搭建,地址:http://www.henishuo.com/mac_nginx_rtmp_server/?utm_source=tuicool&utm_medium=referral。最终阵亡在RTMP传输上,RTMP需要传输H.264格式的视频流,需要把编码后的CMSampleBuffer再编码为H.264格式进行传输。
从CMSampleBuffer提取相关数据组装SPS、PPS、视频数据NALU,再将NALU通过RTMP传输到服务器。最终结果是服务器端能收到数据,但不能正确解析视频格式。分析为组装NALU时出错或用RTMP传输时传值出错。这段耗时一个多星期的原生开发到此结束了。
VideoCore:地址:https://github.com/jgh-/VideoCore经过不断的寻找,终于找到了这个框架,但pod下来之后,编译过不去。还是六个月之前更新的。新浪有一个folk过来的,我没用。地址:https://github.com/sinacloud/VideoCore。还有个貌似腾讯的,看提交注释像是改了些bug,并且上次提交日期就在一个月之前,说明还在维护,可以尝试使用:https://github.com/goodow/VideoCore。
GDLiveStreaming:这是最终选用的第三方框架。地址:https://github.com/goodow/GDLiveStreaming。据说是腾讯直播的音视频采集和RTMP推流,纯OC接口,使用方便。使用教程:http://www.jianshu.com/p/83da490c0f95。使用上面搭建的本地服务器测试,直播延时在4s左右,而且是真正的开源代码,可以自己研究怎么使用了。网上一堆直播SDK,放在github上,下下来一看,.a库!!!好坑。这个还算比较良心了,学习用也不错。
mac测试服务器:采用Nginx+rtmp搭建,地址:http://www.henishuo.com/mac_nginx_rtmp_server/?utm_source=tuicool&utm_medium=referral。
拉流端:之前笔记中介绍过的FFMPEG+kxMovie,可以正常使用。之前发现bilibili站有一个开源项目叫 ijkplayer,貌似很不错,地址:https://github.com/Bilibili/ijkplayer。
最终结果:通过使用GDLiveStreaming + (Nginx+RTMP) + (FFMPEG+KxMovie),实现了简单的直播视频功能,手机推流+服务器+另一台手机拉流观看直播。
相关文章推荐
- iOS 打包 上架流程
- iOS 单元测试1- 单元测试框架选型
- 编译libRTMP(RTMPdump) For iOS
- iOS平台基于ffmpeg的视频直播技术揭秘
- iOS 宏(define)与常量(const)的正确使用
- 怎么升级iOS10教程
- 支付宝 sdk 调试
- iOS导航栏随滑动渐隐渐现且不影响push页面导航栏的实现方式
- iOS开发让Xcode的控制台支持LLDB类型的打印
- iOS runtime 和 runloop
- iOS 将Log日志重定向输出到文件中保存
- iOS中取到当前的时间
- iOS开发-黑科技防止多次添加删除KVO出现的问题
- iOS初探+load和+initialize
- 应用直接退出
- iOS 多线程GCD的基本使用
- iOS真机调试步骤(Xcode8.0以上版本)(2015年)
- iOS真机调试步骤(Xcode8.0以上版本)
- 第一个博客写一下对runtime的理解
- iOS - oc与js交互的几种方式(1)