使用FFMPEG生成HLS

2021-08-20 11:41:29 字數 1658 閱讀 2134

現在簡單說一下m3u8檔案。以下是由ffmpeg生成的乙個直播的m3u8檔案:

extm3u

ext-x-version:3

ext-x-targetduration:13

ext-x-media-sequence:4

extinf:12.345667,

playlist4.ts

extinf:9.217544,

playlist5.ts

extinf:7.757744,

playlist6.ts

extinf:11.928589,

playlist7.ts

extinf:11.761744,

playlist8.ts

extinf:1.710044,

playlist9.ts

ext-x-endlist

ext-x-targetduration用來表示每個ts分片間隔為13秒。該引數是必須的,並且在同乙個列表中是不能被改變的(直播是有列表大小的,當列表被重新整理後,這個引數也可能不一樣)。一般為10秒。

ext-x-endlist表示列表結束,是必須要有的引數。

先說說二者hls實現上的一些區別吧。

1、點播就是將乙個**檔案切分成多個ts檔案,並且m3u8檔案包含全部的ts檔案列表。

2、直播則列表長度上會有所控制,也就是一般會比較短,並且為了減少延遲,可能會將每個分片的時長控制低於10秒,而點播應該都會直接使用10秒這個預設值吧。(並不是十分清楚現在移動端的實現是否如我這邊所說)

3、點播的m3u8是死的,也就是一旦分片完成後,一般不會再去修改m3u8檔案(內容)。而直播的m3u8檔案(內容)則會根據直播的時間進行更新。(其實這點很重要,直播與點播的最大區別,也應該是大部分客戶端判斷的標準吧,目前還沒細緻去研究任何一款客戶端)

接下來就說一下ffmpeg如何來生成點播與直播吧。

ffmpeg -i source.mp4 -codec:v libx264 -codec:a *** -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_time 10 out%03d.ts

接下來說一下直播,直播的話,ffmpeg可以通過上面的點播的ssegment模組,也可以直接通過hls模組來實現。先說說如果通過ssegment模組來實現:

ffmpeg -re -i source.mp4 -codec:v libx264 -codec:a *** -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_list_flags +live -segment_list_size 6 -segment_time 10 out%03d.ts

ffmpeg -re -i source.mp4 -codec:v libx264 -codec:a libfaac -map 0 -f hls -hls_list_size 6 -hls_wrap 10 -hls_time 10 playlist.m3u8

從此次對hls相關的實驗以及知識點的學習,hls確實是乙個很不錯的解決方案,主要是對移動裝置的相容非常之好,ts格式解碼方便。並且可以大量使用現成的http的cdn加速功能。目前網際網路就http協議的使用度最高,也最成熟了。關於ffmpeg生成hls就先說到這裡了。

使用FFMPEG生成HLS

現在簡單說一下m3u8檔案。以下是由ffmpeg生成的乙個直播的m3u8檔案 playlist4.ts playlist5.ts playlist6.ts playlist7.ts playlist8.ts playlist9.ts 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

使用FFMPEG生成HLS

現在簡單說一下m3u8檔案。以下是由ffmpeg生成的乙個直播的m3u8檔案 extm3u ext x version 3 ext x targetduration 13 ext x media sequence 4 extinf 12.345667,playlist4.ts extinf 9.21...

使用ffmpeg切片出hls

測試的時候經常要用到ffmpeg切hls的流 ffmpeg re i g media baifa.mp4 codec copy f hls hls list size 4 hls wrap 20 hls time 15 g media demo index.m3u8 主要是 hls wrap引數 這...