问题描述
我正在开发一个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展示了我上面显示的部分的完整示例。)