gpt4 book ai didi

android - 当我尝试将显示设置为 MediaPlayer 时,表面已被释放

转载 作者:IT老高 更新时间:2023-10-28 23:20:55 28 4
gpt4 key购买 nike

我的 xml 文件:

<SurfaceView
android:id="@+id/surfaceView"
android:layout_marginTop="50dp"
android:layout_width="fill_parent"
android:layout_height="300dp" />

我的 setDisplay 函数:

public void playVideo() {
MediaPlayer mp = new MediaPlayer();
SurfaceView sv = (SurfaceView) this.findViewById(R.id.surfaceView);
try {
mp.setDataSource("sdcard/test/a.3gp");
SurfaceHolder sh = sv.getHolder();
mp.setDisplay(sh);***----the exception occured here***
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

日志如下:

04-24 22:19:33.645: W/System.err(16106): java.lang.IllegalArgumentException: The surface has been released
04-24 22:19:33.645: W/System.err(16106): at android.media.MediaPlayer._setVideoSurface(Native Method)
04-24 22:19:33.645: W/System.err(16106): at android.media.MediaPlayer.setDisplay(MediaPlayer.java:698)

我在这里发现了一些类似的问题,但所有这些问题都不适合我。等待您的答复。非常感谢。

最佳答案

表面可以被破坏。这就是为什么您需要将 public void surfaceDestroyed(SurfaceHolder holder) 添加到 SurfaceView 的实现中,如下所示:

  @Override
public void surfaceDestroyed(SurfaceHolder holder) {
synchronized (this) {
hasActiveHolder = false;

synchronized(this) {
this.notifyAll();
}
}
}

您还应该添加一个处理 Surface 创建的函数:

@Override
public void surfaceCreated(SurfaceHolder holder) {
synchronized (this) {
hasActiveHolder = true;
this.notifyAll()
}
}

然后这样修改你自己的函数:

    mp.setDataSource("sdcard/test/a.3gp");
SurfaceHolder sh = sv.getHolder();
synchronized (this) {
while (!hasActiveHolder) {
try {
this.wait();
} catch (InterruptedException e) {
//Print something
}
}
mp.setDisplay(sh);
mp.prepare();
}

您还有另一种选择,即 Google 建议您使用 SurfaceView 的方式:在单独的线程中。

关于android - 当我尝试将显示设置为 MediaPlayer 时,表面已被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16194941/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com