2023年6月27日发(作者:)
DASH简介及使⽤⽅法(FFmpeg,MP4Box)引⼊XXXX后,(对照竞品)⽹页端的视频观看体验存在以下问题:
1. 切换画质(1080P/⾼清/标清)时,播放器会⿊屏,并回退到关键帧重新播放。
2. 不能根据⽹络状况⾃适应调整码率(YouTube默认启⽤⾃适应码率,对照画质选项中的“Auto”)要解决以上问题,需要引⼊流媒体解决⽅案。DASH为什么选择DASHYouTube采⽤DASH!其⽹页端及移动端APP都使⽤了DASH。DASH的其他采⽤者包括:Netflix, Hulu, …什么是DASH⼀种服务端、客户端的流媒体解决⽅案:
服务端:
将视频内容分割为⼀个个分⽚,每个分⽚可以存在不同的编码形式(不同的codec、profile、分辨率、码率等);
播放器端:
就可以根据⾃由选择需要播放的媒体分⽚;可以实现adaptive bitrate streaming技术。不同画质内容⽆缝切换,提供更好的播放体验。DASH中的重要概念MPD
媒体⽂件的描述⽂件(manifest),作⽤类似HLS的m3u8⽂件。MPD⽂件以XML格式组织,其层次结构参图1。Representation
对应⼀个可选择的输出(alternative)。如,480p video,720p video, 44100采样 audio,22050采样audio,都使⽤Representation描述。Segment(分⽚)
每个Representation会划分为多个Segment。Segment分为4类,其中,最重要的是:Initialization Segment(每个Representation都包含1个Init Seg),Media Segment(每个Representation的媒体内容包含若⼲Media Seg)!图1. MPD的层次⽰意图 (每个Rrepresentation使⽤fMP4⽂件格式)fMP4fMP4(fragmented MP4),可以简单理解为分⽚化的MP4,是DASH采⽤的媒体⽂件格式,⽂件扩展名通常为(.m4s或直接⽤.mp4)。
图2. 普通MP4与fMP4组织结构对⽐,fMP4与DASH 分⽚概念对照图2说明:普通MP4 由索引⽂件头⽂件moov box和媒体数据mdat box组成。fMP4 由分⽚组成,可以按整个⽂件存储,也可以按分⽚存储:如果按照单个⽂件存储,每个输出是⼀个m4s⽂件。 完整的fMP4视频可以描述为如下形式:
moov + (moof + mdat) * N
其中moof box是分⽚(fragment)的标识, mdat box存放的是当前分⽚的媒体数据;如果按照分⽚存储,每个分⽚是⼀个m4s⽂件,输出对应了多个m4s。fMP4中的第⼀个分⽚,对应了DASH协议中Initialization Segment;其后的分⽚,则对应Media Segment。YouTube调研⼀段15’ 720分辨率视频,YouTube有如下Representation:
1. audio1 id:139 codec:HE-AAC 采样率22050 分⽚:5
2. audio2 id:140 codec:AAC-LC 采样率44100 分⽚:5
3. video1 id:133 codec:264 main profile level1.2 240p 分⽚:4
4. video2 id:134 codec:264 main profile level2.0 360p 分⽚:4
5. video3 id:135 codec:264 main profile level2.0 480p 分⽚:4
6. video4 id:160 codec:264 main profile level1.1 144p 分⽚:4
7. video5 id:136 codec:264 main profile level3.0 720p 分⽚:4关注视频部分,4个分⽚包含:1个Init Seg,3个Media Seg,视频内容部分分别为5.12s 5.12s 4.76s。正常顺序播放
图3. 正常顺序播放的时序图1. 下载MPD2. 下载Init Seg3. 下载Media Seg(s)
在第6s已经完成所有视频分⽚的下载。切换⾏为
图4. 发⽣switch的时序图切换前,Representation 0的所有分⽚已经下载完成,交互流程同上,
第8s进⾏画质切换:
1. 下载Representation 1的Init Seg # 每次切换都会先下载Init Seg
2. 下载Representation 1 当前所在分⽚!Seg2
3. 下载后续分⽚。说明:YouTube在播放Rep0 Seg2期间发⽣切换,会下载Repr1的Seg2,这属于YouTube的播放策略。很多DASH播放器,此时会直接请求Repr1的Seg3。DASH应⽤1)FFmpeg 转码FFmpeg⽀持DASH封装,仿YouTube格式的命令:ffmpeg -hide_banner -y -threads 0 -i INPUT_VIDEO -filter_complex 'split=2[s0][s1];[s0]scale=480:-2[480s];[s1]scale=360:-2[360s]' -map '[480s]' -c:v:输出:mpd描述⽂件m4s 输出⽂件
视频两个⽂件分别是480p crf25 和360p crf 27。
⾳频两个⽂件分别是22050采样率和44100采样率。
独⽴⽂件内部每个分⽚时长5s。2)FFmpeg 转封装若存在兼容普通mp4转码的需求,可以直接对已编码视频转封装得到DASH⽂件,避免重复编码。
要点在于保证编码命令中的GOP length与DASH要求匹配,否则会发⽣卡顿问题,需要在播放器端做额外处理。3) MP4Box 转封装mp4box -dash 5000 -frag 5000 -rap -frag-rap -profile dashavc264:onDemand 4 4 audio.m4a -out 4)DASH播放使⽤开源的⽹页端DASH player 可以播放,如下图。
图5. 后台转码的实际播放效果
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687821823a48130.html
评论列表(0条)