文章目录
- 1.编码流程图
- 2.相关模块及函数
- 2.1 编码器相关API
- 2.2 复用器相关API
- 2.3 重采样相关API
- 注意点
- 简单的编码流程相关代码
1.编码流程图
2.相关模块及函数
2.1 编码器相关API
avcodec_find_encoder: 根据编码器ID查找编码器
avcodec_alloc_context3:创建编码器上下文
avcodec_open2:打开编码器
2.2 复用器相关API
avformat_alloc_output_context2:为输出格式创建复用器上下文
avformat_new_stream:创建音视频流
avcodec_parameters_from_context:将编码器上下文中的参数拷贝到音视频流中的编码器参数中AVCodecParameters
avio_open:正式打开输出文件
avformat_write_header:写入头部信息
av_interleaved_write_frame(),对编码后的 AVPacket 进行封装,然后写入文
av_write_trailer:写入视频结尾信息
2.3 重采样相关API
swr_alloc_set_opts:设置重采样配置参数,并且分配重采样器上下文
swr_init:让重采样相关配置生效
swr_convert:对视频帧进行转换
swr_free:释放重采样器上下文
注意点
av_packet_alloc得到的数据必须要设置stream_index,不然stream_index都默认为0了
packet的pts,dts,duration时间基都要转换为对应所在stream的time_base
编码器上下文的flags要设置一下AV_CODEC_FLAG_GLOBAL_HEADER这个参数,不然的话很多视频播放器是播放不了的,尤其是视频流
这个参数是将全局头部信息(SPS,PPS)放在extradata指针中,而不是每一个关键帧中
简单的编码流程相关代码
码云仓库链接