检测 Android SurfaceView 是否为 drawing/moving

Detect if Android SurfaceView is drawing/moving

我正在使用 libvlc 和 android 应用来播放网络流;本机代码在表面视图上绘制图像。

假设视频停止并且我无法访问本机代码,我如何检测 SurfaceView 是否仍在移动(视频未冻结)?

我尝试了 getViewTreeObserver().addOnDrawListener();和 getViewTreeObserver().addOnPreDrawListener();但它们没有我想要的效果。

谢谢

我不确定你到底想在这里实现什么,但你可以通过实现一个名为 SurfaceHolder.Callback 的接口来查看表面视图是否正在渲染,它使你可以访问以下方法,

  1. 在创建表面时 - 在首次创建表面后立即调用。

  2. On Surface Changed - 在对表面进行任何结构更改(格式或大小)后立即调用。

  3. On Surface Destroyed - 在表面被破坏之前立即调用。

看看documentation for surface view. For SurfaceHolder take a look at this link。基本上为了知道

您无法从 SurfaceView 获取该信息,因为 SurfaceView 本身不知道。

SurfaceView 的工作是设置 Surface,并在 View 布局中创建一个可以透视的孔。一旦它做了这些事情,它就不再主动参与显示视频的过程。内容从解码器流向由 SurfaceFlinger(系统图形合成器)管理的 Surface。

例如,这就是 DRM 视频的工作原理。应用 "playing" 视频无法访问受 DRM 保护的视频帧。 (实际上,SurfaceFlinger 也没有,但这是一个较长的故事。)

了解内容是否仍在送达的最佳方法是询问视频源是否仍在向您发送内容。另一种方法是将 SurfaceView 更改为 TextureView,并提供 onSurfaceTextureUpdated() 回调方法。