【发布时间】:2018-10-26 16:21:03
【问题描述】:
我将接收到的数据包写入二进制文件。当第一个文件的录制完成后,我调用flush:
avcodec_send_frame(context, NULL);
这是结束流的信号。但是当我向编码器发送新帧时,函数返回AVERROR_EOF (man:编码器已被刷新,无法向其发送新帧)。怎么做才能让编码器刷完帧?
示例:解码时,可以调用:
avcodec_flush_buffers(context);
此函数更改流,但仅用于解码。 也许是用于编码的类比函数?
想法:
1) 不要调用flush。但是编码器会在内部缓冲帧并仅在刷新后才给出一些数据包(使用带有 b 帧的 h.264),而一些数据包进入下一个文件。
2) 重新创建编解码器上下文?
详情: 使用 Win 7、Qt 5.10、ffmpeg 4.0.2
【问题讨论】: