如今的移动互联网时代,你们的网速真是愈来愈快,高带宽的WIFI和覆盖率极大的4G,4G+把手机观看视频直播推上了风口浪尖,愈来愈多的应用在玩手机视频直播,咱们作的应用里也要嵌入视频直播。html
这篇文章里咱们暂时不讨论视频的推流(视频推流通常使用RTMP推流协议,强烈建议使用OBS进行推流,亲测十分强大)。咱们在这里仅仅来聊聊视频直播拉流的框架级方案(固然你们也能够本身尝试去写一个支持实时流媒体的播放器出来,如今的主流播放器基本都是去修改变异FFmpeg实现的)。git
在尝试嵌入直播功能时,我寻找了许多解决方案,包括阿里云直播,腾讯云直播,云直播,保利卫视直播,乐视云直播,至于客户端播放器也选择了许多,好比腾讯云提供的SDK,云直播提供的SDK,保利威视提供的JS接口,Vitamio, ExoMedia,VCL。github
如今咱们依次简单介绍下这些平台或者框架:架构
一、阿里云直播框架
阿里云直播实际上并无提供实际性的支持,只是提供了一个框架级的解决方案,进到阿里云直播的介绍页面,只是提供了一个框架图,因此若是你不是为大平台作直播的话,不建议真的本身去弄这个架构。ide
二、腾讯云直播工具
腾讯云直播是在2015年下半年才正式上线了,提供了比较好的支持,里面有直播频道管理,拉流转码管理,还提供了h5嵌入的解决方案以及SDK级的解决方案。可是腾讯云直播的播放SDK并非很完善,好比就不支持自适应控件大小调整视频的Size,而且不支持播放RTMP的视频源。阿里云
三、云直播.net
云直播会提供给用户一个帐户以及服务码,用户须要经过直播云的SDK获取使用它的推流Demo进行推流,而且,一个频道的直播拉流地址会每次都改变,这个给观看视频增长了难度,直播云也赞成提供了一个播放器去播放rtmp以及hls,可是作的实在不敢恭维,缺乏了许多必须的功能,好比视频没法动态大小调整,没法进行视频全屏切换,后台驻留Crash等等,因此基本不用考虑使用直播云的播放sdk。视频
四、保利威视
保利威视的后台管理和腾讯云比较接近,一样有频道管理,可是在后台没有给出推流地址,不过保利威视的技术人员说能够提供,可是保利威视不能给出拉流地址,只容许用户用WebView嵌入JS的方式去播放直播,这给客户端形成了大量的麻烦,好比因为JS是使用了h5的Video标签,没法对外提供用户点击了全屏,点击了暂停等用户行为的暴露借口,使得客户端很难在原生层定制播放器所在的页面,一样,播放器的样式也受到了极大的限制。
五、乐视云直播
乐视云直播我没有实际使用过,只看过它的官方文档,光看文档可以看出来乐视云直播的后台管理和腾讯云直播相差不大,乐视也提供了一个播放SDK,这个SDK明显要比腾讯的好一些,文档也更全面一点,功能也更丰富。可是看文档只支持RTMP的直播拉流,并不支持HLS的样子。有机会我会去耍耍。
六、Vitamio
Vitamio中文又称维他蜜,是北京的一个公司制做的商业开源万能播放器,基本你能想到的播放协议,它所有都能支持,Vitamio目前的Android版本已经到了5.0了,2015年的时候刚出了iOS版的Vitamio播放器。可是毕竟是商业播放器,它不容许公司应用非受权状况下使用,据说受权的价格十分昂贵,若是不受权,也得不到Vitamio团队的技术支持,Vitamio Android版虽然到了5.0版本了,可是在我用下来后,仍是问题不少的。比较致命的是
1.常常出现声轨丢失(iOS版正常,一样的播放地址,Android版却丢失了声音)
2.视频播放中或者暂停中若是切到后台或者其余页面(onStop后)会自动中止播放,而且在从新进入的时候自动从头播放
3.视频Seek常常失败,或者不许确
4.播放hls视频源时常常会莫名结束(官方说会经过设置超时时间来解决这个问题,可是一直没有提供设置超时时间的接口)
七、ExoMedia
可能这个框架并非十分有名气,只是Github上的一个开源库。它是基于Google的ExoPlayer开发的,不过在播放视频直播上,目前只支持HLS协议。可是在播放器的其余功能方面我的以为并不弱于Vitamio。
八、VCL
这个提及来就有些来头了,vcl不是通常开发者能够嵌入的,须要必定的C++/C的代码能力,好比VCL For Android就须要去写jni来接入VCL了。据说Vitamio也是VCL的一个变种。
说了这么多,我在目前的应用中到底使用了什么解决方案来嵌入了直播呢?综合了不少因素考虑,直播平台使用了腾讯云,推流工具使用了OBS,让腾讯云同时生成了RTMP拉流地址和HLS拉流地址,iOS客户端使用Vitamio播放RTMP(延迟短),Android客户端使用ExoMedia播放HLS(延迟长)