现在的移动互联网时代,大家的网速真是越来越快,高带宽的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. Bit Twiddling Hacks

    http://graphics.stanford.edu/~seander/bithacks.html Bit Twiddling Hacks By Sean Eron Andersonseander ...

  2. Eclipse配置PyDev插件

    安装python解释器 安装PyDev: 首先需要去Eclipse官网下载:http://www.eclipse.org/,Eclipse需要JDK支持,如果Eclipse无法正常运行,请到Java官 ...

  3. Codeforces Educational Codeforces Round 5 A. Comparing Two Long Integers 高精度比大小,模拟

    A. Comparing Two Long Integers 题目连接: http://www.codeforces.com/contest/616/problem/A Description You ...

  4. [Express] Level 5: Route file

    Using a Router Instance Let's refactor app.js to use a Router object. Create a new router object and ...

  5. except ShortInputException,x中逗号

    class ShortInputException(Exception): def __init__(self, length, atleast): Exception.__init__(self) ...

  6. Effective_java之二:慎用重载函数

    每周写一篇技术博客的愿望一直没实现, 从这周開始每周五晚10点是写博客的时间 OOP的一个重要特性就是多态,实现多态的目的有多种途径.比方:重载overload.重写overwite.面向接口编程等等 ...

  7. 关于self.用法的一些总结

    转自:http://www.cocoachina.com/bbs/read.php?tid=12850&page=1 最近有人问我关于什么时候用self.赋值的问题, 我总结了一下, 发出来给 ...

  8. 解决vim中鼠标右键无法复制的问题

    转:http://www.cnblogs.com/jianyungsun/archive/2011/03/19/1988855.html 这是我的vim配置文件:jeffy-vim-v2.4.tar ...

  9. ubuntu16.04 编译安装mysql5.7.x,以及配置使用

    編譯與安裝: 源码下载地址:http://dev.mysql.com/downloads/mysql/    选择Generic Linux (Architecture Independent), C ...

  10. Dapper ORM 用法

    假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM.Dapper的优势:1,Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,编译后就40K ...