我有一个YUV_240的raw_pixels,我可以使用avcodec_send_frame提供给编码器,但是否可以在不将其发送到编码器的情况下对原始AVPacket进行编码?我需要这个并行编码尽可能多,但提供原始帧只有当帧是在正确的顺序,我们不能存储在内存中的所有原始数据可能。我检查了av_packet_from_data,但它需要已经编码的数据。
avcodec_send_frame
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测试了这个。
1条答案
按热度按时间roqulrg31#
我真的不清楚你想达到什么目的。
如果您的像素数据已经编码(例如,GOP = 30,您应该有1个I帧和29个B/P帧)。参见下面的示例代码片段。
如果你的像素数据是完整的图片,那么在没有编码的情况下写入它们是没有意义的,因为你的GOP大小将是1,你不会利用压缩。
此示例仅配置一个包。魔术是在'av_interleaved_write_frame'中完成的。
注意:我刚刚用简单的AVI和H264测试了这个。