Adaptive-HLS流的优劣分析

HLS是Apple采用的基于http的流媒体格式。媒体切片为mpegts格式,manifest文件被称作m3u8。一个主master.m3u8里包含多个不同resolution/bitrate的子流,由客户端播放器根据显示屏size和网络状况选取其中一个子流进行播放,这就是自适应(adaptive)的过程。下面是一个典型的master.m3u8文件。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="audio_0",DEFAULT=YES,LANGUAGE="ZH",URI="waudio_zh.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2926278,RESOLUTION=1920x1080,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="group_audio"
1080p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1936278,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="group_audio"
720p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1056278,RESOLUTION=640x360,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="group_audio"
480p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=616278,RESOLUTION=480x270,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="group_audio"
320p.m3u8

Adaptive的适配过程是由hlsplayer来决定的,大概是这样:第一次访问时,按master.m3u8中的子流顺序来尝试,如果高清流在前,那就从高清流开始尝试。如果低清流在前,那就从低清流开始尝试。后续的播放,player取得了经验数据后,会直接从上次播放的子流开始尝试。

Fragment MP4是经过改造后MP4文件,适合流式传输。fMP4最早是为dash定制的,后来HLS也支持。fMP4 is designed to be referenced by both a HLS playlist (.m3u8) and a DASH manifest (.mpd). 

为什么要采用fMP4呢?这就涉及到HLS的问题了。HLS在选流,无缝切换,seek-play,DRM支持上都不如dash。为了解决这些问题,Apple也就让HLS协议支持fMP4了。

查ffmpeg手册,在win10下面用下面的指令可以生成。

ffmpeg.exe -y -i %1 -g 25 -sc_threshold 1 -f hls -hls_segment_type fmp4  -hls_segment_filename %2/%%4d.m4s  -hls_time 8 -hls_init_time 4 -hls_fmp4_init_filename init.mp4 %2/index.m3u8

#EXTM3U

#EXT-X-VERSION:7

#EXT-X-TARGETDURATION:4

#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-MAP:URI="init.mp4"

#EXTINF:4.166667,

0000.m4s

#EXTINF:4.166667,

0001.m4s

#EXTINF:2.433333,

0002.m4s

#EXT-X-ENDLIST

在linux下面执行有所不同,

cmd = f"ffmpeg -y -i {origin_file} -g 25 -sc_threshold 1 -f hls -hls_segment_type fmp4  -hls_segment_filename {out_dir}/%4d.m4s -hls_time 8 -hls_init_time 4 -hls_fmp4_init_filename {out_dir}/init.mp4 {out_dir}/{out_m3u8} "

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草根大哥

进军大神程序员路上,谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值