TI中文支持网
TI专业的中文技术问题搜集分享网站

DM365 DVSDK4.02中H.264编码中插入IDR帧

您好!请问一下在DM365 DVSDK4.02中如何在H.264编码中插入IDR帧,demos中只有第一帧为IDR帧,如果第一帧数据丢失,就无法显示。请问一下如何在每隔25帧插入一帧IDR数据,确保视频能够正常显示!请给位指导。。。多谢!

user1932207:

只丢掉第一帧应该没过30fps(1s)会插入一个I帧吧。至少我运行的Demo都是这样。至于是不是IDR帧我就不了解了。

qiang gao:

回复 user1932207:

除了第一帧是IDR 帧,其他都是I帧,如果第一帧丢失,后面接受到的数据帧正确也没有播放视频

feller shi:

回复 Chris Meng:

孟工,您好:

   代码demo:dvsdk-demos_4_02_00_01

    encode库版本:H264ENC.version.02.20.00.01.wizardversion.0.5.2

也就是下载ti-dvsdk_dm368-evm_4_02_00_06的默认代码库。

如果按照以下方法,我在创建编码器后执行以下步骤:

How to force Intra frames in H.264 encoder?
It can be done using forceFrame parameter of dynamicParams.Set the following:SET dynamicParams.forceFrame = IVIDEO_IDR_FRAME;
Call VIDENC1_control() for XDM_SETPARAMS. This will set Force IDR Frame parameter
call VIDENC1_process(). This will generate an IDR frame

而并不执行以下步骤:

SET dynamicParams.forceFrame = IVIDEO_NA_FRAME;
Call VIDENC1_control() for XDM_SETPARAMS. This will set the original parameters for encoding and remove force IDR frame.
call VIDENC1_process(). This will resume normal encoding
	printf( "dynParams->forceFrame=%d\n", dynParams->forceFrame );encStatus.data.buf = NULL;dynParams->forceFrame = IVIDEO_IDR_FRAME;//test for all IDRprintf( "dynParams->forceFrame=%d\n", dynParams->forceFrame );status = VIDENC1_control(hEncode, XDM_SETPARAMS, dynParams, &encStatus);
而且,执行以上代码没有错误信息。

实际编码出来的视频文件仍然只有头部是一个SPS/PPS/IDR帧,后面都是I帧或P帧,也就是没有图像帧0x00 00 00 01 65的重复,只有文件开头有一个这样的字符串。

不知道是哪里设置不对?

谢谢:)

feller shi:

回复 feller shi:

这个问题试过了。

只要每次process前都iocontrol设置一下就能够编码出IDR帧了。

ok了!

赞(0)
未经允许不得转载:TI中文支持网 » DM365 DVSDK4.02中H.264编码中插入IDR帧
分享到: 更多 (0)