現在簡單說一下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引數 這...