使用华为MediaCodec解码H264渲染TextureView延迟严重
Serious delay using Huawei MediaCodec decoding H264 rendering TextureView
"华为P30使用MediaCodec硬件解码H264码流,然后直接渲染到TextureView显示。"
发现相比其他手机phone平台,华为P30的延迟比其他手机phones长了200ms左右。
在配置使用MediaCodec的过程中,发现了一些Native fw层的错误日志,虽然可以正常解码渲染;
执行MediaCodec.configure(****)报如下错误:
D/SurfaceUtils: connecting to surface 0xc3a99808, reason connectToSurface
I/MediaCodec: [OMX.hisi.video.decoder.avc] setting surface generation to 33448961
D/SurfaceUtils: disconnecting from surface 0xc3a99808, reason connectToSurface(reconnect)
D/SurfaceUtils: connecting to surface 0xc3a99808, reason connectToSurface(reconnect)
E/ACodec: [OMX.hisi.video.decoder.avc] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) and dataspace 0x104
解码过程中出现如下警告:
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) and dataspace 0x102
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) and dataspace 0x102
D/SurfaceUtils: disconnecting from surface 0xc3a99808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils: connecting to surface 0xc3a99808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils: set up nativeWindow 0xc3a99808 for 720x1280, color 0x30d, rotation 0, usage 0X20002900
W/ACodec: [OMX.hisi.video.decoder.avc] setting nBufferCountActual to 11 failed: -2147483648"
这些日志与延迟无关。如果OMX.hisi.video.decoder.avc硬件解码器不支持某些配置,则打印日志,方便故障定位。
(比如加粗的DynamicAnwBuffer为端口配置,不支持则使用其他端口模式,不影响解码)
200ms的延迟不知道怎么算,可以分为H.264视频解码时间和渲染到TextureView的时间,。
解码延迟的获取,可以通过输入解码数据和获取解码输出时加入log来获取具体的时间差。
对比其他手机的时差,进一步分析时差。
此外,解码器和纹理配置(例如分辨率和帧率)也会影响性能。
或者,您也可以提供给研发工程师重现问题的方法进行分析。
感谢您的支持!
"华为P30使用MediaCodec硬件解码H264码流,然后直接渲染到TextureView显示。"
发现相比其他手机phone平台,华为P30的延迟比其他手机phones长了200ms左右。
在配置使用MediaCodec的过程中,发现了一些Native fw层的错误日志,虽然可以正常解码渲染;
执行MediaCodec.configure(****)报如下错误:
D/SurfaceUtils: connecting to surface 0xc3a99808, reason connectToSurface
I/MediaCodec: [OMX.hisi.video.decoder.avc] setting surface generation to 33448961
D/SurfaceUtils: disconnecting from surface 0xc3a99808, reason connectToSurface(reconnect)
D/SurfaceUtils: connecting to surface 0xc3a99808, reason connectToSurface(reconnect)
E/ACodec: [OMX.hisi.video.decoder.avc] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) and dataspace 0x104
解码过程中出现如下警告:
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) and dataspace 0x102
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) and dataspace 0x102
D/SurfaceUtils: disconnecting from surface 0xc3a99808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils: connecting to surface 0xc3a99808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils: set up nativeWindow 0xc3a99808 for 720x1280, color 0x30d, rotation 0, usage 0X20002900
W/ACodec: [OMX.hisi.video.decoder.avc] setting nBufferCountActual to 11 failed: -2147483648"
这些日志与延迟无关。如果OMX.hisi.video.decoder.avc硬件解码器不支持某些配置,则打印日志,方便故障定位。
(比如加粗的DynamicAnwBuffer为端口配置,不支持则使用其他端口模式,不影响解码)
200ms的延迟不知道怎么算,可以分为H.264视频解码时间和渲染到TextureView的时间,。
解码延迟的获取,可以通过输入解码数据和获取解码输出时加入log来获取具体的时间差。 对比其他手机的时差,进一步分析时差。
此外,解码器和纹理配置(例如分辨率和帧率)也会影响性能。 或者,您也可以提供给研发工程师重现问题的方法进行分析。
感谢您的支持!