最新webrtc版本已经支持AV1编解码功能,实测性能和质量真有很大的进步空间,另外potplay、VLC也支持AV1解码播放功能。
一、接口函数
根据webrtc代码总结AV1函数调用框架如下:
- aom_codec_enc_config_default(aom_codec_iface_t *iface,aom_codec_enc_cfg_t *cfg, unsigned int usage)
注册编码器,获取注册的编码器的默认编码参数集。
aom_codec_iface_t *iface:要使用的编码器句柄指针。里面包含编码器使用的接口函数,默认配置参数。
aom_codec_enc_cfg_t *cfg:编码器实际使用参数指针。这里是出参,需要根据usage在iface里面找到一组默认参数。
usage:默认参数组序号。在webrtc代码里面,可以参考encoder_usage_cfg定义。
- aom_img_alloc
申请输入编码数据缓存buf
- aom_codec_enc_init
根据aom_codec_iface_t、aom_codec_enc_cfg_t初始化aom_codec_ctx_t句柄。并调用aom_codec_iface_t.encoder_init函数初始化编码器。
- aom_codec_control
根据需要,动态调整编码参数。可以参考aom_codec_av1_cx_algo.encoder_ctrl_maps定义。可调整的参数列表参考encoder_ctrl_maps定义。可修改的参数列表在aom_com_control_id、aome_enc_control_id里面定义。
- aom_codec_encode
输入编码器待编码参数,进行编码。
- aom_codec_get_cx_data
获取编码后数据
- aom_codec_enc_config_set
动态调整编码参数。可通过调整aom_codec_enc_cfg_t参数,生效编码器。
- aom_img_free
释放编码数据缓存buf
- aom_codec_destroy
释放编码器申请资源
二、接口参数
aom_codec_enc_cfg结构体定义
参数名称 | 参数类型 | 参数含义 | 参数配置 |
g_usage | unsigned int | 自定义参数组编号 | webrtc里面自定义编码: AOM_USAGE_GOOD_QUALITY (0) AOM_USAGE_REALTIME (1) |
g_threads | unsigned int | 最大可使用线程数 | |
g_profile | unsigned int | 编码器可支持的格式集合 | PROFILE_0:8-bit 4:2:0 only PROFILE_1:8-bit 4:4:4, 4:2:2, and 4:4:0 PROFILE_2:10-bit and 12-bit color only, with 4:2:0 sampling. PROFILE_3:10-bit and 12-bit color only, with 4:2:2/4:4:4/4:4:0 sampling. |
g_w | unsigned int | 宽 | |
g_h | unsigned int | 高 | |
g_bit_depth | aom_bit_depth_t | 编码器支持的位深 | AOM_BITS_8 AOM_BITS_10 AOM_BITS_12 |
g_input_bit_depth | unsigned int | 输入编码器数据位深 | |
g_timebase | aom_rational | 视频采样率 | |
g_error_resilient | aom_codec_er_flags_t | Enable error resiliency features | AOM_ERROR_RESILIENT_DEFAULT AOM_ERROR_RESILIENT_PARTITIONS |
g_pass | aom_enc_pass | pass参数 | AOM_RC_ONE_PASS AOM_RC_FIRST_PASS AOM_RC_LAST_PASS |
g_lag_in_frames | unsigned int | 预编码帧数 | |
rc_dropframe_thresh | unsigned int | 时间重采样阈值 | |
rc_resize_mode | unsigned int | 下采样模式调整 | RESIZE_NONE:不调整分辨率. RESIZE_FIXED:所有帧都按照指定参数调整分辨率,关键帧按照rc_resize_kf_numerator调整,非关键帧按照rc_resize_numerator调整 RESIZE_DYNAMIC:动态调整每一帧的分辨率 |
rc_resize_numerator | unsigned int | 非关键帧调整系数 | |
rc_resize_kf_numerator | unsigned int | 关键帧调整系数 | |
rc_superres_mode | unsigned int | 上采样模式调整 | SUPERRES_NONE:不调整分辨率. SUPERRES_FIXED:所有帧都按照指定参数调整分辨率,关键帧按照rc_superres_kf_numerator调整,非关键帧按照rc_superres_numerator调整 SUPERRES_DYNAMIC:动态调整每一帧的分辨率 |
rc_superres_numerator | unsigned int | 非关键帧调整系数 | |
rc_superres_kf_numerator | unsigned int | 关键帧调整系数 | |
rc_end_usage | aom_rc_mode | 码控模式 | AOM_VBR:Variable Bit Rate mode AOM_CBR:Constant Bit Rate mode AOM_CQ:Constrained Quality mode AOM_Q:Constant Quality mode |
rc_twopass_stats_in | aom_fixed_buf_t | 2pass统计 | |
rc_firstpass_mb_stats_in | aom_fixed_buf_t | 1pass统计 | |
rc_target_bitrate | unsigned int | 目标码率 | |
rc_min_quantizer | unsigned int | 最小QP | |
rc_max_quantizer | unsigned int | 最大QP | |
rc_undershoot_pct | unsigned int | 可上浮目标码率比例 | |
rc_overshoot_pct | unsigned int | 可下浮目标码率比例 | |
rc_buf_sz | unsigned int | 解码端需分配的缓存buf | |
rc_buf_initial_sz | unsigned int | 开始解码时,解码端需分配的缓存buf | |
rc_buf_optimal_sz | unsigned int | 解码端需分配的最优缓存buf | |
rc_2pass_vbr_bias_pct | unsigned int | CBR/VBR bias (0=CBR, 100=VBR) | |
rc_2pass_vbr_minsection_pct | unsigned int | GOP min bitrate (% of target) | |
rc_2pass_vbr_maxsection_pct | unsigned int | GOP max bitrate (% of target) | |
kf_mode | aom_kf_mode | 配置I帧间隔 | AOM_KF_AUTO:自适应I帧间隔 AOM_KF_DISABLED:固定I帧间隔 |
kf_min_dist | unsigned int | 最小I帧间隔 | |
kf_max_dist | unsigned int | 最大I帧间隔 |