HarmonyOS鸿蒙Next中使用@ohos/ijkplayer播放视频时,播放8K视频卡顿,且开启硬解码后,无成像画面

HarmonyOS鸿蒙Next中使用@ohos/ijkplayer播放视频时,播放8K视频卡顿,且开启硬解码后,无成像画面 我使用该三方库播放视频,我设置了如下的一些设置: cke_854.png

如果只是设置这些,那么播放视频时,是能够正常播放的,但是播放8K视频会卡顿。但是只要我使用 cke_7336.png

这些设置后,直接就无法成像了。只有声音。

大佬们。这个怎么解决呢????


更多关于HarmonyOS鸿蒙Next中使用@ohos/ijkplayer播放视频时,播放8K视频卡顿,且开启硬解码后,无成像画面的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

开发者你好,请问当前三方库版本是多少,是否可以提供下hilog日志。

当前hilog日志为编码后二进制形式保存的gz格式文件,开发者从设备/data/log/hilog路径下导出后无法直接解压查看,需要使用hilogtool工具进行解析,将转换为明文hilog日志。

hilog日志查看方法: 1. 后缀为.gz的hilog日志该如何查看 可参考常用解析命令示例来查看后缀为.gz的hilog日志。 2. 直接解压出现乱码如何解决: 2.直接解压出现出现大量乱码或者NETSTACK: OpenUuidFile fail, unknown log是由于没有指定数据字典的路径hilog_dict到日志压缩文件,导致有些日志无法解析出来。可以按照下面的方式来进行解压:

  • 将需要解压的.gz日志文件和hilog_dict.xxx.zip放到同一个文件夹中
  • 进入命令行提示符(windows搜索cmd)
  • 使用命令解析出日志:hilogtool parse

更多关于HarmonyOS鸿蒙Next中使用@ohos/ijkplayer播放视频时,播放8K视频卡顿,且开启硬解码后,无成像画面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


希望HarmonyOS能继续推出更多实用的功能,满足用户的不同需求。

https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fijkplayer

当前ijkplayer三方库网站没有1.2.6的版本,麻烦确认下,你这边是在官网调用的不。也可以升级下最新版本试下。

ijkplayer是2.0.6的。我看成ffmpeg的版本了,

小伙伴你好,这个问题建议是去仓库的 Issues 去提问,这样解决问题的效率会高很多。

入口地址: https://gitcode.com/openharmony-sig/ohos_ijkplayer/issues

cke_2703.png

好的,感谢建议,

在HarmonyOS Next中使用@ohos/ijkplayer播放8K视频卡顿,开启硬解码后无画面,通常与硬件解码器对8K分辨率支持不足或兼容性问题有关。可检查设备硬件是否支持8K硬解,并确认ijkplayer版本与鸿蒙系统兼容。尝试调整播放器参数,如缓存策略或解码器选择,或使用软解码测试。

根据你的描述,问题核心在于播放8K视频时,软解码(默认)性能不足导致卡顿,而开启硬解码(enableHardwareDecoder)后视频无法渲染,只有音频。

这是一个典型的硬解码器兼容性或输出格式支持问题ijkplayer在HarmonyOS Next上开启硬解码后,解码器输出的图像数据(如YUV格式或Surface处理方式)可能与你的播放器视图(XComponent)不兼容,导致画面无法显示。

排查和解决方向如下:

  1. 确认硬解码支持性:并非所有设备或所有视频编码格式都支持8K硬解码。首先,请确认你的设备芯片(如麒麟9000等)是否支持8K H.265/HEVC的硬件解码。同时,检查视频的具体编码格式(例如是HEVC还是AV1),确保硬解码器支持该格式的8K分辨率。

  2. 检查Surface设置:硬解码通常需要直接输出到Surface。请确保你用于渲染的XComponent已正确获取到Surface,并在设置AVPlayersurfaceID时,这个Surface是有效的。硬解码路径对Surface的生命周期和状态非常敏感。

  3. 尝试不同的渲染模式ijkplayer可能提供了不同的渲染后端。查看其文档或源码,确认在HarmonyOS上开启硬解码后,是否必须使用特定的渲染模式(例如,需要使用其内部的NativeWindow渲染,而非默认的OpenGL ES路径)。你可能需要调整初始化参数。

  4. 解码器输出格式:硬解码器输出的图像像素格式(如NV12, NV21, YV12等)可能不被当前的渲染管线识别。尝试在AVPlayerSetSourcePrepare之后,通过AVPlayer属性查询接口,检查"video-decoder-output-format"之类的属性,看是否能获取或设置输出格式。

  5. 降级测试与日志

    • 尝试播放一个较低分辨率(如4K)但相同编码格式的视频,并开启硬解码,以判断是8K特有的问题还是硬解码通病。
    • 开启系统的媒体日志或ijkplayer的详细日志,查看开启硬解码后,解码器是否报错(如MEDIA_ERROR_UNSUPPORTED),或Surface相关的错误。这能提供最直接的失败原因。

直接尝试的代码调整: 在你开启硬解码的代码附近,可以尝试在设置source后,显式地设置一下视频缩放模式,有时这能触发渲染管路的重新配置。

// 在你设置完 enableHardwareDecoder 后,可以尝试
avPlayer.scaleMode = media.ScaleMode.SCALE_TO_FIT; // 或 SCALE_TO_FILL

但这不一定能解决根本问题。

总结:最可能的原因是设备硬解码器对8K视频解码后的图像数据,与HarmonyOS上ijkplayerXComponent的当前渲染路径不兼容。建议优先从设备解码能力验证Surface状态获取详细解码错误日志这三个方面进行深度排查。如果ijkplayer库有针对HarmonyOS的特定配置示例,应以其为准。

回到顶部