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打开文件函数详解:

函数定义:

cpp 复制代码
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函数详解:

函数定义:

cpp 复制代码
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函数详解:

函数定义:

cpp 复制代码
int av_read_frame(AVFormatContext *s, AVPacket *pkt);

参数详解

  1. *AVFormatContext s

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

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

返回值

  • 类型 : int
  • 解释: 函数执行的结果。
  • 用途: 返回0表示成功读取一帧数据,负值表示出错或已到达文件末尾。
相关推荐
简鹿视频12 小时前
视频转mp4格式具体作步骤
ffmpeg·php·音视频·实时音视频
一点晖光19 小时前
centos安装ffmpeg环境
linux·ffmpeg·centos
炒毛豆20 小时前
前端直播开发入门:搞懂推流拉流,掌握播放器核心
ffmpeg
八月的雨季 最後的冰吻1 天前
FFmepg-- 32-ffplay源码- PacketQueue 的线程安全机制 以及 serial 字段的作用
安全·ffmpeg
凯新生物1 天前
mPEG-SS-PLGA-DTX:智能药物递送系统
eureka·flink·ffmpeg·etcd
学而知不足~1 天前
字幕转码杂记
ffmpeg
飞睿科技2 天前
ESP Audio Effects音频库迎来专业升级,v1.2.0 新增动态控制核心
人工智能·物联网·ffmpeg·智能家居·语音识别·乐鑫科技·esp
daizhe3 天前
基于JavaCV实现FFmpeg设置视频moov前置以及截取封面图片
ffmpeg·音视频·javacv