【问题标题】:Why does av_write_trailer fails?为什么 av_write_trailer 失败?
【发布时间】:2013-05-13 03:09:25
【问题描述】:

我正在处理一个视频文件。 我使用 ffmpeg 读取每个数据包。

如果是音频包,我使用av_interleaved_write_frame将包写入输出视频文件。

如果是视频包,我解码包,获取视频帧的数据,处理图像,压缩回包。然后我使用 av_interleaved_write_frame 将处理后的视频帧数据包写入输出视频文件。

通过调试,正确读取音频包和视频包。 但是,当它转到“av_write_trailer”时,它会退出。但是输出的视频文件是存在的。

错误信息是:

*** glibc detected *** /OpenCV_videoFlatten_20130507/Debug/OpenCV_videoFlatten_20130507: corrupted double-linked list: 0x000000000348dfa0 ***

使用 Movie Player(在 Ubuntu 中),输出的视频文件可以正确播放音频,但没有视频信号。 使用VLC播放器,可以显示第一帧视频(保持相同的视频画面),并正确播放音频。

我尝试调试到“av_write_trailer”,但由于它在 ffmpeg 库中,我无法获得详细信息。

另外一条信息:之前版本的项目只是处理视频帧,没有添加音频流;而且效果很好。

任何提示或线索?

【问题讨论】:

  • 你好,你能在调试模式下编译FFMPEG吗?这样,使用调试器就可以进入 av_write_trailer()。我用这个方法也有分段错误,好像是ffmpeg试图访问AVFormatContext的属性priv_data,在我的程序上是NULL
  • 谢谢。是的,我这样做了,发现错误是由于pts设置不正确。

标签: ffmpeg video-processing


【解决方案1】:

我找到了解决方案。我没有使用 rescale 来根据流的 time_base 设置 pts。其实相关代码在示例muxing.c中。

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2015-06-19
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多