我使用ffmpeg来传输编码的aac数据,我使用
av_interleaved_write_frame()
写帧。
返回值为 0 ,表示成功为description。
将数据包写入输出媒体文件,确保正确交错。
数据包必须包含一个音频或视频帧。如果数据包已正确交错,则应用程序应调用av_write_frame(),因为它稍微快一些。同样重要的是要记住,完全非交错输入需要大量内存才能与此交错,因此最好在分路器级别进行交错。
参数
s 媒体文件句柄
pkt 包含要写入的数据的数据包。 pkt-> buf必须设置为描述分组数据的有效AVBufferRef。 Libavformat取得此引用的所有权,并在其认为合适时取消它。在此函数返回后,调用者不得通过此引用访问数据。这可以是NULL(在任何时候,而不仅仅是在结尾),以刷新交错队列。 Packet的stream_index字段必须设置为s.streams中相应流的索引。强烈建议将时序信息(pts,dts duration)设置为正确的值。
返回
成功时0 ,错误时出现负AVERROR。
但是,我没有发现任何数据。
我错过了什么?怎么解决?
答案 0 :(得分:2)
av_interleaved_write_frame()必须在写入数据之前将数据保存在内存中。交错是获取多个流(一个音频流,例如一个视频)并以单调顺序对它们进行序列化的过程。因此,如果你写一个音频帧,它将保留在内存中,直到你写一个后来出现的视频帧#39;一旦写入稍后的视频帧,就可以刷新音频帧。这样,流可以以不同的速度或不同的线程处理,但输出仍然是单调的。如果您只编写一个流(一个acc流,没有视频),则按照建议使用av_write_frame()。