我用DVSDK 4.02 (编码器版本:h264 是 02.20.00.01 AAC编码器看不到版本,DVSDK 4.02自带的). 用gstreamer同时编码视频和音频。输入视频是1080P 60FPS (用过tvp7002 component,另外一颗采集芯片)。想编码出1080P 30FPS的视频以及同时编码音频。
1,实际测试结果是 视频几乎不可能超过20FPS。而且极不稳定,大概保持在15-20之间。CPU占用率并没有满。仅60%左右。dvsdk 中封装的gstreamer 插件 TIVidEnc1 。有一个属性叫 encodePreset. 文档中说配置成1是高质量模式。配置3是高速度模式。这2个值我都试过。对运行结果毫无影响。不管是编出来的画面质量还是帧率。
2,通过H264 encode的文档 。有一个叫 encQuality的参数。它的说明如下:
/*!< 0 => version 1.1 backward compatible mode, 2 => Platinum mode,
1 => Full feature, high Quality (It is depreciated due to performance reasons) */
仅从说明来看好像是配置编码器模式的。结合encodePresent以及H264编码器的发行文档。这个encQuality应该配置成2才可以。不过TiVidEnc1并没有导出这个属性让人配置。请问如果我想改这个参数的话应该去哪里改?
3,要是上面的做法都是错误的。如何做才可以在gstreamer中同时编码音视频并且达到1080p 30fps呢?
谢谢
Chris Meng:
你好,
AAC编码器会占用很多ARM的资源,你可以看一下AAC编码器的相关文档。我不认为你可以在AAC编码器使能的情况下实现1080p30 h264编码。你能否尝试关闭音频编码,看你能实现多少帧的h264编码?
关于h264enc的参数,你可以不通过gstreamer传递给编码器,直接修改编码器的创建参数。
wenping yan:
回复 Chris Meng:
Chris Meng
你好,感谢你的回答。
我尝试过单独只编码视频。帧率也只能在25左右抖动。并且对于剧烈的动态画面。帧率也下降得比较厉害。
TI的文档上有自身测试结果表说可以支持到1080P 30FPS的。我也使用过一个别人的产品,他们的产品确实达到了稳定的25FPS 1080P。这让我很迷惑。GSTREAMER的对h264enc的参数我也通过修改gstreamer TIVidEnc1的源码额外修改了一些参数。但都没有太大的效果。
我对VEnc_process函数进行单独测试。在动态画面时,编码一帧几乎要花掉43-45ms的时间。这个时间消耗和368文档上的测试表格中的数据相去太远。