iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)

推流端:自己开发难度很大,视频直播就被卡死了,音频根本没来得及弄,最终使用了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),实现了简单的直播视频功能,手机推流+服务器+另一台手机拉流观看直播。

你可能感兴趣的:(iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放))