ffmpeg里读取文件是最基础的操作,但是在很多行业里面,读取文件的操作实际作用的意义不大。还是读取内存的操作作用大一些。其两个之间主要的差距主要是在avformat_open_input的参书中的AVFormatContext->pb里面只要这个pb用avio_alloc_context初始化过了,就可以从内存里面的读取了。但是因为里面的函数是回调函数,而且读取的次数又很多,所以使用过程中还需要注意。
#include <stdio.h>
#include <iostream>
using namespace std;
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
};
typedef struct
{
char *pbuff;
int ulSize;
int ulSizeOffset;
}stData;
int a =1;
class AVParse
{
public:
AVParse()
{
m_buff = (unsigned char *)malloc(50000);
m_bufferSize = 50000;
m_Data = (stData *)malloc(sizeof(stData));
m_Data->pbuff = (char *)malloc(50000);
m_Data->ulSize = 50000;
m_Data->ulSizeOffset = 0;
pavPacket = (AVPacket *)av_malloc(sizeof(AVPacket));
videocount = 1;
lVidepId = -1;
lAudioId = -1;
pOutputFile = NULL;
bIsInit = false;
}
~AVParse()
{
if (NULL != m_buff)
{
free(m_buff);
m_buff = NULL;
}
m_

本文详细介绍如何在FFmpeg中实现从内存读取数据而非文件,重点讲解了使用avio_alloc_context进行内存读取的初始化过程,以及回调函数在读取操作中的应用。通过实例代码展示了如何创建内存缓冲区,初始化AVFormatContext,并使用回调函数read_buffer进行数据读取。
最低0.47元/天 解锁文章
1184

被折叠的 条评论
为什么被折叠?



