ffmpeg如何从内存读取或者写流数据

news/2024/7/10 19:46:01 标签: ffmpeg, 内存

ffmpeg默认的是从网络或者本地文件读取/写入数据

很多应用工程中,需要从内存读写数据以加快速度,或者由于操作磁盘权限不够等问题。

二 今天来讲讲如何让ffmpeg操作内存

在我的其它博客中讲解了从网络读取流数据的过程,这里就先简单补充一下ffmpeg写流数据的过程

 avformat_alloc_output_context2(&merge_ctx->output_format_ctx, NULL, "mp4",output_filename);申请上下文
  av_dump_format(input_format_ctx_,0,input_filename,0);//dump 输入流的AVStream 信息

 avformat_new_stream(merge_ctx->output_format_ctx, merge_ctx->in_stream->codec->codec);  为输出申请AVStream 这里指的是输出流的格式,一般为音频/视频

 avcodec_copy_context(merge_ctx->out_stream->codec, merge_ctx->in_stream->codec); //把输入的流信息的codec拷贝过来,这里因为输入输出一样的,
当你的应用中不同的时候,就从对应的输出格式的codec中拷贝

 avio_open(&(merge_ctx->output_format_ctx->pb), output_filename, AVIO_FLAG_WRITE);//打开输出流文件

 av_write_frame(merge_ctx->output_format_ctx,&packet);//写帧

这里调用avio_open函数是为了打开一个文件,并且设置读写函数指针。

这里如果需要读写内存可以改为:

 
 AVIOContext* avio_alloc_context(
            buffer,
            BufferSize,
            0,
            this,
            my_read,
            NULL,
            my_seek);

即 merge_ctx->output_format_ctx->pb=  avio_alloc_context(
            buffer,
            BufferSize,
             0,
             this,
            my_read,
             my_write,
            my_seek);

然后自己实现my_read,my_write,my_seek就好









http://www.niftyadmin.cn/n/793516.html

相关文章

实现音视频在Android与IOS平台的采集与编码之Android视频(1)

一、前言 前面我们已经讲解了视频的编码、解码、网络传输的相关基础知识,相信认真阅读多的朋友,应该熟悉了,有人会问,这些知识能够帮我们做什么呢?本篇文章就来说说具体能做那些项目。由于时间和篇幅的关系,先来说说…

ffmpeg放大缩小图像

一 首先熟悉一下ffmpeg的两个结构体 AVPacket和AVFrame AVPacket 主要域:*data size AVFrame主要域:*data[POINTER_NUM]; linesize[POINTER_NUM];压缩过的数据存放在AVPacket结构体中,解压后的数据YUV存放在AVFrame结构体中 二 ffmpeg中缩放图像的函数是…

秒懂卷积

最近看到很多地方都有提到卷积(比如卷积神经网络,视频噪声抑制),但是一直不理解具体是啥,物理意义又是啥。 一 卷积的基本概念 其实就是两个可积函数在x上的乘积的积分。公式记作 卷积和傅立叶变换有着密切的关系,两个函数的傅立…

ffmpeg源码优化之推流发送篇

1.引言 大家好,距离上篇文章已经过去有一段时间了,主要是最近太忙了,一直没有更新。今天总算能抽出一点时间,说说ffmpeg源码级别的优化了,这块应该会连载,请大家持续关注。废话不多说,接下来就…

RK3399音视频开发之花屏、抖动分析(硬核文章)

1.引言 最近在RK339开发做项目时,碰到一个非常棘手的问题,挂机测试或终端后重启后具有小概率的花屏,抖动,而且这个现象是不可逆,只有重启推流服务或者重启整个终端,才会恢复。这个问题会导致视频采集&…

最快系统搭建:Vmware、ubuntu18.0及常用软件安装

首先去对应的官网下载vmware(官网下载,需要找密钥)和ubuntu18.0(桌面版本或者server版本) ubuntu官网:https://www.ubuntu.com/download/server Vm官网:https://www.vmware.com/cn/products/workstation-pro.html 打开虚拟机,并创建新的虚…

JM8.5中的高精度象素运动估计

JM8.5中的高精度象素运动估计Outline:1、 运动估计相关的数据结构和变量2、 相关重要变量的初始化3、 运动估计函数(BlockMotionSearch())的流程4、 运动矢量预测5、 整象素点运动估计6、 亚象素点运动估计(即高精度象素点运动估计)7、 亚象素点的…

x264码率控制

一 码率控制性 实际上h264标准并没有码率控制这一块内容,也就是说这个是x264自己实现的,和h264无关。当然我们自己也可以实现一种码率控制算法来控制编码码率。 二 x264码率控制 x264码率控制主要分为三种 ABR average bitrate平均码率,编…