ffmpeg 内存读写相关
- AVFormatContext *ic = NULL;
- ic = avformat_alloc_context();
- unsigned char * iobuffer=(unsigned char *)av_malloc(32768);
- AVIOContext *avio =avio_alloc_context(iobuffer, 32768,0,NULL,fill_iobuffer,NULL,NULL);
- ic->pb=avio;
- err = avformat_open_input(&ic, "nothing", NULL, NULL);
- //读取数据的回调函数-------------------------
- //AVIOContext使用的回调函数!
- //注意:返回值是读取的字节数
- //手动初始化AVIOContext只需要两个东西:内容来源的buffer,和读取这个Buffer到FFmpeg中的函数
- //回调函数,功能就是:把buf_size字节数据送入buf即可
- //第一个参数(void *opaque)一般情况下可以不用
- int fill_iobuffer(void * opaque,uint8_t *buf, int bufsize){
- if(!feof(fp_open)){
- int true_size=fread(buf,1,buf_size,fp_open);
- return true_size;
- }else{
- return -1;
- }
- }
- FILE *fp_open;
- int fill_iobuffer(void *opaque, uint8_t *buf, int buf_size){
- ...
- }
- int main(){
- ...
- fp_open=fopen("test.h264","rb+");
- AVFormatContext *ic = NULL;
- ic = avformat_alloc_context();
- unsigned char * iobuffer=(unsigned char *)av_malloc(32768);
- AVIOContext *avio =avio_alloc_context(iobuffer, 32768,0,NULL,fill_iobuffer,NULL,NULL);
- ic->pb=avio;
- err = avformat_open_input(&ic, "nothing", NULL, NULL);
- ...//解码
- }
- //写文件的回调函数
- int write_buffer(void *opaque, uint8_t *buf, int buf_size){
- if(!feof(fp_write)){
- int true_size=fwrite(buf,1,buf_size,fp_write);
- return true_size;
- }else{
- return -1;
- }
- }
- FILE *fp_write;
- int write_buffer(void *opaque, uint8_t *buf, int buf_size){
- ...
- }
- main(){
- ...
- fp_write=fopen("src01.h264","wb+"); //输出文件
- ...
- AVFormatContext* ofmt_ctx=NULL;
- avformat_alloc_output_context2(&ofmt_ctx, NULL, "h264", NULL);
- unsigned char* outbuffer=(unsigned char*)av_malloc(32768);
- AVIOContext *avio_out =avio_alloc_context(outbuffer, 32768,0,NULL,NULL,write_buffer,NULL);
- ofmt_ctx->pb=avio_out;
- ofmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
- ...
- }
- //AVIOContext中的缓存
- unsigned char *aviobuffer=(unsigned char*)av_malloc(32768);
- AVIOContext *avio=avio_alloc_context(aviobuffer, 32768,0,NULL,read_buffer,NULL,NULL);
- pFormatCtx->pb=avio;
- if(avformat_open_input(&pFormatCtx,NULL,NULL,NULL)!=0){
- printf("Couldn't open inputstream.(无法打开输入流)\n");
- return -1;
- }
- //Callback
- int read_buffer(void *opaque, uint8_t *buf, int buf_size){
- if(!feof(fp_open)){
- int true_size=fread(buf,1,buf_size,fp_open);
- return true_size;
- }else{
- return -1;
- }
- }
ffmpeg 内存读写相关的更多相关文章
- 基于最简单的FFmpeg采样读取内存读写:存储转
===================================================== 基于最简单的FFmpeg样品系列读写内存列表: 最简单的基于FFmpeg的内存读写的样例:内 ...
- 基于最简单的FFmpeg采样读取内存读写:内存玩家
===================================================== 基于最简单的FFmpeg样品系列读写内存列表: 最简单的基于FFmpeg的内存读写的样例:内 ...
- 最简单的基于FFmpeg的内存读写的例子:内存转码器
===================================================== 最简单的基于FFmpeg的内存读写的例子系列文章列表: 最简单的基于FFmpeg的内存读写的 ...
- 最简单的基于FFmpeg的内存读写的例子:内存播放器
===================================================== 最简单的基于FFmpeg的内存读写的例子系列文章列表: 最简单的基于FFmpeg的内存读写的 ...
- (转)最简单的基于FFmpeg的内存读写的例子:内存播放器
ffmpeg内存播放解码 目录(?)[+] ===================================================== 最简单的基于FFmpeg的内存读写的例子系列文章 ...
- FFMPEG内存操作(二)从内存中读取数及数据格式的转换
相关博客列表: FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析 FFMPEG内存操作(二)从内存中读取数及数据格式的转换 FFmpeg内存操作(三)内存转码器 在雷神 ...
- FFmpeg内存操作(三)内存转码器
相关博客列表 : FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析 FFMPEG内存操作(二)从内存中读取数及数据格式的转换 FFmpeg内存操作(三)内存转码器 本文 ...
- FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析
相关博客列表 : FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析 FFMPEG内存操作(二)从内存中读取数及数据格式的转换 FFmpeg内存操作(三)内存转码器 在F ...
- Java内存模型相关原则详解
在<Java内存模型(JMM)详解>一文中我们已经讲到了Java内存模型的基本结构以及相关操作和规则.而Java内存模型又是围绕着在并发过程中如何处理原子性.可见性以及有序性这三个特征来构 ...
随机推荐
- BAYSY2 的LVDS引脚 笔记
差分引脚标号说明: 'L' 代表该引脚属于差分引脚 'xx' 两位整型数,在每一 bank 的独特标记 'y' 表示正向 还是 反向,同时要注意输入输出方向 ‘#’ 0~3,代表 bank0~bank ...
- .htaccess语法之RewriteCond与RewriteRule指令格式详细解释
htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签: htaccess it 分类: 网络 上文htacc ...
- 【jQuery】选择器
jQ提供了很多选择器:(注:$("p").action() action为后续动作) 元素选择器 $("p").action() ; //选取所有p标签 id选 ...
- Oracle函数组的使用
--1.组函数--COUNT():用来统计记录的条数 如果没有记录,返回 0--COUNT函数可以根据一列或多列进行计算,没有排重功能--统计EMP表一共有多少条记录select count(empn ...
- DHT协议C++实现过程中各种问题
---恢复内容开始--- 博主是个菜鸟,什么地方写的不对或者理解有误的地方还请指正出来. DHT协议是BT协议中的一部分,也是一个辅助性的协议.HTTP协议中用 来定位资源也就是html文本是用URL ...
- angularJS 服务-$provide里factory、service方法
当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆满不必要的逻辑.一定要早点意识到,controller 这一层应该很薄:也就是说,应用里大部分的业务逻辑和持久化 ...
- 2>&1
经常关注linux脚本的人,一定看到过 2>&1 这样的用法,最初一定不明白其中的含义以及为什么是这样的一种组合.昨天偶然间再次看到了这个 2>&1 的写法,遂下决心搞明白 ...
- java中面向对象的一些知识(二)
一. 封装的讲解 什么是封装?为什么要封装?怎么实现封装? 封装的目的是为了提高程序的安全性.封装就是把不想让第三者看的属性,方法隐藏起来. 封装的实现方法是: 1.修改属性的可见性,限制访问. 2. ...
- Go简介
Go是Google开发的一种编译型,並發型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go ...
- [恶趣味]搞了下局域网内的arp网络欺骗
挺无聊的. 扫描,伪装,抓包. 基本上搞完就失去乐趣了. 文章在这里,想搞的可以自己拿去搞下,其实很无聊,我真是个很容易无聊的人啊.