2012-09-17 50 views
3

嘗試循環圖像以獲取分段HLS輸出。循環圖像ffmpeg HLS

ffmpeg -loop 1 -i image.png -vcodec libx264 -acodec aac -map 0 -f segment -segment_time 5 -segment_list /seg.m3u8 /200_%06d.ts 

    Metadata: 
    encoder   : Lavf54.26.101 
    Stream #0:0: Video: h264, yuv444p, 1344x840, q=-1--1, 90k tbn, 25 tbc 
Stream mapping: 
    Stream #0:0 -> #0:0 (png -> libx264) 
Press [q] to stop, [?] for help 
Failed to open bitstream filter h264_mp4toannexb for stream 0 with codec libx264: Invalid argument 
[mpegts @ 0x7fe91a615600] H.264 bitstream malformed, no startcode found, use the h264_mp4toannexb bitstream filter (-bsf h264_mp4toannexb) 
av_interleaved_write_frame(): Invalid argument 

在過濾器中添加似乎沒有幫助。

回答

7

如錯誤消息中所示(但未真正解釋),將h.264視頻數據轉換爲MPEG2傳輸流時存在問題。在默認的h.264容器(MPEG4)中,東西以長度爲前綴,而在MPEG2傳輸流中使用起始碼。映射在h.264規範的附件中描述,如附件2所示。Docs:http://git.videolan.org/?p=ffmpeg.git;a=blob;f=doc/bitstream_filters.texi

因此,要正確創建MPEG2 TS,您需要將-vbsf h264_mp4toannexb添加到命令行。您也可能還需要添加以下參數-flags -global_header。這是爲了確保一些編解碼參數包含在帶內(在傳輸流內)。

+0

謝謝你非常清楚的解釋。這由錯誤得到。我可以寫ts文件,ffplay可以播放它。但是,jwplayer只是播放黑屏。這裏是我的HLS M3U8播放列表: –

+0

#EXTM3U #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-ALLOWCACHE :1 #EXT-X-TARGETDURATION:2 #EXTINF:2.000000, dave.ts #EXT-X-ENDLIST –

+1

終於搞明白了。我將png轉換爲jpg格式,然後轉換爲視頻。 –