FFmepg--内存IO模式

功能:

内存IO模式:avio_alloc_context():
自定义读写文件方式,打开文件

api

// 自定义IO
AVIOContext * avio_alloc_context (
	unsigend char * buffer;
	int buffer_size;
	void  *opaque;
	int (*read_packet)(void * opaque, uint8_t * buf,int buf_size);
	int (*write_packet)(void * opaque,uint8_t * buf, int buf_size);
	int64_t (*seek)(void *opaque, int64_t offset, int whence));
)

opaque: 指向文件
buffer ⽤作FFmpeg输⼊时,由⽤户负责向 buffer 中填充数据,FFmpeg取⾛数据。
buffer ⽤作FFmpeg输出时,由FFmpeg负责向 buffer 中填充数据,⽤户取⾛数据。
write_flag是缓冲区读写标志,读写的主语是指FFmpeg。
write_flag 为1时, buffer ⽤于写,即作为FFmpeg输出。
write_flag 为0时, buffer ⽤于读,即作为FFmpeg输⼊。
read_packet和write_packet是函数指针,指向⽤户编写的回调函数。
seek也是函数指针,需要⽀持seek时使⽤。 可以类⽐fseek的机制

buffer_size > read_packet: buf_size

avio_alloc_context读取文件:
  1. 命令行输入:输入文件(mp3/aac)输出文件(pcm)
  2. 自定义IO : avdio_alloc_context
  3. 绑定自定义IO: avformate_open_input

code

avio_alloc_context读取文件:
static int read_packet(void *opaque,uint8_t *buf,int buf_size)
{
	FILE *in_file = (FILE *)opaque;
	int read_size = fread(buf,1,buf_size,in_file)printf("read_packet read_size:%d,buf_size:%d\n",read_size,buf_size);
	if(read.size <= 0)
		return AVERROR_EOF;
	return read_size;
}
int main()
{
	FILE *in_file = NULL;
	 in_file = fopen(in_file_name, "rb");
	// 自定义IO 
	uint8_t * io_buff = av_malloc(BUF_SIZE); 
	
	AVIOContext *avio_ctx = avio_alloc_context(io_buff,BUF_SIZE,0, (void *)in_file, read_packet, NULL);
	
	AVFormatContext * format_ctx = avformat_alloc_context();

	// struct AVFormatContext: 成员 AVIOContext *pb
	AVIOContext *pb = avio_ctx;
	avformat_open_input(&format_ctx,NULL,NULL,NULL);
}
avformat_alloc_context 读取文件:

	AVFormatContext *format_ctx = avformat_alloc_context();
	
	int ret = avformat_open_input(&format_ctx, in_file, NULL, NULL);

相关推荐

  1. FFmepg--内存IO模式

    2024-03-11 11:54:02       23 阅读
  2. IO内存访问函数

    2024-03-11 11:54:02       43 阅读
  3. iOS 内存泄漏问题总结

    2024-03-11 11:54:02       20 阅读
  4. iOS - 编译最新 FFMpeg(7.0) SDK

    2024-03-11 11:54:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 11:54:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 11:54:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 11:54:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 11:54:02       20 阅读

热门阅读

  1. c语言大小字母转换程序

    2024-03-11 11:54:02       23 阅读
  2. Redis Info - CPU

    2024-03-11 11:54:02       23 阅读
  3. Git 开源的版本控制系统-02-base usage 基本用法

    2024-03-11 11:54:02       26 阅读
  4. sass 重写elementui样式

    2024-03-11 11:54:02       25 阅读
  5. PyTorch会在每次.backward()调用时会累积梯度的问题

    2024-03-11 11:54:02       22 阅读
  6. 对于泛型的学习

    2024-03-11 11:54:02       21 阅读
  7. 维修Balance Monitor动平衡仪触摸屏 SB-7705s工控电脑

    2024-03-11 11:54:02       19 阅读
  8. ORACLE无法OPEN,处理三板斧

    2024-03-11 11:54:02       20 阅读
  9. 4nm制程工艺的真·锐龙7000处理器功耗

    2024-03-11 11:54:02       19 阅读
  10. opengauss 数据库-高可用 jdbc 使用方法

    2024-03-11 11:54:02       17 阅读
  11. MIT 6.858 计算机系统安全讲义 2014 秋季(一)

    2024-03-11 11:54:02       25 阅读