我们拿到的视频文件(mp4、mkv等文件)是封装了音频流、视频流和字幕流(可能有也可能没有)的,要想播放这类视频文件第一步要做的是解封,得到相应的流,之后才是解码、重采样和播放。
解封装需要用到的结构体:
AVFormatContext 可以看作是用于解封装的上下文
结构体中几个主要变量包括:
AVIOContext *pb:输入数据的缓存
unsigned int nb_streams:视音频流的个数
AVStream **streams:视音频流
char filename[1024]:文件名
int64_t duration:时长(单位:微秒us,转换为秒需要除以1000000)
int bit_rate:比特率(单位bps,转换为kbps需要除以1000)
AVDictionary *metadata:元数据
解封装需要用到的函数:
首先需要打开输入文件并初始化解封转上下文:
int avformat_open_input(AVFormatContext **ps, const char *url,
const AVInputFormat *fmt, AVDictionary **options);
配套的是视频播放结束后需要关闭输入文件并释放解封转上下文:
void avformat_close_input(AVFormatContext **s);
检索解封装上下文中的流信息
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
之后就可以从解封转上下文中读取AVPacket了
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
参考文章:
FFMPEG结构体分析:AVFormatContext_雷霄骅的博客-优快云博客_avformatcontext FFMPEG结构体分析:AVFormatContext
FFMPEG的解封装涉及AVFormatContext结构体,包括输入缓存、流信息、文件名、时长和比特率等关键数据。通过avformat_open_input打开文件,avformat_find_stream_info获取流信息,av_read_frame读取数据包,最后用avformat_close_input关闭并释放资源。此过程是播放多媒体文件的基础步骤。
178

被折叠的 条评论
为什么被折叠?



