一、前言:
exoplayer主要针对网络自适应流进行播放,从官方文档我们了解到,exoplayer支持的网络自适应流包括DASH、HLS和SmoothStreaming,下面对网络自适应流做一个简单介绍。

二、DASH流简介:
DASH流是基于HTTP的动态自适应流。MPEG-DASH通过把内容分割成小的基于HTTP的文件段序列,来进行流媒体播放。各个文件段可以设置成不同的比特率进行编码,以满足不同的客户端的网络需求。比如,DASH客户端可以根据当前的网络状况,自动选择对应的最匹配的比特率文件段下载,进行回放,而不会引起停顿或重新缓冲。

使用DASH流的应用有:YouTobe、Netflix、Hulu…

DASH流的一些重要概念介绍:

MPD:媒体文件的描述文件,类似于HLS的m3u8文件;

Representation:可选择的输出描述,如,480p video,720p video, 44100采样率 audio,22050采样率audio;

Segment:分片,每个Representation会划分为多个Segment。Segment分为4类,其中,最重要的是:Initialization Segment(每个Representation都包含1个Init Seg),Media Segment(每个Representation的媒体内容包含若干Media Seg)

Fmp4:分片化的mp4,是DASH采用的媒体文件格式,文件扩展名通常为(.m4s或直接用.mp4);

android exoplayer设置为圆形 exoplayer支持格式_二级索引


这张图比较清晰地告知我们普通MP4与fMP4组织结构对比,fMP4与DASH 分片概念对照。

因为没有搭建专门的DASH推流框架,所以DASH的推流的搭建不在我的关注范围之内,以下是我在网上找的可用于测试DASH流的地址,建议使用VPN方式访问,可用VLC播放器测试地址是否有效:


三、HLS流简介:

HTTP Live Streaming,即HLS,是苹果公司提出的基于HTTP的流媒体网络传输协议,类似于MPEG-DASH,HLS最重要的是M3U8文件,M3U8文件其实就是以UTF-8编码的M3U文件,该文件本身不能播放,只是用于存放待播放视频流的基本信息:

android exoplayer设置为圆形 exoplayer支持格式_客户端_02


客户端播放HLS视频流的逻辑其实非常简单,先下载一级Index file,它里面记录了二级索引文件(Alternate-A、Alternate-B、Alternate-C)的地址,然后客户端再去下载二级索引文件,二级索引文件中又记录了TS文件的下载地址,这样客户端就可以按顺序下载TS视频文件并连续播放。

也就是说,HLS有两级索引:
(a) 第一级索引存放的是不同码率的HLS源的M3U8地址,也就是二级索引文件的地址;
(b) 第二级索引则记录了同一码率下TS切片序列的下载地址;

客户端获取一级M3U8文件后,根据自己的带宽,去下载相应码率的二级索引文件,然后再按二级索引文件的切片顺序下载并播放TS文件序列;