视频格式 | 播放体验 | 流量占用情况 |
---|---|---|
DASH | 统计直播推流端到播放端延时。支持和视频帧绑定的内容交互。比如,直播答题在播放端的弹窗等。 | 小 |
HLS | 对视频进行切片,按切片播放,缓存小起播快;拖动时间轴到任意时间播放时,可以快速定位到对应的切片进行播放,响应快。 | 整体占用小,播放一个切片只下载一个切片内容;对于低码率的视频场景,因封装代价高导致流量占用相对较高。 |
MP4 | 头文件较大,边下边缓存,起播相对HLS和DASH慢一些;拖动时间轴播放时,需要一定的时间缓存;市场上大多数的浏览器客户端均能够播放,播放成功率高。 | 拖动时间轴播放时,仍然需要下载整个头文件,耗费流量大;因流量占用较大,建议用在短视频处理的场景。 |
1.HLS格式
1.1 如何区分直播和点播
-
判断是否存在 #EXT-X-ENDLIST
-
一个M3U8文件,如果结尾不存在 #EXT-X-ENDLIST,那么一定是 直播,不是点播
-
-
判断 #EXT-X-PLAYLIST-TYPE 类型
-
'#EXT-X-PLAYLIST-TYPE'有两种类型:
-
VOD 即 Video on Demand,表示该视频流为点播源
-
EVENT 表示该视频流为直播源
-
-
1.2 HLS如何实现自适应码率
HLS有两种类型:
-
Media Playlist
-
Master Playlist:内部提供的是同一份媒体资源的多份流列表资源。其格式如下所示:
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
#EXT-X-ENDLIST
码率自适应技术:
-
Adaptive Bitrate Streaming,一种视频码率可以根据网络状况或客户端播放buffer情况自动调整的视频传输技术。
有三种不同的码率自适应算法:
-
Buffer-based:基于客户端的播放缓冲区buffer情况决策下一片段的码率档位
-
设置保护窗口,当buffer小于保护窗的时候,降低码率;
-
设置缓存限制:当buffer长度大于该限制的时候,提高码率;
-
-
Rate-based:基于预测的带宽去决策下一片段的码率档位
-
通过对之前下载的视频切片的带宽进行收集处理, 进而预测下载下一个切片的网络带宽
-
-
同时考虑预测吞吐量和buffer信息决策下一片段的码率档位
1.3 EXT-X-DISCONTINUITY
当HLS播放过程中编码参数发生变化的时候,需要加上#EXT-X-DISCONTINUITY字段分隔开,重启编码器。如果我想在HLS中插入广告,就需要加上这个字段。
-
file format
-
number and type of tracks
-
encoding parameters
-
encoding sequence
-
timestamp sequeue
【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~
![]()
1.4 TS结构介绍
TS也称MPEG-TS,其中TS是"Transport Stream",MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。
-
TS格式是主要用于直播的码流结构,具有很好的容错能力。
-
TS流中不包含快速seek的机制,只能通过协议层实现seek。HLS协议基于TS流实现的。
TS文件(流)可以分为三层:
-
TS层(Transport Stream),TS层在PES层上加入了数据流标识和传输的必要信息。
-
PES层(Packet Elemental Stream),PES层在音视频数据上加了时间戳等对数据帧的说明信息。
-
ES层(Elementary Stream),ES层就是音视频数据
1.5 fMP4
fMP4 跟普通 mp4 基本文件结构是一样的。普通mp4用于点播场景,fmp4通常用于直播场景。
-
普通mp4的时长、内容通常是固定的。fMP4 时长、内容通常不固定,可以边生成边播放;
-
普通mp4完整的metadata都在moov里,需要加载完moov box后,才能对mdat中的媒体数据进行解码渲染;
-
fMP4中,媒体数据的metadata在moof box中,moof 跟 mdat (通常)结对出现。moof 中包含了sample duration、sample size等信息,因此,fMP4可以边生成边播放;
一个完整的fMP4文件是:moov + (moof + mdat)* N
2.DASH格式
工作原理:
-
下载MPD文件,解析DASH相关信息;
-
下载视频的Initialization Segment和音频的Initialization Segment;
-
下载视频的第一个分片,下载音频的第一个分片;
-
当视频和音频的第一个分片都下载完,播放器内部再进行一些相关处理后,就可以开始播放出画面。后续就是不断轮询更新MPD文件和下载后续的音频和视频分片。
作者:安纯旦
链接:音视频面试涨知识(四) - 掘金