音视频编码实战-------pcm+yuv数据转成MP4

文章目录

  • 1.编码流程图
  • 2.相关模块及函数
    • 2.1 编码器相关API
    • 2.2 复用器相关API
    • 2.3 重采样相关API
    • 注意点
  • 简单的编码流程相关代码

1.编码流程图

音视频编码实战-------pcm+yuv数据转成MP4_第1张图片
音视频编码实战-------pcm+yuv数据转成MP4_第2张图片

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指针中,而不是每一个关键帧中

简单的编码流程相关代码

码云仓库链接

你可能感兴趣的:(音视频开发,音视频)