系列文章目录
前言
最近在做音视频编解码实时流项目【h323+ffmpeg+rtp】,特意记录一下开发中遇到的部分问题,以及现学现用的部分知识点,前期急急忙忙没认真看,直接拿过来用,用的不对,各种问题,真的一言难尽,最终还是要静下心来认真研究才行;
温馨提示:我使用的ffmpeg版本是4.4,不同版本可能有所差异
一、AVCodecContext详解
分为音频编码、音频解码、视频编码、视频解码四个部分,虽说同用的是同一个结构体、但是含义却不一样,我分开记录一下
1.视频编码器
编码器上下文AVCodecContext是FFmpeg中用于描述编码器状态的结构体,包含了许多参数和配置选项,用于控制编码器的行为和性能。下面是一些常用的视频编码器上下文参数及其意义的详细讲解
1、codec_id:指定编码器的ID,如AV_CODEC_ID_H264表示H.264编码器。
pCodecCtx->codec_id = AV_CODEC_ID_H264;
2、bit_rate:指定编码的比特率,即视频数据每秒使用的比特数,通常以bit/s为单位。该参数的大小直接影响到视频的质量和大小,过高的比特率可能会导致视频过大,而过低的比特率可能会导致视频质量下降。
pCodecCtx->bit_rate = 3000000; // 比特率3000Kbps
2、width/height:指定视频的宽度和高度,单位为像素。
pCodecCtx->width = 1920; // 1080P
pCodecCtx->height = 1080;
3、gop_size:指定关键帧(I帧)的间隔大小,即每隔多少帧就产生一个I帧。该参数的大小通常与视频的帧率和编码器的性能有关,过小的间隔可能会导致视频质量下降,而过大的间隔可能会导致视频播放时的卡顿现象。
pCodecCtx->gop_size = 25;
4、max_b_frames:指定编码器允许使用的最大B帧数量。B帧通常是在前后两个关键帧之间插入的一种帧类型,可以提高视频压缩比和画面流畅度,但同时也增加了编码器的计算量。
pCodecCtx->max_b_frames = 2;
5、pix_fmt:指定输入数据的像素格式,例如AV_PIX_FMT_YUV420P表示420格式的YUV数据。
pCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;
6、time_base:指定视频的时间基准,即每个时间单位表示多少秒。通常为分数形式,例如{1, 25}表示每个时间单位为1/25秒。
pCodecCtx->time_base = (AVRational){
1, 25};
7、workaround_bugs:用于指定编码器是否需要尝试解决一些已知的编码器或解码器的问题。将该参数设置为FF_BUG_AUTODETECT表示编码器会自动检测和解决一些已知的问题,包括一些标准不一致或解码器错误等问题。
在实际应用中,是否需要设置取决于具体的应用场景。如果您的应用程序需要处理多种不同的视频源或使用多种不同的解码器进行解码,那么可以考虑设置该参数,以确保编码器能够处理各种不同的视频源和解码器。但如果您的应用程序只处理特定类型的视频源或使用特定的解码器进行解码,可以考虑禁用该参数以提高编码效率。
pCodecCtx->workaround_bugs =<

文章详细介绍了FFmpeg中AVCodecContext结构体在视频编码器和解码器中的应用,包括参数配置如codec_id、bit_rate、width/height、gop_size等,并阐述了编码和解码的基本流程。同时,文章提到了音频编码和解码的相关参数,如采样率、声道数和声道布局等。
&spm=1001.2101.3001.5002&articleId=130155196&d=1&t=3&u=3995301ec68340b7b603e8f795a383f8)
2238

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



