雷神FFMpeg源码学习笔记
读取编码并依据编码初始化内容结构
- 在开始编解码视频的时候首先第一步需要注册一个编解码器 :av_register_all();
avformat_open_input来打开这个文件并给AVformartcontext赋值 ,在其中会去查找当前缓存文件的格式avformat_open_input来打开这个文件并给AVformartcontext赋值 ,在其中会去查找当前缓存文件的格式avformat_find_stream_info使用该方法给每个视频/音频流的AVStream结构体进行赋值并得到,这个参数在里面实现了一定的解码过程- 在
AVstream有值了以后我们需要拿到当前当前的avcodecContext和其对应的AVcodeC(使用avcodec_find_decoder) avcodec_open2,初始化一个视音频编解码器的AVCodecContext,,调用AVCodeC的初始化到具体的解码器AVCodeC init()所以是在avcodec_open2在开始真正的初始化avcodecContext- 在得到了初始化的
AVcodecContext之后我们就可以开始为解码之后的AVframe分配空间(使用(unsigned char *)av_mallocz(av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecContex->width, pCodecContex->height, 1)))av_image_fill_arrays():为AVframe的像素点分配空间
sws_getContext:使用源图像的高和宽得到目标图像的高和宽,flag 为设定图像拉伸的算法
每一帧的视频解码处理
av_read_frame在解码之前来获取一帧的视频帧压缩数据 或者是多帧的音频帧压缩数据 及我们得到的只是AVpacketavcodec_decode_video2使用该函数来解码得到的AVpacket,输出一个下一帧的AVframe函数- 使用
sws_scale来对下一帧的AVframe进行拉伸变化 ,输出想要得到的AVframe - 释放上述的
AVformartcontext,AVstream,avcodecContext.
下面是代码的具体处理操作:
1.首先需要注册所有的编解码器
//1.注册所有的编解码器等等
av_register_all();
//在需要网络的情况下初始化
avformat

最低0.47元/天 解锁文章
675

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



