现在的移动互联网时代,大家的网速真是越来越快,高带宽的WIFI和覆盖率极大的4G,4G+把手机观看视频直播推上了风口浪尖,越来越多的应用在玩手机视频直播,我们做的应用里也要嵌入视频直播。

  这篇文章里我们暂时不讨论视频的推流(视频推流一般使用RTMP推流协议,强烈建议使用OBS进行推流,亲测十分强大)。我们在这里仅仅来聊聊视频直播拉流的框架级方案(当然大家也可以自己尝试去写一个支持实时流媒体的播放器出来,现在的主流播放器基本都是去修改变异FFmpeg实现的)。

  在尝试嵌入直播功能时,我寻找了许多解决方案,包括阿里云直播腾讯云直播云直播保利卫视直播乐视云直播,至于客户端播放器也选择了许多,比如腾讯云提供的SDK,云直播提供的SDK,保利威视提供的JS接口,Vitamio, ExoMedia,VCL

  现在我们依次简单介绍下这些平台或者框架:

1、阿里云直播

  阿里云直播实际上并没有提供实际性的支持,只是提供了一个框架级的解决方案,进到阿里云直播的介绍页面,只是提供了一个框架图,所以如果你不是为大平台做直播的话,不建议真的自己去弄这个架构。

2、腾讯云直播

  腾讯云直播是在2015年下半年才正式上线了,提供了比较好的支持,里面有直播频道管理,拉流转码管理,还提供了h5嵌入的解决方案以及SDK级的解决方案。但是腾讯云直播的播放SDK并不是很完善,比如就不支持自适应控件大小调整视频的Size,并且不支持播放RTMP的视频源。

3、云直播

  云直播会提供给用户一个账户以及服务码,用户需要通过直播云的SDK获取使用它的推流Demo进行推流,并且,一个频道的直播拉流地址会每次都改变,这个给观看视频增加了难度,直播云也同意提供了一个播放器去播放rtmp以及hls,但是做的实在不敢恭维,缺少了许多必须的功能,比如视频无法动态大小调整,无法进行视频全屏切换,后台驻留Crash等等,所以基本不用考虑使用直播云的播放sdk。

4、保利威视

  保利威视的后台管理和腾讯云比较接近,同样有频道管理,但是在后台没有给出推流地址,不过保利威视的技术人员说可以提供,但是保利威视不能给出拉流地址,只允许用户用WebView嵌入JS的方式去播放直播,这给客户端造成了大量的麻烦,比如由于JS是使用了h5的Video标签,无法对外提供用户点击了全屏,点击了暂停等用户行为的暴露借口,使得客户端很难在原生层定制播放器所在的页面,同样,播放器的样式也受到了极大的限制。

5、乐视云直播

  乐视云直播我没有实际使用过,只看过它的官方文档,光看文档能够看出来乐视云直播的后台管理和腾讯云直播相差不大,乐视也提供了一个播放SDK,这个SDK明显要比腾讯的好一些,文档也更全面一点,功能也更丰富。但是看文档只支持RTMP的直播拉流,并不支持HLS的样子。有机会我会去耍耍。

6、Vitamio

  Vitamio中文又称维他蜜,是北京的一个公司制作的商业开源万能播放器,基本你能想到的播放协议,它全部都能支持,Vitamio目前的Android版本已经到了5.0了,2015年的时候刚出了iOS版的Vitamio播放器。但是毕竟是商业播放器,它不允许公司应用非授权情况下使用,听说授权的价格十分昂贵,如果不授权,也得不到Vitamio团队的技术支持,Vitamio Android版虽然到了5.0版本了,但是在我用下来后,还是问题很多的。比较致命的是

  1.经常出现声轨丢失(iOS版正常,同样的播放地址,Android版却丢失了声音)

  2.视频播放中或者暂停中如果切到后台或者其他页面(onStop后)会自动停止播放,并且在重新进入的时候自动从头播放

  3.视频Seek经常失败,或者不准确

  4.播放hls视频源时经常会莫名结束(官方说会通过设置超时时间来解决这个问题,但是一直没有提供设置超时时间的接口)

