FFmpeg最新版已更新6.1,许多之前标记为deprecated的api被彻底删除了,同时也增加了好多新的特性和功能。FFmpeg团队持续优化代码,新版本往往具有更高的编码和解码效率,因此及时更新FFmpeg版本,有利于提升应用的处理速度和资源利用率。本文记录项目中FFmpeg更新至6.1版本过程中遇到的问题。
一、FFmpeg6.1已废弃的api
#av_dup_packet #av_frame_get_channels #av_free_packet #av_get_codec_tag_string #av_lockmgr_register #av_packet_split_side_data #avcodec_copy_context #avfilter_register_all #avpicture_fill #avcodec_encode_video2 #avcodec_encode_audio2 #avpicture_get_size #avcodec_register #avcodec_decode_video2
二、AVStream使用codecpar来替换codec
AVStream和AVCodec,一个保存流信息,一个保存解码器实例和参数。在之前的版本中AVStream的codec指针保存了解码器实例,这意味着如果要创建一个新的AVStream对象,就要创建一个AVCodec对象。流信息和解码器实例本身不具备强耦合关系,因此只使用一个codecpar变量只保存解码器参数更为合适。
在之前的版本中,两种方式兼容,在6.1版本AVStream结构体中保留的codec对象被彻底“删除”。这里的“删除”是指放到了AVStream的内部,不允许外部获取。因为新版本增加了一种FFStream结构体,用来保护AVStream结构体的“私有”变量,不允许外部获取。