HarmonyOS鸿蒙Next中求助:纯血鸿蒙ijkplayer播放rtsp硬解码黑屏问题

HarmonyOS鸿蒙Next中求助:纯血鸿蒙ijkplayer播放rtsp硬解码黑屏问题 纯血鸿蒙使用ijkplayer播放rtsp视频流,使用示例的方式,如果只用软解码可以正常播放。但是想使用硬解码,即

// 硬解码器 buffer 模式支持 10bit 视频需要 OpenHarmony API 22 及以上版本
// 开启h264与h265硬解码
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-all-videos", "1");
// 开启h265硬解码
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-hevc", "1");
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", "842094158");
// NV12 842094158
// I420 808596553

无论全部开启或只开启h264都是黑屏,提示错误:

napi–>setOption–>category:4,key:mediacodec-all-videos,value:1 ffmpeg–>log_print:[FFPlayer @ 0x5b6d40de00] libavcodec : 58.18.100 ffmpeg–>log_print:[FFPlayer @ 0x5b6d40de00] player-opts : mediacodec-all-videos ffmpeg–>log_print:[rtsp @ 0x5c74bb0600] video codec set to: h264 {OH_VideoDecoder_Configure():407} Video decoder configure failed! OH_VideoDecoder_Configure Failed Configure failed

inputBufferInfoQueue_ is empty

OutputData outputBufferInfoQueue_ is empty

==========================================================

华为mate60开发手机,5.0系统,下载ohos_ijkplayer2.0.7,开发工具DevEco Studio5.0

rtsp地址:“rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream”

或使用自己搭建的rtsp服务器

ijkplayer链接:https://gitcode.com/openharmony-sig/ohos_ijkplayer#%E5%BC%80%E5%90%AF%E7%A1%AC%E8%A7%A3%E7%A0%81


更多关于HarmonyOS鸿蒙Next中求助:纯血鸿蒙ijkplayer播放rtsp硬解码黑屏问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

开发者您好,问题正在处理中,请您耐心等待!

更多关于HarmonyOS鸿蒙Next中求助:纯血鸿蒙ijkplayer播放rtsp硬解码黑屏问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


黑屏有没有声音啊,测试的手机具体是哪个版本,有没有稍微完整点的代码啊可以测试下或者有没有异常日志

黑屏有声音,手机是5.0.5(17),代码就是https://gitcode.com/openharmony-sig/ohos_ijkplayer里的示例,依赖库ohpm install @ohos/ijkplayer安装,只修改URL为"rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream"。错误日志在上面

鸿蒙Next中ijkplayer播放RTSP硬解码黑屏,主要涉及鸿蒙媒体子系统适配问题。需检查ijkplayer是否已适配鸿蒙的媒体硬解码接口,如OH_MediaCodec。RTSP协议在鸿蒙上需使用OH_Network组件处理。确认视频编码格式是否被鸿蒙硬解码支持,如H.264/H.265。可查看ijkplayer日志确认解码器初始化状态。

根据你提供的日志信息,核心错误是 OH_VideoDecoder_Configure Failed,这表明在HarmonyOS Next(API 10+)环境下,MediaCodec硬解码器初始化失败。结合你使用的ohos_ijkplayer 2.0.7版本,问题很可能出在解码器配置与当前系统API的兼容性上。

关键问题分析:

  1. API版本与配置参数不匹配:你代码中设置的 overlay-format 值为 842094158 (对应 PixelFormat.NV12)。这个值(842094158)是 ohos.graphics.common.PixelFormat 中定义的常量。在 HarmonyOS Next (API 10及以上) 的Stage模型中,graphics 相关API发生了重构ohos.graphics.common.PixelFormat 可能已被新的API(如 @kit.GraphicsKit@kit.ArkGraphics2D 中的 PixelMapFormat)替代。ijkplayer底层在调用 OH_VideoDecoder_Configure 时,如果传递了旧的、无效的 PixelFormat 值,就会导致配置失败。

  2. 解码器能力检查:错误日志显示配置失败发生在 OH_VideoDecoder_Configure,这属于HarmonyOS Native层(可能是 foundation/multimedia/media_standard 或相关框架)的接口。硬解码需要系统底层MediaCodec支持特定的视频格式(如H.264 Baseline/High Profile)和颜色格式(如NV12)。配置失败意味着请求的格式与设备硬件或系统当前提供的解码器能力不匹配。

解决思路与步骤:

第一步:确认并更新 overlay-format 这是最可能的直接原因。你需要查找 HarmonyOS Next API 对应版本(SDK API 10+) 中,用于表示 NV12 颜色格式的正确定义。

  • 查找新常量:查阅HarmonyOS Next的官方API参考文档,搜索 PixelMapFormat 或相关图形类,找到 NV12 对应的新常量值。这个值很可能不再是 842094158
  • 修改代码:将 setOption 中的 overlay-format 值替换为新的常量值。如果找不到确切值,可以尝试暂时注释掉这行设置,让解码器使用默认格式,看是否能正常硬解。

第二步:检查H.264 Profile与Level 你提供的RTSP流 (rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream) 或自建服务器流,其H.264编码的Profile(如High Profile)和Level可能超出了设备硬解码器的支持范围。

  • 使用ffprobe分析视频流:在PC上使用 ffprobe 工具分析你的RTSP流,获取详细的编码信息,特别是 profilelevel
    ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,profile,level,width,height,pix_fmt -of csv=p=0 "rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream"
    
  • 核对设备支持列表:查阅华为Mate 60的官方文档或开发者资源,确认其硬件解码器支持的H.264 Profile/Level组合。如果流媒体使用了不支持的Profile(如High 4:2:2或High 10),硬解码就会失败。

第三步:验证ijkplayer与HarmonyOS Next的兼容性

  • 确认ohos_ijkplayer版本:确保你使用的 ohos_ijkplayer 2.0.7 明确支持 HarmonyOS Next (API 10+)。查看其GitCode仓库的README或Issue列表,确认是否有针对Next版本的适配说明或已知问题。2.0.7版本可能主要面向API 9及之前的版本,Next的API变更可能导致兼容性问题。
  • 尝试基础硬解码配置:简化配置,只开启最基础的硬解码开关,避免设置可能不兼容的高级参数。
    // 仅开启通用硬解码尝试
    ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
    // 或尝试仅针对H.264
    ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-avc", 1);
    
    注释掉 mediacodec-all-videosmediacodec-hevcoverlay-format 的设置。

第四步:检查权限与格式

  • 网络权限:确保你的应用已声明并获取了必要的网络权限(ohos.permission.INTERNET)。
  • 视频格式:虽然你开启了H.264硬解,但请确认视频流确实是H.264编码。HEVC(H.265)流在只开启H.264硬解时也会失败。

总结与建议行动顺序:

  1. 首要行动:重点排查 overlay-format 值在HarmonyOS Next下的正确性。尝试注释该行或查找新API常量替换。
  2. 同步验证:使用 基础硬解码配置(仅 mediacodec: 1)进行测试,排除高级参数影响。
  3. 分析视频流:使用 ffprobe 确认视频流的 Profile 和 Level,对比设备支持能力。
  4. 查阅兼容性:确认 ohos_ijkplayer 2.0.7HarmonyOS Next 的明确支持状态

通过以上步骤,应能定位到导致 OH_VideoDecoder_Configure 失败的具体原因。问题焦点很可能在于Next API的变更导致旧的颜色格式常量失效。

回到顶部