如何解决 MediaPlayer 错误 "Can't play this video"
How to solve MediaPlayer Error "Can't play this video"
我的 videoview 有问题。
当我尝试在我的 API-27 模拟器上播放来自特定 URL 的视频时 Android 显示消息对话框
Can't play this video
这就是我在 Logcat
中得到的
source returned error -1010, 0 retries left
initFromDataSource, source has no track!
Failed to init from data source!
MediaPlayerNative: error (1, -2147483648)
MediaPlayer: Error (1,-2147483648)
这是我使用 videoview 的代码
mVideoView = findViewById(R.id.videoView);
mMediaController = new MediaController(this);
mVideoView.setVideoPath("https://clips.vorwaerts-gmbh.de/VfE_html5.mp4");
mVideoView.requestFocus();
initListeners();
initListeners 方法
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mVideoView.setMediaController(mMediaController);
mVideoView.setBackground(null);
mMediaController.setAnchorView(mVideoView);
mMediaController.show();
mVideoView.start();
}
});
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mVideoView.setBackground(getDrawable(R.drawable.webinar_photo_preview));
}
});
我在 api23、api24 上测试了我的 videoview 功能,一切听起来都不错。
有人可以告诉我我做错了什么吗?
EDITED: 现在我发现错误也出现在 api24
看起来您的代码运行良好,问题可能在于您没有使用在请求时发送到浏览器的 cookie。
In simple terms this video is not for direct access via code.
如果您还想尝试下面的步骤。
- 向 link (https://clips.vorwaerts-gmbh.de/VfE_html5.mp4) 发出 http 请求并存储收到的 cookie。
- 当您想播放视频时,将收到的 cookie 用于您的下一个请求。
Note - If you want to use cookies to play video it can be done via ExoPlayer(https://github.com/google/ExoPlayer).
问题出在 VideoView,setVideoPath 仅使用较小的文件大小 (1 - 2 MB) 设置视频,如果文件大小较大,则 MediaPlayer 会崩溃 MEDIA_ERROR_SYSTEM (-2147483648)
-(low-level 系统错误),read in documentation。这就是我开始使用 exoPlayer 的原因。
我的 videoview 有问题。
当我尝试在我的 API-27 模拟器上播放来自特定 URL 的视频时 Android 显示消息对话框
Can't play this video
这就是我在 Logcat
中得到的source returned error -1010, 0 retries left
initFromDataSource, source has no track!
Failed to init from data source!
MediaPlayerNative: error (1, -2147483648)
MediaPlayer: Error (1,-2147483648)
这是我使用 videoview 的代码
mVideoView = findViewById(R.id.videoView);
mMediaController = new MediaController(this);
mVideoView.setVideoPath("https://clips.vorwaerts-gmbh.de/VfE_html5.mp4");
mVideoView.requestFocus();
initListeners();
initListeners 方法
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mVideoView.setMediaController(mMediaController);
mVideoView.setBackground(null);
mMediaController.setAnchorView(mVideoView);
mMediaController.show();
mVideoView.start();
}
});
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mVideoView.setBackground(getDrawable(R.drawable.webinar_photo_preview));
}
});
我在 api23、api24 上测试了我的 videoview 功能,一切听起来都不错。 有人可以告诉我我做错了什么吗?
EDITED: 现在我发现错误也出现在 api24
看起来您的代码运行良好,问题可能在于您没有使用在请求时发送到浏览器的 cookie。
In simple terms this video is not for direct access via code.
如果您还想尝试下面的步骤。
- 向 link (https://clips.vorwaerts-gmbh.de/VfE_html5.mp4) 发出 http 请求并存储收到的 cookie。
- 当您想播放视频时,将收到的 cookie 用于您的下一个请求。
Note - If you want to use cookies to play video it can be done via ExoPlayer(https://github.com/google/ExoPlayer).
问题出在 VideoView,setVideoPath 仅使用较小的文件大小 (1 - 2 MB) 设置视频,如果文件大小较大,则 MediaPlayer 会崩溃 MEDIA_ERROR_SYSTEM (-2147483648)
-(low-level 系统错误),read in documentation。这就是我开始使用 exoPlayer 的原因。