Ffmpeg av_交错_写入_帧返回0但未写入数据

Ffmpeg av_交错_写入_帧返回0但未写入数据,ffmpeg,Ffmpeg,我使用ffmpeg来流化编码的aac数据,我使用 av_interleaved_write_frame() 写框架 返回值为0,表示成功 将数据包写入输出媒体文件,确保正确的交织 数据包必须包含一个音频或视频帧。如果数据包已经正确交错,应用程序应该调用av_write_frame(),因为它稍微快一点。同样重要的是要记住,完全非交错输入将需要大量内存才能与之交错,因此最好在解复用器级别进行交错 参数 s媒体文件句柄 pkt包含要写入的数据的数据包。pkt->buf必须设置为描述数据包数据的有效

我使用ffmpeg来流化编码的aac数据,我使用

av_interleaved_write_frame()
写框架

返回值为0,表示成功

将数据包写入输出媒体文件,确保正确的交织

数据包必须包含一个音频或视频帧。如果数据包已经正确交错,应用程序应该调用av_write_frame(),因为它稍微快一点。同样重要的是要记住,完全非交错输入将需要大量内存才能与之交错,因此最好在解复用器级别进行交错

参数

s媒体文件句柄

pkt包含要写入的数据的数据包。pkt->buf必须设置为描述数据包数据的有效AVBufferRef。Libavformat拥有此引用的所有权,并将在其认为合适时取消引用。此函数返回后,调用方不得通过此引用访问数据。这可以是NULL(在任何时候,而不仅仅是在最后),以刷新交错队列。数据包的stream_索引字段必须设置为s.streams中相应流的索引。强烈建议将定时信息(pts、dts持续时间)设置为正确的值

返回

0成功时为负,错误时为负

但是,我发现没有写入任何数据


我错过了什么?如何解决它?

av_交错_write_frame()必须在写入数据之前将其保存在内存中。交错是取多个流(例如一个音频流,一个视频流)并按单调顺序序列化它们的过程。所以,如果你写一个音频帧,它会一直保存在内存中,直到你写一个“稍后”出现的视频帧。一旦以后的视频帧被写入,音频帧就可以被刷新,这样可以以不同的速度或不同的线程处理流,但输出仍然是单调的。如果您只编写一个流(一个acc流,没有视频),请按照建议使用av_write_frame()。

谢谢。我使用av_write_帧而不是av_交错_write_帧,但我得到了崩溃错误:0x00000000(代码=1)处的致命信号11(SIGSEGV),线程13608。我会调试它。如果你有一些关于它的例子,那将是完美的!再次感谢。