Java 为什么我的安卓应用程序会说;无法播放视频“;播放之后?
我有一个简单的应用程序,它从在VideoView中播放mp4视频的闪屏活动开始。视频完成后,我正试图通过OnCompletionListener启动新活动 当我启动应用程序时,视频效果非常好;按预期播放声音和音频。视频完成后,应用程序将显示一个标题为“无法播放视频”的对话框,并在按下“确定”按钮后正常继续。问题似乎只有在我将音频添加到使用Adobe After Effects创建的mp4中时才会出现。我使用了完全相同的视频减去音轨,它没有抛出这个错误。我假设文件的编码很好,因为它在显示对话框之前完全播放 这是我的密码:Java 为什么我的安卓应用程序会说;无法播放视频“;播放之后?,java,android,mp4,android-videoview,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
我希望有人能帮我解决这个问题,因为我已经尝试了很多方法来解决这个问题,但似乎在任何地方都找不到类似的问题被提及/解决。谢谢。只是一个想法:我建议尝试使用视频转换器将视频转换,例如,(从mp4)再次转换为mp4,以确保您将音频(和视频)转换为Android支持的标准,如上所列。另一个随机猜测,请在完成侦听器中完成活动之前调用videoview.stopPlayback:) 编辑:对话框出现在您的完成侦听器之前还是之后?(1,-1007)错误表示: 媒体错误未知-“文件或网络相关操作错误。” 这可能来自损坏的文件 另请参见android.media.MediaPlayer.OnErrorListener的javadoc#onError
令人惊叹的!工作得很好。除了调整分辨率外,我使用了mp4 H.264的所有默认设置。非常感谢你的意见。我可能应该在OP中提到,但我已经试过了。多亏了Mathias Lin上面的建议,我现在明白了。
@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