如何将数据加载到FFmpeg-AVBuffer

问题描述

我正在开发一个FFmpeg项目,我想手动加载视频片段,而无需使用test[0] == "a"[0]获取av_read_frame(...)。我找到了AVPacket结构,但是我不知道将块文件加载到其中的方法

您有任何提示或帮助吗?

更新: 当前代码在上面:

AVBufferRef

感谢您的时间。

解决方法

功能:

 int av_packet_from_data (AVPacket *pkt,uint8_t *data,int size)       

初始化来自 av_malloc()ed data的参考计数数据包。

但是在您的代码段中,传递给此函数的缓冲区尚未指向内存,它只是声明为...

byte* buffer_data;  
// (...) buffer_data <- 'h.264 file' - b-frame loaded from disk.

此外,根据av_packet_from_data()的文档,应将缓冲区创建为uint_t *,以防止编译器发出警告。

更改此:

byte* buffer_data;   

为此:

size_t buffer_size = 4096;
uint8_t *buffer_data = av_malloc(buffer_size);
if (!buffer_data) {
    //handle error
}
 AVPacket pkt_demo;
....
int r = av_packet_from_data(&pkt_demo,buffer_data,buffer_size);

您的代码中可能还有其他问题,但这可以解决正确创建和使用缓冲区的问题。 (sample code here展示了我上面显示的部分的完整示例。)