视频软解码流程1 open函数
视频文件打开流程
先丢一个流程图
open函数,需要传入url,返回bool是否成功打开
在打开输入流之前先定义了参数字典,通过这个字典和传入的url打开输入流
解封装过程
解封装上下文->视频流
打开输入流,返回解封装上下文
通过解封装上下文读取媒体信息,顺带得到视频总时长
再通过解封装上下文和AVMEDIA_TYPE_VIDEO枚举视频流ID
就能在解封装上下文中根据视频流ID获取视频流
解码过程
视频流->解码器->解码器上下文->打开解码器
videoStream->codecpar 是一个 AVCodecParameters*,它保存了解封装后提取出的流的编解码参数,是解封装阶段从媒体中提取出来的参数集合
AVFormatContext(解封装)和 AVCodecContext(解码)是两个阶段,前面只是解封装了,但并没有解码
通过视频流里的codecpar参数集合找到视频分辨率(长和宽)和总帧率,
直接从视频流获取视频帧率,但涉及分数(AVRational)到小数(qreal)的转换
解码器配置
再通过视频流里的codecpar参数集合中的codec->id 解码器ID获取视频解码器
通过解码器获取解码器上下文
然后使用视频流的codecpar为解码器上下文赋值,再使用赋值后的解码器上下文打开解码器
内存分配
最后提前分配AVPacket数据包和AVFrame解码后的视频帧的空间
根据之前得到的图像分辨率,计算图像所需内存大小,然后按计算得到的大小分配图像数据空间
评论