ffmpeg封装和解封装介绍-(2)解封装流程和常用接口详解

解封装流程:

常用接口:

AVFormatContext结构体详解:

常用字段

  1. iformat / oformat

    • 类型: AVInputFormat* / AVOutputFormat*
    • 解释: 指向输入格式或输出格式的指针,用于描述文件的格式信息。
    • 用途: 当打开一个多媒体文件时,iformat会指向对应的输入格式(例如,MP4、AVI等)。
  2. nb_streams

    • 类型: unsigned int
    • 解释: 文件中包含的流的数量。
    • 用途: 例如,一个视频文件可能包含视频流、音频流和字幕流,这个字段记录了这些流的总数。
  3. streams

    • 类型: AVStream**
    • 解释: 指向所有流的指针数组。
    • 用途: 每个AVStream结构体包含一个流的详细信息(如视频流的编码信息、音频流的采样率等)。
  4. filename

    • 类型: char[1024]
    • 解释: 文件名或URL。
    • 用途: 保存打开的多媒体文件的路径或网络地址。
  5. start_time

    • 类型: int64_t
    • 解释: 媒体的开始时间(以微秒为单位)。
    • 用途: 用于计算媒体的播放起始点。
  6. duration

    • 类型: int64_t
    • 解释: 媒体的持续时间(以微秒为单位)。
    • 用途: 用于确定文件或流的总时长。
  7. bit_rate

    • 类型: int64_t
    • 解释: 总比特率(以比特每秒为单位)。
    • 用途: 用于了解文件的总数据率,包括音频、视频和其他数据流的比特率。
  8. metadata

    • 类型: AVDictionary*
    • 解释: 文件的元数据。
    • 用途: 存储文件的附加信息,例如标题、作者、专辑等。

AVStream结构体详解:

常用字段

  1. index

    • 类型: int
    • 解释: 流的索引(在AVFormatContext中的位置)。
    • 用途: 用于标识流的位置。
  2. codecpar

    • 类型: AVCodecParameters*
    • 解释: 流的编解码器参数。
    • 用途: 包含该流的编解码器参数,如编码类型(如codec_type = AVMEDIA_TYPE_AUDIO)、采样率、宽高等信息。
  3. time_base

    • 类型: AVRational
    • 解释: 流的时间基。
    • 用途: 表示该流时间戳的时间单位,例如{1, 25}表示每秒25帧。
  4. start_time

    • 类型: int64_t
    • 解释: 流的开始时间。
    • 用途: 表示该流的起始时间戳。
  5. duration

    • 类型: int64_t
    • 解释: 流的持续时间。
    • 用途: 表示该流的总持续时间。
  6. nb_frames

    • 类型: int64_t
    • 解释: 流的总帧数。
    • 用途: 表示该流包含的帧数。
  7. metadata

    • 类型: AVDictionary*
    • 解释: 流的元数据。
    • 用途: 存储关于该流的附加信息,如标题、作者等。
  8. avg_frame_rate

    • 类型: AVRational
    • 解释: 平均帧率。
    • 用途: 表示该流的平均帧率。

AVCodecParameters结构体详解:

常用字段

  1. codec_type

    • 类型: enum AVMediaType
    • 解释: 编码类型。
    • 用途: 表示流的媒体类型,例如视频、音频或字幕。
  2. codec_id

    • 类型: enum AVCodecID
    • 解释: 编解码器ID。
    • 用途: 标识使用的编解码器,例如H.264、AAC等。
  3. bit_rate

    • 类型: int64_t
    • 解释: 比特率。
    • 用途: 表示流的比特率(以比特每秒为单位)。
  4. width / height

    • 类型: int
    • 解释: 宽度 / 高度。
    • 用途: 表示视频流的宽度和高度(以像素为单位)。
  5. sample_rate

    • 类型: int
    • 解释: 采样率。
    • 用途: 表示音频流的采样率(以赫兹为单位)。
  6. channels

    • 类型: int
    • 解释: 音频通道数。
    • 用途: 表示音频流的声道数量。
  7. format

    • 类型: int
    • 解释: 采样格式(音频)或像素格式(视频)。
    • 用途: 表示音频的采样格式(如AV_SAMPLE_FMT_S16)或视频的像素格式(如AV_PIX_FMT_YUV420P)。
  8. channel_layout

    • 类型: uint64_t
    • 解释: 通道布局。
    • 用途: 表示音频流的通道布局,如立体声、5.1声道等。

