ffmpeg
文章平均质量分 86
落樱弥城
无无
展开
-
FFmpeg5.0源码阅读——FFmpeg大体框架(以GIF转码为示例)
前一段时间熟悉了下FFmpeg主流程源码实现,对FFmpeg的整体框架有了个大概的认识,因此在此做一个笔记,希望以比较容易理解的文字描述FFmpeg本身的结构,加深对FFmpeg的框架进行梳理加深理解,如果文章中有纰漏或者错误欢迎指出。本文描述了FFmpeg编解码框架的工程结构,基本构成以及大体的调用流程。因为FFmpeg的滤镜是相对独立的一个模块,因此在此不会进行描述。原创 2023-08-26 17:09:39 · 1597 阅读 · 0 评论 -
FFmpeg5.0源码阅读——URLContext和URLProtocol
本文描述FFmpeg中URLContext和URLProtocal的实现。原创 2023-08-26 12:50:10 · 669 阅读 · 0 评论 -
FFmpeg5.0源码阅读——VideoToobox硬件解码
本文描述了FFmpeg中。原创 2023-08-19 17:20:16 · 1799 阅读 · 0 评论 -
FFmpeg5.0源码阅读——av_interleaved_write_frame
本文主要详细描述FFmpeg中封装时写packet到媒体文件的函数。原创 2023-07-30 20:33:23 · 1316 阅读 · 0 评论 -
FFmpeg5.0源码阅读—— avcodec_send_frame && avcodec_receive_packet
本文主要描述了FFmpeg中用于编码的接口的具体调用流程,详细描述了该接口被调用时所作的具体工作。原创 2023-07-23 21:34:32 · 757 阅读 · 0 评论 -
FFmpeg5.0源码阅读—— avcodec_send_packet&&avcodec_receive_frame
本文主要描述了FFmpeg中用于解码的接口的具体调用流程,详细描述了该接口被调用时所作的具体工作。原创 2023-07-09 21:43:02 · 904 阅读 · 0 评论 -
FFmpeg5.0源码阅读—— av_read_frame
本文主要描述了FFmpeg中用于打开编解码器接口。原创 2023-07-08 21:12:50 · 1110 阅读 · 0 评论 -
FFmpeg5.0源码阅读—— avcodec_open2
本文主要描述了FFmpeg中用于打开编解码器接口。原创 2023-07-02 22:40:38 · 1110 阅读 · 0 评论 -
FFmpeg5.0源码阅读——avformat_find_stream_info
在使用FFmpeg库时通常使用。原创 2023-06-24 19:23:59 · 964 阅读 · 0 评论 -
FFmpeg5.0源码阅读——avformat_open_input
本文主要描述了FFmpeg中用于打开文件接口。原创 2023-06-24 17:21:42 · 1213 阅读 · 0 评论 -
FFmpeg5.0源码阅读——mov文件格式解析
之前在[Mp4格式详解](https://blog.csdn.net/GrayOnDream/article/details/127815260)中详细描述了Mp4文件格式的具体布局方式。为了更加深入理解mp4文件格式,本文记录了ffmpeg中解封装mp4文件的基本实现。原创 2023-05-28 22:39:01 · 1553 阅读 · 0 评论 -
FFmpeg5.0源码阅读——AVPacket
AVPacket是FFmpeg中存储压缩数据的结构体,一般从媒体文件中解封装出来的数据或者编码器编码得到的压缩数据都存储在AVPacket中,且一个AVPacket只存储一帧压缩的视频数据或者一段压缩的音频数据。AVPacket的数据通常是通过管理的因此申请释放要是用对应的API。另外,并不是abi稳定的,如果有新增的字段会在结构体定义的尾部添加,因此在使用时三思。//管理data域的AVBufferRef(引用计数),如果为NULL,表明数据并不是通过引用计数管理的 int64_t pts;原创 2023-02-15 23:22:15 · 602 阅读 · 0 评论 -
FFmpeg5.0源码阅读——AVFrame
FFmpeg中解码的裸数据都是通过AVFrame存储的,因此理解AVFrame的具体实现对于使用FFmpeg有比较大的帮助。AVFrame是一个复合的结构体,他可以存储音频数据或者视频数据。但是因为音频和视频数据的参数不兼容比如宽高和采样率等,AVFrame中会保留两者参数的定义,以至于结构体略显臃肿(同时包含了音频和视频的参数定义)。FFmpeg解码一个视频时,会先通过解封装器对视频解封装得到编码的流数据AVPacket,再将该流数据送给解码器进行解码,解码出来的裸数据就会存储在AVFrame中返回。原创 2023-02-14 23:27:05 · 940 阅读 · 0 评论 -
FFmpeg5.0源码阅读——内存池AVBufferPool
AVBuffer声明在文件中,而相关的操作函数定义在中。先简单看下AVBufferdata:buffer中的数据指针;size:数据的大小,即data中数据的大小;refcount:引用计数,无需多说,当引用计数为0时销毁对应的内存。该变量的操作是原子的,ffmpeg内部针对不同的编译期和平台实现了一套源自变量,具体就深入了,理解意思就行;free:释放内存的函数指针,如果不指定的话会使用默认的函数指针释放内存;opaque。原创 2023-02-08 23:49:25 · 468 阅读 · 0 评论 -
FFmpeg5.0源码阅读之AVClass和AVOption
本文通过阅读FFmpeg源码来理解FFmpeg中AVOption的实现原理和具体的使用方式。原创 2022-10-05 17:59:05 · 1044 阅读 · 0 评论 -
FFmpeg5.0源码阅读——内存分配和释放
参考的源码为FFmpeg5.0,commit-id为641c434。 简单看一下FFmpeg中申请和释放内存的相关函数的具体实现。在解析源码的时候会移除部分内容方便阅读。1 基本的内存分配和释放 FFmpeg中内存申请和分配的实现都是对malloc和free的包装,基本都在libavutil/mem.c文件中。1.1 av_malloc、av_mallocz和av_calloc av_malloc:申请size大小的内存。 av_mallocz:申请size大小的内存并初始化为0.原创 2022-02-16 21:02:33 · 3105 阅读 · 2 评论 -
FFmpeg之ffplay源码简要分析
1 ffplay 基本架构1.1 视频解码播放的基本流程 ffmpeg视频解码播放的基本流程如下图所示:首先对网络媒体数据流进行解封装得到一般的视频封装格式比如MP4等,如果是本地播放的媒体文件就不需要解协议;然后对视频媒体文件进行解封装,得到未经过解码的视频、音频或者字幕流数据,在ffmpeg中得到的是AVPacket;然后分别对字幕、音频和视频数据进行解码,分别得到字幕、PCM数据和YUV数据;由于不同数据体积不同解码速度不同,视频解码相对比较慢,如果解码完就立马播放就会出现音频和视频播原创 2022-01-03 20:38:28 · 2360 阅读 · 1 评论 -
FFmpeg解封装、解码音频和视频(分别使用OpenGL和OpenAL播放)
1 ffmpeg解码大致流程 下图是ffmpeg解码播放音视频的基本流程:首先是网络媒体解协议,解协议之后得到对应的媒体文件比如mp4,ts等,这些格式是媒体文件的封装格式,也就是将音频,视频,字幕等码流编码后打包到一起的格式;之后就是对容器进行解封装,解封装能够分别得到对应的流的编码流,比如视频可能是h264码流,音频可能是aac码流,这些都是对应的流经过编码后的数据;再然后就是需要将编码的流解码为裸流,视频的裸流一般为YUV或者RGB数据,而音频的裸流一般为PCM数据,这些数据也是播放时时真原创 2021-12-26 18:02:48 · 3469 阅读 · 0 评论