解码视频和解码音频的算法步骤差不多,在这里还是参考雷神的博客
《最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)》
,并参考FFMPEG官网示例程序。从最基础的版本学习开始。首先来看一下代码:
1 |
|
步骤如下:
- 注册Muxer 和 Demuxer
- 构建输入AVFormatContext,使用avformat_allo_context()并使用avformat_open_input()与文件关联起来
- 使用av_find_stream_info()查找音视频流信息
- 构建输出AVFormatContext使用avformat_alloc_output_context2()和输出文件关联起来
- 申请AVStream,输入输出流,对于输出流需要使用acformat_new_stream() 函数初始化
- 使用avcodec_parameters_copy ()复制解码器信息,在复制好解码器信息之后,要使用avio_open()函数设置输出文件为写入,最后使用avio_closep()释放数据
- 使用avformat_write_header()写入文件头信息
- 将数据包packet写入,首先使用av_read_frame()读取每一个包
- 使用av_write_trailer()写入文件尾部信息
- 释放所有申请的资源