2012-09-17 48 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格式,然后转换为视频。 –