解码为yuv

来源:互联网 发布:古代西亚北非文明知乎 编辑:程序博客网 时间:2024/06/06 02:03

参考各路大神音视频开发,现总结如下,以免以后忘记。

这里写图片描述

首先说一下本篇转为的格式为yuv420p,yuv420p实际上是一种数据结构,四个y公用一个uv,所以一个y只用了四分之一u和四分之一v
先来一张解码流程图
解码

av_register_all()初始化了格式封装信息库,初始化了muxer(复用器)和demuxer(分离器)和协议,实际上调用了 av_register_input_format()
和 av_register_output_format()
解释一下复用器和分离器
复用器就是将视频压缩数据(H.264)和音频压缩数据(AAC)合并成一个封装格式数据(mkv)
分离器就是将封装格式中的视频压缩数据和音频压缩数据分离开来

注册完以后并对数据初始化后就可以打开视频文件了

avformat_open_input()返回值为0代表成功

打开后就可以查看视频压缩数据和音频压缩数据流信息

avformat_find_stream_info()返回值大于等于0代表成功

找到相应的视频压缩数据和音频压缩数据后就根据解码器的ID去找相应的解码器

avcodec_find_decoder()如果返回值为空代表没有找到相应的解码器

找到解码器后打开解码器

avcodec_open2()返回值小于0代表打开解码器失败,打开解码器并不代表解码

打开解码器后然后读取一帧一桢的压缩(编码)数据

av_read_frame()返回值代表读取的压缩数据字节大小,0代表解码完成

读取一帧一桢的压缩数据后然后开始解码

avcodec_decode_video2()解码压缩数据,返回解码的字节大小

解码完成后该关闭的关闭,该释放的释放,代码中带有更详细的注释
项目地址

原创粉丝点击