ohos_ijkplayer库是ijkplayer库的鸿蒙版本,当编译通过并运行到mate30系列手机上后,播放视频会发现能听到有声音但是无画面的问题。本文主要来分析一下这个问题,并尝试解决。
一、问题现象
如下页面,运行到mate30系列手机上,点击播放后,能听到声音但是没有画面:

二、分析问题
抱着尝试的态度,去到库的地址上的Issues中去查找是否有类似的问题,发现也有人反馈mate30以及xs2等手机有类似的现象,但是还没有解决。再往前翻看,看到还有个mate60系列类似现象的问题,但是显示已解决。

追踪这个问题的解决,主要在210607b08d735223039680cdcc9036e9962eb303这个commit中解决问题的。其解决的问题主要是"兼容性问题:将window的format设置为与参数config的format一致",如下:

其修改的地方主要是在ijkplayer/src/main/cpp/ijksdl/ijksdl_egl.c文件中,在调用OH_NativeWindow_NativeWindowHandleOpt之前,先将format设置为配置中的format格式,避免不一致造成的兼容性问题。

三、尝试解决
按道理,上述的解决,是为了解决新系列手机的兼容性问题。但是这个修改可能解决了新系列手机的问题,却把旧的系列的手机改出了问题。
因此抱着尝试的方式,将这个修改的核心地方回退试一下,如下:
主要是在ijkplayer/src/main/cpp/ijksdl/ijksdl_egl.c文件中,屏蔽新增的配置format参数的代码:

屏蔽这个后,运行到mate30pro手机上,发现确实可以播放了:

四、结论
因此可以大致推测,是后面解决mate60播放有声音无画面问题,修改的兼容性问题导致了旧的系列手机不兼容了。可以先按照上述方法屏蔽这段代码可以在旧的系列手机上正常播放。
结论:
1、mate60系列新手机:可正常播放;
2、mate30系列等旧手机:临时措施可以先按照上述思路屏蔽相关代码即可。
TODO:
当然如果要新旧系列手机都兼容的话,可能还需要后续再研究修改兼容新旧系列手机问题。
我已将上述所说的修改,放到了我自己的仓库上,可供参考:
(PS:验证可运行到mate30系列手机,mate60系列可能需要回退5d8e6ab2ca0dcb953358d3d0446200c2332e3bd9这个commit的修改提交)