avformat_open_input打开文件函数详解:

函数定义:

int avformat_open_input(AVFormatContext **ps, 
                        const char *filename, 
                          AVInputFormat *fmt, 
                      AVDictionary **options);

参数详解

  1. **AVFormatContext ps

    • 类型: AVFormatContext**
    • 解释: 指向指针的指针,用于返回AVFormatContext结构体。AVFormatContext包含了打开文件后的所有上下文信息。
    • 用途: 调用函数后,*ps将指向一个已初始化的AVFormatContext,可用于进一步处理文件。
  2. *const char filename

    • 类型: const char*
    • 解释: 文件名或URL。
    • 用途: 指定要打开的文件或流的路径。
  3. *AVInputFormat fmt

    • 类型: AVInputFormat*
    • 解释: 输入格式。如果设置为NULL,FFmpeg将自动检测输入格式。
    • 用途: 可以显式指定文件的格式(例如MP4、AVI等),通常为NULL。
  4. **AVDictionary options

    • 类型: AVDictionary**
    • 解释: 选项字典,用于设置一些特定选项(如解码器参数、缓冲区大小等)。
    • 用途: 用于传递额外的参数给格式化上下文。调用后,选项中未识别的键将保留在字典中。

返回值

  • 类型: int
  • 解释: 函数执行的结果。
  • 用途: 返回0表示成功,负值表示出错。

avformat_find_stream_info函数详解:

函数定义:

int avformat_find_stream_info(AVFormatContext *ic, 
                           AVDictionary **options);

参数详解

  1. *AVFormatContext ic

    • 类型: AVFormatContext*
    • 解释: 格式上下文,包含打开文件后的所有上下文信息。
    • 用途: 指向已经通过avformat_open_input初始化的AVFormatContext结构体,函数将提取并填充其包含的流信息。
  2. **AVDictionary options

    • 类型: AVDictionary**
    • 解释: 选项字典,用于为解码器设置特定选项。
    • 用途: 传递额外的参数给解码器。在调用之后,未识别的键将保留在字典中。通常为NULL。

返回值

  • 类型: int
  • 解释: 函数执行的结果。
  • 用途: 返回非负值表示成功,负值表示出错。具体的错误代码可以用于判断失败原因。

av_read_frame函数详解:

函数定义:

int av_read_frame(AVFormatContext *s, AVPacket *pkt);

参数详解

  1. *AVFormatContext s

    • 类型: AVFormatContext*
    • 解释: 输入文件的格式上下文。
    • 用途: 指向已经通过avformat_open_input初始化的AVFormatContext结构体,表示要从哪个输入文件中读取帧数据。
  2. *AVPacket pkt

    • 类型: AVPacket*
    • 解释: 存储读取到的数据。
    • 用途: 存储读取到的音视频数据帧。函数会将读取到的数据填充到AVPacket结构体中,以供后续解码或处理。

返回值

  • 类型: int
  • 解释: 函数执行的结果。
  • 用途: 返回0表示成功读取一帧数据,负值表示出错或已到达文件末尾。

 

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 09:54:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 09:54:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 09:54:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 09:54:06       18 阅读

热门阅读

  1. Milvus 三

    2024-06-12 09:54:06       7 阅读
  2. C# —— 类型转换

    2024-06-12 09:54:06       9 阅读
  3. python数据处理分析库(一)

    2024-06-12 09:54:06       8 阅读
  4. 设计模式-命令模式

    2024-06-12 09:54:06       12 阅读
  5. android 相机判断水平

    2024-06-12 09:54:06       8 阅读
  6. 多个AAR打包成一个AAR

    2024-06-12 09:54:06       11 阅读
  7. C++之 delete删除拷贝构造函数和拷贝赋值运算符

    2024-06-12 09:54:06       9 阅读
  8. 第一章:SQL简单基础的法则

    2024-06-12 09:54:06       10 阅读
  9. 【Unity】控制人物左右移动和跑步的实现

    2024-06-12 09:54:06       10 阅读
  10. 鱼香肉丝ROS一键安装

    2024-06-12 09:54:06       5 阅读
  11. 力扣题解 >>> 二叉树

    2024-06-12 09:54:06       6 阅读
  12. 15、架构-可靠通讯之服务安全

    2024-06-12 09:54:06       8 阅读