每天一点点音视频相关_ffmpeg解码器

接上一节, 我们得到了一个一个的 packet

接下来,按照c程序的套路, 先把编码器的数据结构创建好:

1
2
3
4
5
6
7
8
9
10
11
12
AVCodecParameters *pParameters = format_context->streams[video_index]->codecpar;
video_codec = avcodec_find_decoder(fpParameters->codec_id);
video_codec_ctx = avcodec_alloc_context3(video_codec);
avcodec_parameters_to_context(video_codec_ctx,
pParameters);
AVDictionary *options = NULL;
av_dict_set(&options, "threads", "auto", 0);
av_dict_set(&options, "refcounted_frames", "1", 0);
avcodec_open2(video_codec_ctx, video_codec, &options)
AVFrame * decode_frame = av_frame_alloc();

avcodec_free_context(&video_codec_ctx);
  1. 创建编码器的数据结构 AVCodecContext
  2. 从流里拿到编码参数,根据编码参数里的编码器id获取到编码器
  3. 使用编码器参数初始化 AVCodecContext
  4. 初始化 AVCodecContext 来使用前面的到的编码器
  5. 用完记得释放

这里有两点疑问:

  1. 为什么方法名后有个数字
  2. 为什么创建数据结构和打开操作的时候都传 video_codec, 注释说两个必须一致

今天完成了编码器数据结构的初始化,还是比较复杂的

明天: 每天一点点音视频相关_ffmpeg_解包器和解码器连接