P 帧刷新 ISlice/Intra 宏块行,可以为客户提供码流非常平滑的编码方式,每个 I 帧和 P
帧的大小可以非常接近。在网络带宽有限(如无线网络)的情况下,降低 I 帧过大带
来的网络冲击,降低网传延时,降低网络传输出错的概率。
/*---# P帧帧内刷新,降低 I 帧过大带来的网络冲击------------------------------------------------------------*/
#if 1
VENC_INTRA_REFRESH_S pstIntraRefresh;
ret = HI_MPI_VENC_GetIntraRefresh(encChn,&pstIntraRefresh);
if (HI_SUCCESS != ret)
{
ERROR_LOG("HI_MPI_VENC_GetIntraRefresh (%d) fail: %#x!\n", encChn, ret);
return HLE_RET_ERROR;
}
pstIntraRefresh.bRefreshEnable = HI_TRUE;
pstIntraRefresh.enIntraRefreshMode = INTRA_REFRESH_ROW; //按行刷新
/*满足条件:u32RefreshNum * MaxRefreshFrameInGop >= (u32PicHeight+15)/16;
其中,无高级跳帧参考时,MaxRefreshFrameInGop = Gop(30),则u32RefreshNum >= (u32PicHeight+15)/(16*MaxRefreshFrameInGop)
1920*1080: (u32PicHeight+15)/(16*MaxRefreshFrameInGop) = (1080+15)/(16*30) = 2.281
960*544: (u32PicHeight+15)/(16*MaxRefreshFrameInGop) = (544+15)/(16*30) = 1.164
所以:主码流通道,u32RefreshNum 取 3
次码流通道,u32RefreshNum 取 2
*/
pstIntraRefresh.u32RefreshNum = (0 == stream_index)? 3 : 2;
pstIntraRefresh.u32ReqIQp = 40;
ret = HI_MPI_VENC_SetIntraRefresh(encChn,&pstIntraRefresh);
if (HI_SUCCESS != ret)
{
ERROR_LOG("HI_MPI_VENC_SetIntraRefresh (%d) fail: %#x!\n", encChn, ret);
return HLE_RET_ERROR;
}
#endif