Android视频直播概要

Android视频直播概要_第1张图片

视频直播大体框架如上图

1.直播整体流程:

直播的整体流程如下:录制->编码->网络传输->解码->播放。根据该流程分为以下技术点:

怎样录制直播视频

怎样实时上传直播视频

怎样播放直播视频

直播间的用户是如何交互

2.视频直播协议:

        2.1精简一对多业务模型:


Android视频直播概要_第2张图片

        2.2各直播协议的对比:


Android视频直播概要_第3张图片

RTMP--->(Real Time Messaging Protocol)是 Macromedia 开发的一套视频直播协议,现在属于 Adobe。

使用RTMP技术的流媒体系统有一个非常明显的特点:使用 Flash Player 作为播放器客户端,而Flash Player 现在已经安装在了全世界将近99%的PC上,因此一般情况下收看RTMP流媒体系统的视音频是不需要安装插件的。用户只需要打开网页,就可以直接收看流媒体。和 HLS 一样都可以应用于视频直播,区别是 RTMP 基于 flash 无法在 iOS 的浏览器里播放,但是实时性比 HLS 要好。所以一般使用这种协议来上传视频流,也就是视频流推送到服务器。

HLS--->是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。

HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放。

简单归纳:首先将一个完整视频分成多个TS视频文件,用户下载m3u8文件,通过m3u8文件的索引地址  来播放具体的每个小段视频。

HLS的请求播放过程:

        1.HTTP 请求 m3u8 的 url。

        2.服务端返回一个 m3u8 的播放列表,这个播放列表是实时更新的,一般一次给出5段数据的 url。

        3.客户端解析 m3u8 的播放列表,再按序请求每一段的 url,获取 ts 数据流。

HLS的缺点是直播时延时较大,优点是:

        1.传播性好,利于分享等操作。

        2.可以动态发布,有利于实时迭代产品需求并迅速上线。

        3.不用安装 App,直接打开浏览器即可。

HTTP-FLV即使用HTTP协议来流式的传输媒体内容,直接向后台上传编码后的流媒体数据。相对于RTMP,HTTP更简单和广为人知,而且不担心被Adobe的专利绑架。内容延迟同样可以做到2~5秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HTTP-FLV要优于RTMP。

Android视频直播概要_第4张图片

3.播放直播视频(ijkPlayer):

我自己使用的是一款名为ijkPlayer的三方库,该库由b站开源,它是一款基于FFmpeg的轻量级Android/iOS视频播放库。

FFmpeg的是全球领先的多媒体框架,能够解码,编码, 转码,压缩,复用,播放大部分的视频格式。它包含了非常先进的音频/视频编解码库libavcodec。视频播放也可以基于Vitamio库,但是对于非个人移动应用均需购买Vitamio使用授权。而这款ijkPlayer则不需要商业授权。

         3.1:ijkplayer基于 ffmpeg 的跨平台播放器,实现的特性有:

        移除 FFmpeg 中不常用的特性以减小体积。

        对一些在线视频播放的 BUG 修复

        支持安卓 API 9-22 和 iOS 5.1.1-8.3.X

        使用各种平台原生的渲染方式进行优化

        ijkplayer 实现了跨平台功能,支持 Android 和 iOS 双平台;API 易于集成;编译配置可裁剪,方便控制安装包大小;支持 硬件加速解码,更加省电。

4.引入ijkplayer(两种方式):

         4.1---在gradle中引入:

        

Android视频直播概要_第5张图片

这种方案引入比较简单快捷,缺点是ijkPlayer的某些特点无法完全发挥,可能无法满足某些特定的较偏的业务逻辑。

        4.2---编译源码得到

        以Ubuntu为例,Ubuntu需要配置JDK、Android SDK、Android NDK,然后再安装Git, yasm等工具,具体可以参考这篇文章

最后要提到的一点就是,github上面的官方demo下载下来直接运行的话会报错:


Android视频直播概要_第6张图片

因为没有完成源码编译形成的so库,这里采用的方式是:直接通过在Gradle中引入aar库(aar库会包含对应的so库等文件)来运行Demo。

在Ubuntu、Mac或Linux其他发行版等系统下编译源码得到。

你可能感兴趣的:(Android视频直播概要)