为什么我的Android应用程序在播放后说“无法播放视频”?

时间:2012-06-30 13:59:26

标签: java android mp4 android-videoview

我有一个简单的应用程序,以一个在VideoView中播放mp4视频的启动画面活动开始。视频完成后,我正在尝试通过OnCompletionListener开始一项新活动。

当我启动应用程序时,视频效果很好;按预期播放声音和音频。视频播放完毕后,应用会显示一个标题为“无法播放视频”的对话框,并在按下“确定”按钮后继续正常播放。当我将音频添加到我使用Adobe After Effects创建的mp4时,问题似乎才会发生。我使用完全相同的视频减去音频轨道,它不会抛出此错误。我假设文件的编码很好,因为它在显示对话框之前完全播放。

这是我的代码:

public class Splash extends Activity {


 @Override  
 public void onCreate(Bundle savedInstanceState) {  

     super.onCreate(savedInstanceState);
     setContentView(R.layout.splash);

     Uri video = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.audio_intro); 

     VideoView videoview = (VideoView) findViewById(R.id.splash_view);
     videoview.setKeepScreenOn(true);  
     videoview.setVideoURI(video);

     videoview.setOnCompletionListener(new OnCompletionListener() {  
           public void onCompletion(MediaPlayer mp) {  
                 Intent intent = new Intent(Splash.this, Menu.class);
                 startActivity(intent);
                 finish();
           }
     });

     videoview.requestFocus();
     videoview.start();
 }

}

这是LogCat显示的内容:

06-30 14:49:33.095: V/MediaPlayer-JNI(21544): native_setup
06-30 14:49:33.095: V/MediaPlayer(21544): constructor
06-30 14:49:33.095: V/MediaPlayer(21544): setListener
06-30 14:49:33.095: I/MediaPlayer(21544): path is null
06-30 14:49:33.095: V/MediaPlayer-JNI(21544): setDataSourceFD: fd 54
06-30 14:49:33.095: V/MediaPlayer(21544): setDataSource(54, 2521, 173889)
06-30 14:49:33.110: V/MediaPlayer(21544): setVideoSurfaceTexture
06-30 14:49:33.110: V/MediaPlayer-JNI(21544): setAudioStreamType: 3
06-30 14:49:33.110: V/MediaPlayer(21544): MediaPlayer::setAudioStreamType
06-30 14:49:33.110: V/MediaPlayer(21544): setVideoSurfaceTexture
06-30 14:49:33.110: V/MediaPlayer(21544): prepareAsync
06-30 14:49:33.140: V/MediaPlayer(21544): message received msg=5, ext1=480, ext2=270
06-30 14:49:33.140: V/MediaPlayer(21544): New video size 480 x 270
06-30 14:49:33.140: V/MediaPlayer(21544): callback application
06-30 14:49:33.140: V/MediaPlayer(21544): back from callback
06-30 14:49:33.140: V/MediaPlayer(21544): message received msg=1, ext1=0, ext2=0
06-30 14:49:33.140: V/MediaPlayer(21544): prepared
06-30 14:49:33.140: V/MediaPlayer(21544): callback application
06-30 14:49:33.140: V/MediaPlayer(21544): back from callback
06-30 14:49:33.145: I/MediaPlayer(21544): mOnVideoSizeChangedListener. Send MEDIA_SET_VIDEO_SIZE message.
06-30 14:49:33.145: V/MediaPlayer(21544): getVideoWidth
06-30 14:49:33.145: V/MediaPlayer-JNI(21544): getVideoWidth: 480
06-30 14:49:33.145: V/MediaPlayer(21544): getVideoHeight
06-30 14:49:33.145: V/MediaPlayer-JNI(21544): getVideoHeight: 270
06-30 14:49:33.145: I/MediaPlayer(21544): mOnPreparedListener. Send MEDIA_PREPARED message.
06-30 14:49:33.145: D/MediaPlayer(21544): getMetadata
06-30 14:49:33.145: V/MediaPlayer(21544): getVideoWidth
06-30 14:49:33.145: V/MediaPlayer-JNI(21544): getVideoWidth: 480
06-30 14:49:33.145: V/MediaPlayer(21544): getVideoHeight
06-30 14:49:33.145: V/MediaPlayer-JNI(21544): getVideoHeight: 270
06-30 14:49:33.170: I/MediaPlayer(21544): sendBroadcast android.media.IMediaPlayer.videoexist
06-30 14:49:33.170: V/MediaPlayer-JNI(21544): start
06-30 14:49:33.170: V/MediaPlayer(21544): start
06-30 14:49:37.915: V/MediaPlayer(21544): message received msg=100, ext1=1, ext2=-1007
06-30 14:49:37.915: E/MediaPlayer(21544): error (1, -1007)
06-30 14:49:37.915: V/MediaPlayer(21544): callback application
06-30 14:49:37.915: V/MediaPlayer(21544): back from callback
06-30 14:49:37.915: E/MediaPlayer(21544): Error (1,-1007)
06-30 14:49:37.915: D/VideoView(21544): Error: 1,-1007

我希望有人可以帮助我,因为我已经尝试了很多东西来解决这个问题,并且似乎无法找到类似的问题在任何地方被提及/解决。感谢。

3 个答案:

答案 0 :(得分:4)

只是一个想法:我建议尝试使用视频转换器(例如http://www.wondershare.com/pro/media-converter.html)(从mp4)将视频转换为mp4,以确保将音频(和视频)转换为标准这是由http://developer.android.com/guide/appendix/media-formats.html#core上列出的Android支持的。

答案 1 :(得分:1)

另一个随机猜测,在完成监听器中完成你的活动之前调用videoview.stopPlayback:)

编辑:是否在完成侦听器之前或之后出现对话框?

答案 2 :(得分:1)

(1,-1007)错误意味着: MEDIA_ERROR_UNKNOWN - “文件或网络相关的操作错误。”

这可能来自一个损坏的文件

另见android.media.MediaPlayer.OnErrorListener#onError的javadoc http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html#onError

@param what the type of error that has occurred:
MEDIA_ERROR_UNKNOWN
MEDIA_ERROR_SERVER_DIED

@param extra an extra code, specific to the error. Typically implementation dependent.
MEDIA_ERROR_IO
MEDIA_ERROR_MALFORMED
MEDIA_ERROR_UNSUPPORTED
MEDIA_ERROR_TIMED_OUT