Memory 如何知道ffmpeg中一个AV数据包的大小?

Memory 如何知道ffmpeg中一个AV数据包的大小?,memory,ffmpeg,Memory,Ffmpeg,我正在使用ffmpeg库。我想知道一个包能占用多少内存。 我调试以检查AVPacket上的成员,但它们似乎都不合理,例如AVPacket.size,ec。AVPacket::size保存引用数据的大小。因为它是一个通用的数据容器,所以这个问题没有明确的答案 一个数据包可以占用多少内存 它实际上可以从零到很多。一切都取决于数据类型、编解码器和其他相关参数 根据FFmpeg示例: static void audio\u encode\u示例(const char*filename) { // ...

我正在使用ffmpeg库。我想知道一个包能占用多少内存。
我调试以检查AVPacket上的成员,但它们似乎都不合理,例如AVPacket.size,ec。

AVPacket::size
保存引用数据的大小。因为它是一个通用的数据容器,所以这个问题没有明确的答案

一个数据包可以占用多少内存

它实际上可以从零到很多。一切都取决于数据类型、编解码器和其他相关参数

根据FFmpeg示例:

static void audio\u encode\u示例(const char*filename)
{
// ...
AVPacket-pkt;
// ...
ret=avcodec_encode_audio2(c、pkt、NULL和got_输出);
// ...
如果(得到输出){

fwrite(pkt.data,1,pkt.size,f);//
AVPacket::size
保存引用数据的大小。因为它是数据的通用容器,所以这个问题没有明确的答案

一个数据包可以占用多少内存

它实际上可以从零到很多。一切都取决于数据类型、编解码器和其他相关参数

根据FFmpeg示例:

static void audio\u encode\u示例(const char*filename)
{
// ...
AVPacket-pkt;
// ...
ret=avcodec_encode_audio2(c、pkt、NULL和got_输出);
// ...
如果(得到输出){

fwrite(pkt.data,1,pkt.size,f);//如果您提供自己的数据缓冲区,它需要具有mininum FF_MIN_buffer_size的大小。然后您将AVPacket.size设置为已分配的大小,AVPacket.data设置为已分配的内存

请注意,如果您提供自己的缓冲区并且缓冲区太小,所有FFmpeg解码例程都将失败

另一种可能性是让FFmpeg为您计算最佳大小。 然后做一些类似的事情:

AVPacket pkt;
pkt.size = 0;
pkt.data = NULL; // <-- the critical part is there
int got_output = 0;

ret = avcodec_encode_audio2(ctx, &pkt, NULL, &got_output);
AVPacket-pkt;
pkt.size=0;

pkt.data=NULL;//如果您提供自己的数据缓冲区,它需要具有mininum FF_MIN_buffer_size的大小。然后您将AVPacket.size设置为分配的大小,AVPacket.data设置为分配的内存

请注意,如果您提供自己的缓冲区并且缓冲区太小,所有FFmpeg解码例程都将失败

另一种可能性是让FFmpeg为您计算最佳大小。 然后做一些类似的事情:

AVPacket pkt;
pkt.size = 0;
pkt.data = NULL; // <-- the critical part is there
int got_output = 0;

ret = avcodec_encode_audio2(ctx, &pkt, NULL, &got_output);
AVPacket-pkt;
pkt.size=0;
pkt.data=NULL//