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表示成功读取一帧数据,负值表示出错或已到达文件末尾。
相关推荐
嘟嘟实验室7 小时前
微信小程序xr-frame透明视频实现
微信小程序·ffmpeg·音视频·xr
泰勒朗斯11 小时前
如何编译Opencv +ffmpeg linux 明明安装了ffmpeg但是opencv就是找不到
linux·opencv·ffmpeg
-Mr_X-17 小时前
windows下srs流媒体服务器使用ffmpeg推流
ffmpeg
dvlinker18 小时前
C++开源项目 VLC 源代码的交叉编译以及库的裁剪方法详解
ffmpeg·mingw-w64·msys2·cygwin·开源vlc·vlc编译·vlc裁剪
因我你好久不见1 天前
springboot java ffmpeg 视频压缩、提取视频帧图片、获取视频分辨率
java·spring boot·ffmpeg
cuijiecheng20182 天前
音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现
ffmpeg·音视频
cuijiecheng20182 天前
音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现
ffmpeg·音视频·aac
流氓也是种气质 _Cookie2 天前
uniapp blob格式转换为video .mp4文件使用ffmpeg工具
ffmpeg·uni-app
网络安全queen2 天前
网络安全-企业环境渗透2-wordpress任意文件读&&FFmpeg任意文件读
安全·web安全·ffmpeg
yerennuo2 天前
FFmpeg库之ffmpeg
qt·ffmpeg