H264软解码
1、H264解码
H264解码部分在手机端实现,本文使用ffmpeg库进行解码。
2、ffmpeg官网地址
3、解码流程图
Figure 1. decode_flow
4、流程说明
注册解码器:
avcodec_register_all用于注册所有已编译的编解码器
查找解码器:
avcodec_find_decoder根据指定的解码器ID查找对应的解码器,h264解码器对应ID为:AV_CODEC_ID_H264
初始化解析器:
av_parser_init初始化解析器上下文。解析器在处理数据流之前,可以用于预处理输入数据,例如找到帧边界、提取关键信息等。
分配解码器上下文:
avcodec_alloc_context3分配一个 AVCodecContext 结构体,并设置默认值。AVCodecContext 结构体是 FFmpeg 中用于存储编解码器的上下文信息的数据结构。
打开解码器:
avcodec_open2打开编解码器并初始化其上下文(AVCodecContext)。在解码器上下文初始化之后,通过这个函数可以打开解码器,以便开始进行解码操作。
接收数据
每次开始解码之前,先判断数据是否以sps帧开始,直到查找到sps开始的数据,才开始进行解码,否则丢弃数据,不进行解码。
发送数据给解析器:
av_parser_parse2解析输入的媒体数据流,通常用于找到帧的边界
发送数据给解码器:
avcodec_send_packet用于向解码器发送数据包以进行解码。它将输入的数据包发送到解码器上下文进行解码。
接收解码以后的数据帧:
avcodec_receive_frame用于从解码器接收解码后的帧。在使用
avcodec_send_packet函数发送数据包进行解码后,可以使用avcodec_receive_frame来获取解码器解码出的图像帧。