是的,你需要編碼所有的變體和第一生成播放媒體(含段的播放列表)。
如果你想讓你可以在一個命令中完成,因爲ffmepg
支持multiple inputs/outputs。例如:
ffmpeg -i input \
... [encoding parameters 1] ... output1 \
... [encoding parameters 2] ... output2 \
....[encoding parameters 3] ... output3
您必須提供多種質量/比特率的變體,但縱橫比應保持相同。保持寬高比最初是強制性的,但在最新的HLS創作指南中將其降級爲推薦。
所有變體流必須是關鍵幀對齊的,因此使用-g
選項設置GOP大小,禁用場景切換檢測並使用片段時間段hls_time
,該時間段是您的關鍵幀間隔的倍數。
一旦您擁有了所有3x m3u8
媒體播放列表,您就可以手動創建指向每個媒體播放列表的主播放列表。從Apple HLS documentation
例如,你必須根據自己的編碼選項更改帶寬,編解碼器,分辨率和播放列表文件名:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2855600,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=960x540
medium.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=5605600,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1280x720
high.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1755600,CODECS="avc1.42001f,mp4a.40.2",RESOLUTION=640x360
low.m3u8
您的答案和Apple HLS文檔都不解釋CODECS參數的含義。十六進制數字需要說明。沒有這個,你的答案是不可用的。 – DavidC
@DavidC CODECS並不總是必需的。格式在[RFC 6381](https://tools.ietf.org/html/rfc6381)中進行了解釋,CODECS的用法在[HLS草案](https://tools.ietf.org/html/draft-潘託斯 - HTTP的實時流媒體-19)。 – aergistal
如何計算「BANDWIDTH」值? (它不在輸入中。)根據[規範](https://tools.ietf.org/html/rfc8216#section-4.3.4.2),它應該是流的峯值帶寬。 – mjs