Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

鸿蒙 4.4.9版本在华为navo12上出现不播放现象 #2621

Open
OvenCroc opened this issue Dec 13, 2024 · 6 comments
Open

鸿蒙 4.4.9版本在华为navo12上出现不播放现象 #2621

OvenCroc opened this issue Dec 13, 2024 · 6 comments
Assignees

Comments

@OvenCroc
Copy link

【版本信息】

4.4.9

【平台信息】

鸿蒙

【预期的表现】

正常播放

【实际的情况】

未播放pag动画

【Demo及附件】

splash_default.zip

oh.zip
日志见附件

鸿蒙系统排查说只传了一帧给解码器, 后面就没有了,

@kevingpqi123
Copy link
Collaborator

kevingpqi123 commented Dec 16, 2024

如果是这个结论,鸿蒙肯定没有认真分析, 关于视频解码, pag 这边传入的视频帧数至少会等于最大参考帧的数量:https://github.com/Tencent/libpag/blob/main/src/platform/ohos/OHOSVideoDecoder.cpp
有最大参考帧的数据,肯定可以获取到解码数据

由于鸿蒙仅仅提供了异步解码接口,不像 Android 和 iOS 提供了同步解码接口,要实现精确解码,这里很麻烦,需要通过加锁的方式实现异步转同步,如果传入数据过多,就会出现内存占用增加很多的问题,,如果鸿蒙 SDK 内部无返回解码数据,就会出现等待。可以升级到 4.4.17, 配置了低延时解码,看这种方式是否可以解决问题

@OvenCroc
Copy link
Author

好的 我升级了试一下, 非常感谢

@OvenCroc
Copy link
Author

我升级了4.4.17 但是目前在鸿蒙的 5.0.0.113 SP2C00E110R4P22logpatch05 这个版本上变的非常卡顿

VID20241217085036.mp4

@kevingpqi123
Copy link
Collaborator

可以和 4.4.16 版本对比下,看是版本的问题还是其它原因

@wangyatong
Copy link

如果是这个结论,鸿蒙肯定没有认真分析, 关于视频解码, pag 这边传入的视频帧数至少会等于最大参考帧的数量:https://github.com/Tencent/libpag/blob/main/src/platform/ohos/OHOSVideoDecoder.cpp 有最大参考帧的数据,肯定可以获取到解码数据

由于鸿蒙仅仅提供了异步解码接口,不像 Android 和 iOS 提供了同步解码接口,要实现精确解码,这里很麻烦,需要通过加锁的方式实现异步转同步,如果传入数据过多,就会出现内存占用增加很多的问题,,如果鸿蒙 SDK 内部无返回解码数据,就会出现等待。可以升级到 4.4.17, 配置了低延时解码,看这种方式是否可以解决问题

image
阁下你看这是什么

@kevingpqi123
Copy link
Collaborator

kevingpqi123 commented Dec 20, 2024

你描述的是已经获取到解码数据后送显的方式,和我说的有啥关系,我上面描述的是视频解码环节中通过 send 未解码数据获取解码数据这个过程鸿蒙是异步的,没有同步的解码方式:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/video-decoding-V5

Android 同步异步解码接口:https://blog.csdn.net/u011418943/article/details/107561111
iOS 同步解码接口: https://developer.apple.com/documentation/videotoolbox/vtdecompressionsessiondecodeframe(_:samplebuffer:flags:framerefcon:infoflagsout:)?language=objc

视频编辑以及 pag 播放场景下需要的是精确解码,并不是所有的播放都是顺序播放的,我们提供了 API 接口支持随机 seek,需要是精确解码,同步解码接口更好,每送一帧未解码数据视频解码模块给出解码数据或者需要继续送数据的标志以便完成解码。由于鸿蒙只有异步解码接口,这里强行通过加锁做了同步,pag 这边会送出最大参考帧数量的未解码数据,这些数据足以获取到解码数据,如果鸿蒙内部没有返回数据,这里就会出现死锁,这也就是异步解码模式的弊端,如果 pag 这边增加送入的未解码数据,就会增加内存占用。对于实现方而言,使用同步解码接口后实现方可以自己实现异步,现在鸿蒙的这种解码模式限制使用的灵活性,精确解码模式下会有很多性能问题和潜在的风险,已经反馈过给他们。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants