場景ide
播放m3u8的ts切片,必需要完整的下載一個ts切片,纔可以播放,設置hls_time的時間間隔越短越好,實際過程當中設置切片時間間隔爲1秒,調用以下指令視頻
ffmpeg -i test.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_time 1 index.m3u8圖片
實際上產生的切片時間間隔#EXT-X-TARGETDURATION:443it
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:443
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:53.000000,
index0.ts
#EXTINF:153.000000,
index1.tsclass
說明沒有按照參數輸入,進行切片test
緣由ffmpeg
ts文件的切割,還跟原文件視頻的GOP大小有關係(也就是兩個I幀之間的時間間隔),由於任何一個ts分片第一幀必須是I幀,不然沒法最快播放,而且第一幀不是I幀,對於播放器也是沒有任何的意義,直接被播放器扔掉。任何一個視頻流必須在獲取到第一個I幀才能成功解碼出圖片。雖然指定了1秒切割一個ts文件,實際上,因爲原視頻流可能好幾秒纔有一個I幀,因此必須等到下一個I幀,纔會從新開始切片
下載
解決思路im
既然知道要1秒產生一個ts分片,那就必須產生切片的過程當中,強制一秒中產生一個關鍵幀,解決問題
di
解決方案
ffmpeg -i test.mp4 -force_key_frames "expr:gte(t,n_forced*1)" -strict -2 -c:a aac -c:v libx264 -hls_time 1 -f hls index.m3u8
指令說明
-force_key_frames "expr:gte(t,n_forced*1)" 設置關鍵幀間隔,設置間隔爲2秒的參數以下:-force_key_frames "expr:gte(t,n_forced*2)"