概述
我们以FFmpeg简单使用:视频解码 ---- 提取yuv为例,研究一下h264的解码过程。
这里主要涉及两个方面:
1.解析器【ff_h264_parser】:使用av_parser_parse2解析出一帧NALU
2.解码器【ff_h264_decoder】:使用avcodec_send_packet送入NALU,通过avcodec_receive_frame获取AVFrame
ff_h264_parser解析器
AVCodecParser ff_h264_parser = { .codec_ids = { AV_CODEC_ID_H264 }, .priv_data_size = sizeof(H264ParseContext), .parser_init = init, // 初始化解码器 .parser_parse = h264_parse, // 解析 .parser_close = h264_close, // 关闭解码器 .split = h264_split, };
AVCodecParser里面的parser_init、parser_parse和parser_close最终调用的是ff_h264_parser结构里的函数