基于X264的动态帧率与动态码率调整的实现

1、动态帧率的实现

1.1 实现思路

依据动态调整因子(由网络状态,CPU状态、程序状态等组成),

计算出当前帧的可用码率,再在时间轴上动态调用x264的API实现对YUV数据帧的编码,

然后对编码帧打上非固定的动态时间戳,

从而实现了码率不变,帧率动态调整技术,

达到: 码率(清晰度)不变,流畅度变化的效果----即清晰度优先设置;

1.2 如何指定编码成关键帧

AVFrame* _v_frm;

_v_frm->key_frame = key_frame;

if (key_frame) {

_v_frm->pict_type = AV_PICTURE_TYPE_I;

} else {

_v_frm->pict_type = AV_PICTURE_TYPE_P;

}

1.3 在编码前实现帧率的动态调整

/* 随机丢掉编码前的帧 */

{

if (RANDOM(1,10) > 7) {

if (yuv_frm_unit->data != NULL) {

free(yuv_frm_unit->data);

}

if (yuv_frm_unit != NULL) {

free(yuv_frm_unit);

}

printf("Skip this frame yuv_pts=%lld\n", yuv_pts);

continue;

}

}

1.4 在编码后实现帧率的动态调整

上一篇:windows mklink /d /h /j 精讲


下一篇:流媒体-H264协议-编码-x264学习-主要结构体(二)