- 博客(83)
- 资源 (10)
- 收藏
- 关注
原创 FFmpeg 基本数据结构 AVCodecParser分析
核心功能:帧边界检测。将原始的、无结构的字节流切割成完整的压缩帧单元。主要应用场景:处理裸流文件(如 .h264, .hevc, .aac)。处理网络流,特别是当 TCP 数据包不能保证一个数据包就包含一整帧时。在解码器内部被使用,作为解码前确保数据完整的一道工序。与解复用器的关系:它们是多媒体处理流水线中前后衔接的两个阶段。解复用器先工作,从容器中提取出原始码流;然后解析器再对原始码流进行精细分帧,最后交给解码器。
2025-10-27 22:47:13
369
原创 FFmpeg 基本数据结构 URLContext分析
URLContext是FFmpeg I/O子系统的核心连接对象,在协议处理流程中扮演着至关重要的角色。它作为URLProtocol和AVIOContext之间的桥梁,管理单个协议连接的生命周期和状态数据。具体位置如下:// 指向一个表示URLContext结构的AVClass结构的指针// 指向一个表示URLProtocol结构的指针// 指向私有数据的指针// 表示URL的文件名int flags;// 表示URL的属性标志// 表示最大数据包大小// 表示是否为流式传输。
2025-10-27 22:37:50
325
原创 FFmpeg 基本数据结构 URLProtocol分析
URLProtocol 是 FFmpeg 中用于自定义 I/O 协议的核心结构体,允许开发者实现非标准协议(如私有网络传输、加密流、内存流等)的读写支持。它通过定义一组回调函数抽象底层 I/O 操作,是 FFmpeg I/O 层的基础组件。// 协议名称// 打开URL// 打开URL(带有选项)// 接受URL连接// 执行URL握手// 读取数据// 写入数据// 定位文件指针// 关闭URL// 暂停/恢复读取// 查找指定时间戳的帧// 获取文件句柄。
2025-10-27 22:32:13
792
原创 FFmpeg 基本数据结构 AVIOContext分析
核心是回调 (read_packet, write_packet, seek): 你实现这些函数来定义数据如何存取。opaque 是关键桥梁: 它连接 AVIOContext 和你的自定义数据状态,传递给所有回调。缓冲提高效率: FFmpeg 内置缓冲区减少回调次数。理解 buffer, buf_ptr, buf_end 有助于调试。
2025-10-27 22:21:14
1083
原创 FFmpeg 基本数据结构 AVFrame分析
核心作用: AVFrame 是原始音视频数据的载体。data 和 linesize: 访问实际像素/样本的关键。理解格式(format)对于正确解释 data 至关重要。linesize 不等于 width * bytes_per_pixel 是常见情况!format: 必须始终检查以知晓如何处理 data。pts/dts/duration: 同步和处理流程的核心。引用计数 (buf): 现代 FFmpeg 内存管理的基石。
2025-10-27 22:04:10
946
原创 FFmpeg 基本数据结构 AVCodec分析
AVCodec 是 FFmpeg 多媒体框架中表示编解码器实现的核心数据结构,它定义了编解码器的能力、操作接口和支持的特性。作为连接编解码算法与上层应用的桥梁,AVCodec 在多媒体处理流水线中扮演着关键角色。算法容器:封装视频/音频编解码算法的具体实现能力定义:声明编解码器支持的分辨率、格式等特性硬件抽象:统一硬件加速接口,支持多平台加速操作接口:提供 init/encode/decode/close 等核心操作性能载体:承载多线程、SIMD 等优化技术// codec的名称。
2025-10-27 21:53:42
202
原创 FFmpeg 基本数据结构 AVCodecContext分析
AVCodecContext 是 FFmpeg 多媒体框架中最核心的编解码上下文结构,负责管理编解码器的所有参数、状态和操作。作为 FFmpeg 编解码流水线的中枢,它承载着从参数配置到实际编解码的所有关键信息。AVCodecContext 是 FFmpeg 中用于存储编解码器(Codec)所有上下文信息和参数的主结构体。它承载了一次编解码操作所需的全部状态和数据。核心功能:1.参数容器:统一存储编解码所有配置参数2.状态管理:跟踪编解码过程的状态变化3.资源分配:管理内存、硬件资源等。
2025-10-26 22:59:50
292
原创 FFmpeg 基本数据结构 AVStream分析
AVStream 是 FFmpeg 中表示单个媒体流(视频、音频、字幕等)的核心数据结构,负责存储流的元数据、时间信息和编解码参数。AVStream 是 FFmpeg 中用于表示媒体文件(容器)中一个独立媒体流的抽象。一个视频流(Video Stream)一个或多个音频流(Audio Stream,如不同语言)可能还有字幕流(Subtitle Stream)、数据流等AVStream 就是描述这其中每一个流的信息的载体。
2025-10-26 22:47:08
811
原创 FFmpeg 基本数据结构 AVInputFormat 分析
AVInputFormat 是 FFmpeg 公共 API 中用于描述和操作一个解复用器(Demuxer) 的核心数据结构。你可以将它理解为一个解复用器的“说明书”或“接口契约”。AVInputFormat是ffmpeg里面的解复用器对象,AVInputFormat类似COM接口的数据结果,表示输入文件容器格式。
2025-10-26 22:36:39
776
原创 FFmpeg 基本数据结构 AVFormatConext 分析
AVFormatContext 是 FFmpeg 格式(Format)I/O 的抽象核心。你可以把它理解为一个多媒体容器文件的“句柄”或“控制器”。
2025-10-20 23:32:22
1008
原创 FFmpeg 基本API av_seek_frame函数内部调用流程分析
av_seek_frame() 是 FFmpeg 中用于跳转媒体文件中的某个时间点的 API,常用于播放器实现“快进/快退/定位”等功能。这个函数的作用是:根据时间戳,将解复用器(demuxer)跳转到合适的位置,以便从该位置开始读取数据帧(packet)。指定时间戳的帧(通常为关键帧)或者粗略估计字节位置(用于某些格式如 MPEG-TS)//以下为 av_seek_frame() 的内部调用流程(位于 libavformat/utils.c)
2025-10-19 22:45:59
472
原创 FFmpeg 基本API av_find_input_format函数内部调用流程分析
av_find_input_format 是 FFmpeg 中用于查找输入格式的函数。它的作用是根据短名称(short_name)来查找对应的 AVInputFormat。AVInputFormat 是 FFmpeg 中表示输入格式的结构体,包含了解复用器的相关信息和操作(例如,读取数据流、提取媒体信息等)。参数:short_name:一个指向字符串的指针,表示要查找的输入格式的短名称(例如,“mp4”、“mov”、“avi” 等)。这是用于查找格式的标识符。
2025-10-19 22:37:30
354
原创 FFmpeg 基本API av_probe_input_format3函数内部调用流程分析
av_probe_input_format3 是 FFmpeg 中用于探测输入流格式的一个函数。它的作用是根据输入流的一部分数据(例如文件的头部数据)来猜测或“探测”数据的格式。这个函数是 FFmpeg 中流格式探测的核心函数之一,广泛应用于自动检测输入媒体文件或流的格式(如 MP4、MKV、AVI 等)。参数:pd: AVProbeData 结构体,包含输入数据的指针、数据大小和格式标识等。
2025-10-19 22:31:11
531
原创 FFmpeg 基本API avcodec_receive_frame函数内部调用流程分析
avcodec_receive_frame 是 FFmpeg 多媒体处理框架中的核心函数,属于其现代解码 API 的关键组成部分。它与 avcodec_send_packet 配对使用,实现解码。发送数据包:调用 avcodec_send_packet 将压缩数据包送入解码器。循环接收帧:在 while 循环中反复调用 avcodec_receive_frame,直到其返回 AVERROR(EAGAIN)(表示需要新输入)或 AVERROR_EOF(表示数据已取完)。
2025-10-19 22:21:47
431
原创 FFmpeg 基本API avcodec_send_packet函数内部调用流程分析
avcodec_send_packet 是 FFmpeg 多媒体处理框架中的核心函数,属于其解码 API 的关键组成部分。其主要功能是解码器输入函数:负责向解码器提交压缩数据包(AVPacket),现代解码 API 核心:取代旧版 avcodec_decode_video2/avcodec_decode_audio4 所属模块:libavcodec 库(编解码器核心库)。attribute_align_arg:编译器属性,确保栈对齐(x86架构重要优化)
2025-10-19 22:10:29
359
原创 FFmpeg 基本API av_read_frame函数内部调用流程分析
av_read_frame 是 FFmpeg 库中的一个函数,用于从 AVFormatContext 中读取一个 AVPacket。它负责从解复用器(demuxer)获取原始编码数据包(AVPacket)。s: 一个指向 AVFormatContext 结构体的指针,用于存储 AVFormatContext 对象。pkt: 一个指向 AVPacket 结构体的指针,用于存储读取到的 AVPacket。返回值:如果读取成功,则返回 0;如果读取失败,则返回一个负值。
2025-10-19 22:01:57
480
原创 FFmpeg 基本API avcodec_open2函数内部调用流程分析
avcodec_open2是FFmpeg库中的一个函数,用于打开音视频编解码器的上下文并进行初始化。这个函数是音视频编解码过程中的一个关键步骤,它使得编解码器准备好进行编解码操作。AVCodecContext *avctx:音视频编解码器上下文,包含了一些编解码器的参数,如编码格式、帧率、分辨率等。const AVCodec *codec:音视频编解码器,根据avctx->codec_id来确定。
2025-10-19 21:56:48
750
原创 FFmpeg 基本API avcodec_alloc_context3函数内部调用流程分析
avcodec_alloc_context3() 是 FFmpeg 中用于分配并初始化解码器或编码器上下文 AVCodecContext 的 API,是绝大多数编解码初始化流程的第一步。- 参数 codec:你打算使用的编解码器(如 ff_hevc_decoder)。可以为 NULL,但通常你会先通过 avcodec_find_decoder() 得到一个有效 AVCodec*。- 返回值:成功返回指向 AVCodecContext 的指针,失败返回 NULL。
2025-10-19 21:43:42
348
原创 FFmpeg 基本API avcodec_find_decoder函数内部调用流程分析
在已注册的所有解码器(AVCodec)中,根据指定的 AVCodecID 找到第一个支持它的解码器结构体(AVCodec*)。return p;id:枚举类型 AVCodecID,表示要查找的解码器类型,例如 AV_CODEC_ID_H264。返回值:成功:返回匹配的 AVCodec *;失败:返回 NULL。
2025-10-19 21:38:37
340
原创 FFmpeg 基本API avformat_find_stream_info函数内部调用流程分析
avformat_find_stream_info是 FFmpeg 库中的一个函数,用于获取 AVFormatContext 中的流信息。在使用 FFmpeg 进行音视频处理时,通常需要先调用这个函数来获取流信息。用于获取媒体文件详细流信息的关键函数,它会读取并分析文件的部分数据来获取精确的编解码器参数、时长等信息。ic: 一个指向 AVFormatContext 结构体的指针,用于存储 AVFormatContext 对象。
2025-10-19 21:33:05
366
原创 FFmpeg 基本API avformat_open_input函数内部调用流程分析
avformat_open_input 是 FFmpeg 库中的一个函数,用于打开一个输入 URL,并创建一个 AVFormatContext 结构体的指针。在使用 FFmpeg 进行音视频处理时,通常需要先调用这个函数来创建一个 AVFormatContext 对象。AVFormatContext** 指向 AVFormatContext 对象指针的地址。函数会分配或初始化此上下文。const char* url媒体文件的路径或URL。
2025-10-17 22:35:18
496
原创 FFmpeg 基本API avio_write函数内部调用流程分析
avio_write 是 FFmpeg 中的一个 I/O 函数,它的作用是向流中写入数据。具体来说,它是通过 AVIOContext 来实现的,AVIOContext 是 FFmpeg 中用于抽象 I/O 操作的数据结构。avio_write 在视频/音频数据流中负责向目标文件(例如媒体文件)写入字节数据。参数:s: 一个指向 AVIOContext 的指针。AVIOContext 结构包含了用于读写数据的各种信息,通常它会绑定到一个具体的文件或网络流。
2025-10-17 22:24:48
487
原创 FFmpeg 基本API avio_read函数内部调用流程分析
avio_read 函数是 FFmpeg 中的一个 I/O 函数,它用于从流中读取数据。与 avio_write 类似,avio_read 也通过 AVIOContext 来抽象读操作。avio_read 用于从文件、网络连接或其他数据源中读取字节数据。参数:s: 一个指向 AVIOContext 的指针,表示输入流的上下文。buf: 一个缓冲区,用来存放从流中读取的数据。size: 要读取的字节数。返回值:如果成功,返回读取的字节数。如果到达文件末尾或出错,返回负值。
2025-10-16 23:06:40
476
原创 FFmpeg 基本API avio_open函数内部调用流程分析
avio_open() 是 FFmpeg 的一个工具函数,用于打开一个用于读写的 AVIOContext,即 FFmpeg 的 I/O 上下文对象。初始化一个 AVIOContext调用 FFmpeg 协议层(如 file, http, tcp, udp)进行 URL 打开设置好 read_packet / write_packet / seek 等函数指针。
2025-10-16 22:27:45
790
原创 FFmpeg 基本API avformat_alloc_context 函数内部调用流程分析
avformat_alloc_context 是 FFmpeg 库中的一个函数,用于分配并初始化一个 AVFormatContext 结构体的指针。在使用 FFmpeg 进行音视频处理时,通常需要先调用这个函数来创建一个 AVFormatContext 对象。// 1. 分配FFFormatContext结构体// 2. 初始化FFFormatContext结构体// 3. 设置默认的io_open和io_close2函数// 4. 设置默认的选项。
2025-10-15 22:35:39
793
原创 FFmpeg 播放播放 HTTP网络流读取数据过程分析
播放 HTTP 网络流时创建 AVIOContext 的流程是一个多层次的协议栈初始化过程。
2025-10-14 21:49:37
1227
1
原创 Android CCodec (十八) 硬件解码调用分析-2(基于V4l2)
android ccodec V4L2DecodeComponent分析
2022-05-17 12:07:42
1433
3
原创 C/C++ static_cast、dynamic_cast、const_cast、reinterpret_cast 笔记整理
static_cast、dynamic_cast、const_cast、reinterpret_caststd::static_pointer_cast、std::dynamic_pointer_cast、std::const_pointer_cast、std::reinterpret_pointer_cast使用简单介绍
2022-05-02 23:09:59
1815
原创 Android CCodec (十七) 硬件解码调用分析-1(基于V4l2)
简单的分析V4L2DecodeComponent和其相关内容,后续针对解码调用单独分析。
2022-04-11 19:59:11
6483
原创 Android CCodec (十二) CCodecBuffers分析
1、引言2、Codec2Buffer相关内容的定义3、MediaBuffer和Codec2Buffer的定义4、CCodecBuffers相关内容的分析5、Codec2Buffer的调用分析6、总结
2021-12-12 22:06:30
3006
原创 Android CCodec (九) CCodecBufferChannel数据回调分析
1、引言2、初始化分析3、InputBuffer分析4、OutputBuffer分析5、总结
2021-12-12 21:59:00
4327
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