我编写了一些C代码,该文件将一个带有h264编码的视频和AAC编码的音频的mp4文件写入到分段的.ts文件中。
该代码可以在这里看到:http://pastebin.com/JVdgjM9G
问题在于代码使音频数据包阻塞。因为我要从h264进行转换,所以必须使用“ h264_mp4toannexb”,它终于可以用于视频帧了。但是,一旦程序到达第一个音频数据包(下面的流1),它就会崩溃。
样本输出:
Output #0, mpegts, to 'testvideo':
Stream #0.0: Video: libx264, yuv420p, 1280x720, q=2-31, 1416 kb/s, 90k tbn, 23.98 tbc
Stream #0.1: Audio: libfaac, 48000 Hz, stereo, 127 kb/s
First chunk: testvideo-00001.ts
Read frame, keyframe: 1, index: 0
Did bitfilter fun!
Read frame, keyframe: 0, index: 0
Did bitfilter fun!
(...this repeats several more times, truncated for space...)
Did bitfilter fun!
Read frame, keyframe: 0, index: 0
Did bitfilter fun!
Read frame, keyframe: 1, index: 1
base(54516) malloc: *** error for object 0x7fd2db404520: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
我尝试更改代码以在音频流上运行过滤器(使用
audio_stream->codec
而不是video_stream->codec
),但这只是从过滤器中给出了一个错误。当我尝试为过滤后的视频数据包调用
av_interleaved_write_frame(output_context, &packet);
-时,问题就出现了,没有问题,但是音频数据包完全阻塞了。我对为什么会有些困惑,所以可以提供任何帮助。 最佳答案
事实证明,在位过滤器操作实际上释放视频数据包之后,av_free_packet
调用。删除该调用导致代码正确运行!