2285|1

16

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于ffmepg做mux复用的存储数据的提取(转网络或者其他) [复制链接]

1、添加1个缓存区
在libavformat/avio.h中的AVIOContext结构体中添加
typedef struct AVIOContext {

    ... ...
    int con_size;
    char con_buffer[1000*1024];
} AVIOContext;


2、修改写数据到文件为写一帧或者一个包到缓存区 ,同时关闭写文件的通道
在libavformat/aviobuf.c 的 writeout 中修改(注意,这里可能把一帧拆为多个包写入)
static void writeout(AVIOContext *s, const uint8_t *data, int len)
{
    if (s->write_packet && !s->error) {

        memcpy(s->con_buffer+s->con_size,data,len);
        s->con_size += len;
        if(s->con_size > 1000*1024)
        {
            printf("frame size full !!!\n");
        }

        /*
        int ret = s->write_packet(s->opaque, (uint8_t *)data, len);
        if (ret < 0) {
            s->error = ret;
        }
        */

    }
    s->writeout_count ++;
    s->pos += len;
}



3、在app中把数据从管道保存下来:
这里在做数据复用的时候,进去之前,先把上一帧的数据清零,再执行,同时提取走这一帧数据;
            oc->pb->con_size = 0;
            ret = av_interleaved_write_frame(oc, &pkt);
            if (ret != 0) {
                fprintf(stderr, "Error while writing video frame: %s\n", av_err2str(ret));
                exit(1);
            }

            fwrite(oc->pb->con_buffer,oc->pb->con_size,1,fp_ts);



最新回复

非常感谢!!  详情 回复 发表于 2016-2-17 15:00
点赞 关注
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
非常感谢!!
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表