Android VideoView 错误 1,0

标签 android video media-player android-4.0-ice-cream-sandwich android-videoview

我有一个主要目标是播放特定视频文件的应用程序。

它有时会正确播放视频。但其他时候它会给我这个错误:

03-21 14:52:36.181: I/AwesomePlayer(119): 
setDataSource_l('/data/data/my.package.name/files/MyMovie.mp4')
03-21 14:52:36.196: W/VideoView(26612): Unable to open content: /data/data/my.package.name/files/MyMovie.mp4
03-21 14:52:36.196: W/VideoView(26612): java.lang.IllegalArgumentException: The surface has been released
03-21 14:52:36.196: W/VideoView(26612):     at android.media.MediaPlayer._setVideoSurface(Native Method)
03-21 14:52:36.196: W/VideoView(26612):     at android.media.MediaPlayer.setDisplay(MediaPlayer.java:633)
03-21 14:52:36.196: W/VideoView(26612):     at android.widget.VideoView.openVideo(VideoView.java:222)
03-21 14:52:36.196: W/VideoView(26612):     at android.widget.VideoView.access$2000(VideoView.java:49)
03-21 14:52:36.196: W/VideoView(26612):     at android.widget.VideoView$6.surfaceCreated(VideoView.java:465)
03-21 14:52:36.196: W/VideoView(26612):     at android.view.SurfaceView.updateWindow(SurfaceView.java:533)
03-21 14:52:36.196: W/VideoView(26612):     at android.view.SurfaceView.access$000(SurfaceView.java:81)
03-21 14:52:36.196: W/VideoView(26612):     at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:169)
03-21 14:52:36.196: W/VideoView(26612):     at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590)
03-21 14:52:36.196: W/VideoView(26612):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1617)
03-21 14:52:36.196: W/VideoView(26612):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
03-21 14:52:36.196: W/VideoView(26612):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-21 14:52:36.196: W/VideoView(26612):     at android.os.Looper.loop(Looper.java:137)
03-21 14:52:36.196: W/VideoView(26612):     at android.app.ActivityThread.main(ActivityThread.java:4424)
03-21 14:52:36.196: W/VideoView(26612):     at java.lang.reflect.Method.invokeNative(Native Method)
03-21 14:52:36.196: W/VideoView(26612):     at java.lang.reflect.Method.invoke(Method.java:511)
03-21 14:52:36.196: W/VideoView(26612):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-21 14:52:36.196: W/VideoView(26612):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-21 14:52:36.196: W/VideoView(26612):     at dalvik.system.NativeStart.main(Native Method)
03-21 14:52:36.196: D/VideoView(26612): Error: 1,0

我正在使用准备好的监听器来调用这样的开始:

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer arg0) {
        mVideoView.start();

    }
});

我用这个设置数据源:

file = new File(this.getFilesDir() + File.separator + VIDEO_FILE_NAME);
mVideoView.setVideoPath(file.getAbsolutePath());

我确定该文件确实存在并且格式正确。

我的应用程序能够从警报触发器启动。当设备屏幕关闭时触发并启动我的应用程序时,这似乎只是一个问题(我的应用程序将使用唤醒锁打开屏幕)。如果我手动启动应用程序,或者触发发生在视频播放正常的屏幕上。此错误也仅发生在 Galaxy Nexus 上。我可以在 Nexus S(以及一长串其他代码)上运行完全相同的代码,并且每次都可以正常启动。

有没有人知道任何可能导致此行为的特定于 Galaxy Nexus 或 ICS 的东西?对于我可以尝试解决的问题,有什么建议吗?

最佳答案

UThis 已连接到您的 SurfaceView。 确保在调用 MediaPlayer 上的 prepare 之后不要触摸 SurfaceView 并且它是可见的。在您尝试唤醒屏幕的情况下,请确保一切都以正确的顺序发生。因此,准备 MediaPlayer 进行播放是您的应用程序应该做的最后一件事。可能是准备/播放在应用完全唤醒之前启动,导致应用尝试操纵 SurfaceView。

下面的代码示例说明了如何触发这种异常:

   private void setupVideo(String file){
      ...
      mSurfaceView = (SurfaceView) findViewById(R.id.surface);
      mHolder = mSurfaceView.getHolder(); // DON'T TOUCH BEHIND THIS POINT
      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
      mMediaPlayer.setDisplay(mHolder);
      mMediaPlayer.setOnPreparedListener(this);
      mMediaPlayer.prepare();
   }
   @Override
   public void onPrepared(final MediaPlayer mp) {
      mSurfaceView.setVisibility(View.VISIBLE); // THIS WILL CAUSE THE ERROR
      mp.start();
   }

关于Android VideoView 错误 1,0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9812067/

相关文章:

android - 在 TextureView 中旋转视频/媒体播放器

video - FFMPEG : Cut specific parts of a video, 并将它们合并到一个文件中

node.js - 流畅的 ffmpeg : Adding gif animation as overlay between x time to y time

python - 在 python 中使用 org.mpris.mediaplayer2.player PlaybackStatus 属性

android - 在内部存储上播放文件时 MediaPlayer 错误 -2147483648

Android Studio、Gradle 和 NDK

java - 在 RecyclerView 中仅选择一张图像

java - 按后退按钮停止媒体播放器

android - Lollipop 在我的应用程序中将按钮的文本大写

android - 右对齐 LinearLayout 的 imageView