7、ExoMedia

  可能这个框架并不是十分有名气,只是Github上的一个开源库。它是基于Google的ExoPlayer开发的,不过在播放视频直播上,目前只支持HLS协议。但是在播放器的其他功能方面个人觉得并不弱于Vitamio。

8、VCL

  这个说起来就有些来头了,vcl不是一般开发者可以嵌入的,需要一定的C++/C的代码能力,比如VCL For Android就需要去写jni来接入VCL了。听说Vitamio也是VCL的一个变种。

  说了这么多,我在目前的应用中到底使用了什么解决方案来嵌入了直播呢?综合了很多因素考虑,直播平台使用了腾讯云,推流工具使用了OBS,让腾讯云同时生成了RTMP拉流地址和HLS拉流地址,iOS客户端使用Vitamio播放RTMP(延迟短),Android客户端使用ExoMedia播放HLS(延迟长)

  

Android&iOS视频直播之旅的更多相关文章

  1. 最近这么火的iOS视频直播

    快速集成iOS基于RTMP的视频推流 http://www.jianshu.com/p/8ea016b2720e iOS视频直播初窥:高仿<喵播APP> http://www.jiansh ...

  2. iOS 视频直播

    ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...

  3. iOS视频直播初窥:高仿<喵播APP>

    视频直播初窥 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, 要 ...

  4. iOS视频直播

    视频直播技术点 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, ...

  5. IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构

    本文转载至 http://blog.csdn.net/u014011807/article/details/47144027 前段时间由于工作需要做了一个视频直播/智能家居类的应用.算是对iOS音视频 ...

  6. iOS视频直播用到的协议

    一 .流媒体 1 - 伪流媒体 1.1 扫盲:边下载边播放1.2 伪流媒体:视频不是实时播放的,先把视频放在数据库,再供客户端访问,比如:优酷,爱奇艺等 1.3 特点: 边下边存,文件会保存.遵守了 ...

  7. iOS 视频直播弹幕的实现

    弹幕,并不是一个多么复杂的功能. 1.弹幕的实现性分析 首先,从视觉上明确当前弹幕所具有的功能 从屏幕右侧滑入左侧,直至完全消失 不管是长的弹幕,还是短的弹幕,速度一致(可能有的需求是依据弹幕长度,调 ...

  8. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  9. 视频直播SDK-ios版

    IOS视频直播接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x720,6 ...

随机推荐

  1. WM_QUIT,WM_CLOSE,WM_DESTROY 消息出现顺序及调用方式

    http://bbs.ednchina.com/BLOG_ARTICLE_3005455.HTM VC中WM_CLOSE.WM_DESTROY.WM_QUIT消息出现顺序及调用方式 wxleasyla ...

  2. Codeforces Round #337 (Div. 2) B. Vika and Squares 贪心

    B. Vika and Squares 题目连接: http://www.codeforces.com/contest/610/problem/B Description Vika has n jar ...

  3. oracle 迁移到 mysql(结构和数据)

    1下载MySQL Migration Toolkit 2安装:jdk-6u38-ea-bin-b04-windows-amd64-31_oct_2012.exe 3下载ojdbc14.jar 具体地址 ...

  4. 使用cwRsync实现windows下文件定时同步【转】

    1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...

  5. [Express] Level 5: Route Instance -- refactor the code

    Route Instance Let's rewrite our cities routes using a Route Instance. Create a new Route Instance f ...

  6. knockout 监控数组的缺点

    knockout的监控数组没有想象中的强大,只能监控数组元素的位置变化,或个数的增减,然后对视图对应区域进行同步. <!DOCTYPE html> <html> <hea ...

  7. Shell中的函数

    一.在脚本中定义函数 与变量一样,在使用函数之前应该对函数进行定义.与其他编程类语言相比,由于没有数据类型的概念,因此也不必定义函数的类型. (1)在脚本中可以使用以下方式定义函数: function ...

  8. NopCommerce使用Autofac实现依赖注入

    NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数 ...

  9. PHP自动分表程序

    http://blog.zol.com.cn/2210/article_2209590.html /** * 分表程序 *  * @author Shen Xi shen.xi@zol.com.cn  ...

  10. gridview_RowCommand 获取当前行中的控件

    <asp:GridView ID="gvStorglog" runat="server" Width="100%" SkinID=&q ...