Java 在静态上下文(ARCore)中使用MediaPlayer时出现问题
我正在使用谷歌的ARCore库创建一个应用程序来检测图像,播放特定图像的视频,然后在检测到新图像时停止该视频。图像检测的逻辑工作正常,我遇到的问题是android MediaPlayer类,当检测到新图像时停止视频 我为将被引用的MediaPlayer对象定义了一个单独的类(Singleton模式)。此类将用于启动和停止MediaPlayerJava 在静态上下文(ARCore)中使用MediaPlayer时出现问题,java,android,augmented-reality,arcore,Java,Android,Augmented Reality,Arcore,我正在使用谷歌的ARCore库创建一个应用程序来检测图像,播放特定图像的视频,然后在检测到新图像时停止该视频。图像检测的逻辑工作正常,我遇到的问题是android MediaPlayer类,当检测到新图像时停止视频 我为将被引用的MediaPlayer对象定义了一个单独的类(Singleton模式)。此类将用于启动和停止MediaPlayer public class AugmentedImageMediaPlayer { public static MediaPlayer mediaPlay
public class AugmentedImageMediaPlayer {
public static MediaPlayer mediaPlayerInstance = new MediaPlayer();
public static void startMediaPlayer(Context context, int augmentedImageIndex, Surface surface, boolean isLooping){
mediaPlayerInstance = MediaPlayer.create(context, AugmentedImageFragment.videoList[augmentedImageIndex]);
mediaPlayerInstance.setSurface(surface);
mediaPlayerInstance.setLooping(isLooping);
}
public static void stopMediaPlayer(){
if(mediaPlayerInstance.isPlaying()) {
mediaPlayerInstance.stop();
}
}
}
检测到新图像时,将创建一个节点,并从上面的类(AugmentedImageMediaPlayer)创建一个MediaPlayer对象。MediaPlayer在曲面上播放,并设置为节点上的可渲染对象
AugmentedImageMediaPlayer.startMediaPlayer(context, augmentedImageIndex, texture.getSurface(), false);
// Set the anchor based on the center of the image.
setAnchor(image.createAnchor(image.getCenterPose()));
//TODO: Video nodes here.
Node videoNode = new Node();
videoNode.setParent(this);
float videoWidth = AugmentedImageMediaPlayer.mediaPlayerInstance.getVideoWidth();
float videoHeight = AugmentedImageMediaPlayer.mediaPlayerInstance.getVideoHeight();
videoNode.setLocalScale(
new Vector3(
VIDEO_HEIGHT_METERS * (videoWidth / videoHeight), VIDEO_HEIGHT_METERS, 1.0f));
Quaternion q1 = videoNode.getLocalRotation();
Quaternion q2 = Quaternion.axisAngle(new Vector3(1.0f, 0f, 0f), 90f);
videoNode.setLocalRotation(Quaternion.multiply(q1, q2));
if (!AugmentedImageMediaPlayer.mediaPlayerInstance.isPlaying()) {
AugmentedImageMediaPlayer.mediaPlayerInstance.start();
// Wait to set the renderable until the first frame of the video becomes available.
// This prevents the renderable from briefly appearing as a black quad before the video
// plays.
texture
.getSurfaceTexture()
.setOnFrameAvailableListener(
(SurfaceTexture surfaceTexture) -> {
videoNode.setRenderable(videoPlacedRenderable);
texture.getSurfaceTexture().setOnFrameAvailableListener(null);
});
// this stops the video from playingAugmentedImageMediaPlayer.mediaPlayerInstance.stop();
} else {
videoNode.setRenderable(videoPlacedRenderable);
}
所有这些都正常工作,视频开始时也非常好。问题是,我无法在节点外部停止视频(可以在节点的类中停止视频),即使我定义了一个类来确保MediaPlayer可以被引用和更改
这就是我试图停止视频的地方:
node = new AugmentedImageNode(this);
node.setImage(augmentedImage, this, this.augmentedImageIndex);
augmentedImageMap.put(augmentedImage, node);
arFragment.getArSceneView().getScene().addChild(node);
AugmentedImageMediaPlayer.stopMediaPlayer();
任何关于我如何改变这一点的帮助,使其能够停止,或者如果我完全错过了一些明显的东西,那将是非常棒的。谢谢。任何帮助都会很好。任何帮助都会很好。