如何创建编码的AVPacket而不发送帧到编码器?

afdcj2ne  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(103)

我有一个YUV_240的raw_pixels,我可以使用avcodec_send_frame提供给编码器,但是否可以在不将其发送到编码器的情况下对原始AVPacket进行编码?
我需要这个并行编码尽可能多,但提供原始帧只有当帧是在正确的顺序,我们不能存储在内存中的所有原始数据可能。
我检查了av_packet_from_data,但它需要已经编码的数据。

roqulrg3

roqulrg31#

我真的不清楚你想达到什么目的。
如果您的像素数据已经编码(例如,GOP = 30,您应该有1个I帧和29个B/P帧)。参见下面的示例代码片段。
如果你的像素数据是完整的图片,那么在没有编码的情况下写入它们是没有意义的,因为你的GOP大小将是1,你不会利用压缩。
此示例仅配置一个包。魔术是在'av_interleaved_write_frame'中完成的。

AVPacket* pPacket = av_packet_alloc();

pPacket->data = data;
pPacket->size = sizeOfData;
pPacket->stream_index = 0;
pPacket->dts = frameCounter;

if(isIFrame)
{
    m_avPacket->flags = AV_PKT_FLAG_KEY;
}

av_interleaved_write_frame(pAvFormatContext, pPacket)
av_packet_free(&pPacket);

注意:我刚刚用简单的AVI和H264测试了这个。

相关问题