This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

dm8168 VBR设置问题



我用的drk版本是04.00.00.03,我的encode参数想从CBR设置为VBR,rateControlPreset的设置为IVIDEO_USER_DEFINED
rcAlgo的设置为IH264_RATECONTROL_PRC
那为什么我的码率和帧率没有什么变化呢?

 

  • 你好,

    无论是CBR还是VBR,TI码率控制算法的策略都是尽量靠近用户设定的目标码率。

    请问你想利用VBR实现什么样的效果?

  • 实现可变帧率,那样图像变化不会影响图像质量

  • 你好,

    IVAHD h264enc是否丢帧,丢多少帧,是用户配置的,相关参数如下:

    allowFrameSkip
    skipDistributionWindowLength
    numSkipInDistributionWindow

    图像的质量一般是由QP确定的,固定QP能确保图像质量不变化,但是码率就无法控制。

  • map dog 说:
    那为什么我的码率和帧率没有什么变化呢?

    你把CBR 修改为 VBR 码率肯定是不会变的,帧率也不会变;

    但是 VBR 会让你视频的瞬时码率的变化变大的,整体码流基本是不变的;

    但瞬间大幅度画面运动,VBR 瞬时码率才变大;这个需要看你的具体场景才可以分析;

  • 问题是画面大量的运动,码率和帧率还是没有变化

  • map dog 说:

    问题是画面大量的运动,码率和帧率还是没有变化

    你测试的是多少分辨率多少帧,设置的目标码率是多少?VBR只有在目标码率较低的情况下,运动剧烈时,码率增加比较明显。如果码率控制算法能够将码率控制在目标码率之下,那就是看不出码率的变化的。

  • 下面是enclink的统计信息,你看对吗?

    [m3video] --------- CH 2 : H264 ENC : Dynamic Params -------

    [m3video]   

    [m3video] videnc2DynamicParams -> inputHeight             : 576  

    [m3video] videnc2DynamicParams -> inputWidth              : 704

     [m3video] videnc2DynamicParams -> refFrameRate            : 30000

     [m3video] videnc2DynamicParams -> targetFrameRate         : 25000

     [m3video] videnc2DynamicParams -> targetBitRate           : 256000

     [m3video] videnc2DynamicParams -> intraFrameInterval      : 50

     [m3video] videnc2DynamicParams -> generateHeader          : 0

     [m3video] videnc2DynamicParams -> captureWidth            : 704

     [m3video] videnc2DynamicParams -> forceFrame              : -1

     [m3video] videnc2DynamicParams -> interFrameInterval      : 1  

    [m3video] videnc2DynamicParams -> mvAccuracy              : 2

     [m3video] videnc2DynamicParams -> sampleAspectRatioHeight : 1

     [m3video] videnc2DynamicParams -> sampleAspectRatioWidth  : 1  

    [m3video] videnc2DynamicParams -> ignoreOutbufSizeFlag    : 1

     [m3video] videnc2DynamicParams -> lateAcquireArg          : -1

     [m3video]   [m3video] rateControlParams -> rateControlParamsPreset        : 1

     [m3video] rateControlParams -> scalingMatrixPreset            : 0

     [m3video] rateControlParams -> rcAlgo                         : 0

     [m3video] rateControlParams -> qpI                            : -1

     [m3video] rateControlParams -> qpMaxI                         : 40

     [m3video] rateControlParams -> qpMinI                         : 10

     [m3video] rateControlParams -> qpP                            : -1  

    [m3video] rateControlParams -> qpMaxP                         : 40

     [m3video] rateControlParams -> qpMinP                         : 10  

    [m3video] rateControlParams -> qpOffsetB                      : 4

     [m3video] rateControlParams -> qpMaxB                         : 44

     [m3video] rateControlParams -> qpMinB                         : 10

     [m3video] rateControlParams -> allowFrameSkip                 : 0

     [m3video] rateControlParams -> removeExpensiveCoeff           : 0  

    [m3video] rateControlParams -> chromaQPIndexOffset            : 0

     [m3video] rateControlParams -> IPQualityFactor                : 0

     [m3video] rateControlParams -> initialBufferLevel             : 4000000

     [m3video] rateControlParams -> HRDBufferSize                  : 4000000

  • 分辨率是1280x720

    帧率是每秒25帧

    设置的目标码率是256k

  • 你好,

    1. 请参考xdias里面的ivideo.h, 你现在配置的是CBR。

    typedef enum {
        IVIDEO_LOW_DELAY = 1,   /**< CBR rate control for video conferencing. */
        IVIDEO_STORAGE = 2,     /**< VBR rate control for local storage (DVD)
                                 *   recording.
                                 */
        IVIDEO_TWOPASS = 3,     /**< Two pass rate control for non real time
                                 *   applications.
                                 */
        IVIDEO_NONE = 4,        /**< No configurable video rate control
                                  *  mechanism.
                                  */
        IVIDEO_USER_DEFINED = 5,/**< User defined configuration using extended
                                 *   parameters.
                                 */

        /** Default setting. */
        IVIDEO_RATECONTROLPRESET_DEFAULT = IVIDEO_LOW_DELAY
    } IVIDEO_RateControlPreset;

    2. 你发的参数是704x576不是720p的分辨率。

  • 我把ivideo.h里面的IVIDEO_RATECONTROLPRESET_DEFAULT 设置成 IVIDEO_STORAGE

    然后又在enclink_h264.c的enclink_h264_set_static_params函数里面

    把staticParams->videnc2Params.rateControlPreset = IVIDEO_STORAGE;

    后还是不行

  • 你好,

    编码的动态参数的码率控制你是否 也做了相应的修改?

  • 在enclink_h264.c文件函数里面

    dynamicParams->rateControlParams.rateControlParamsPreset         = IH264_RATECONTROLPARAMS_USERDEFINED;

    dynamicParams->rateControlParams.rcAlgo == IH264_RATECONTROL_PRC

    上面的设置还是不行

    在encode的pdf文档中rateControlParamsPreset 的只能设这3个值

    IH264_RATECONTROLPARAMS_DEFAULT
    IH264_RATECONTROLPARAMS_USERDEFI_NED
    IH264 RATECONTROLPARAMS EXISTING

     

     

  • 你好,

    抱歉,没有注意到你使用的user define。

    你能发一个在你的配置下,运动激烈情况下是视频给我看看么?

  • 这是720p  targetBitRate = 256 kps的视频

    720p.rar
  • 你好,

    你提供的视频显示配置码率512k,实际平均码率1.2M,已经远超256kbps了。

    bitrate declared   :                 512 000
    --------------------------------------------
            real max   :               1 584 000
            real avg   :               1 258 600
            real min   :                 378 200

  • 帧率变了 视频会卡顿