"Can't play this video" 将 URL 与 VideoView 和 Mediacontroller 一起使用时出错
"Can't play this video" Error using URL with VideoView and Mediacontroller
所以我正在努力做作业,但老师给了我 0 条关于此的信息。有一个如何从 res/raw 文件夹中的文件播放视频的示例,但没有关于在线 URL 的内容。请帮助我,我只想要一个简单的播放器。我将附上一张图片,详细说明发生了什么。我还将添加代码,因为代码不多,而且我真的不知道哪里出了问题。错误是这样说的:
W/MediaPlayer: Couldn't open http://techslides.com/...
java.io.FileNotFoundException: No content provider: http://techslides.com/demos/sample-videos/small.mp4
这是代码:
VideoView video;
String url = "http://techslides.com/demos/sample-videos/small.mp4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video = (VideoView) findViewById(R.id.videoView);
MediaController mc = new MediaController(this);
mc.setAnchorView(mc);
video.setVideoPath(url);
video.setMediaController(mc);
video.start();
}
最后我要补充一点,我尝试了几个不同的 URL,包括一些 https 和一些 http。
编辑:
所以,我尝试修复它,结果看起来像这样:
video = (VideoView) findViewById(R.id.videoView);
final MediaController mc = new MediaController(this);
mc.setAnchorView(mc);
video.setVideoPath(url);
video.setMediaController(mc);
video.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp){
video.start();
}
});
但是打开emu还是报同样的错误。 "Can't play this video"。另一方面,我遇到了一堆新错误:
E/MediaPlayerNative: error (1, -2147483648)
E/MediaPlayer: Error (1,-2147483648)
D/VideoView: Error: 1,-2147483648
我不是很熟悉这项技术,而且老师也没有给我们任何关于代码中应该或不应该包含什么才能让它工作的概念。只是在 Android Studio 中使用 VideoView 播放的本地存储视频的示例...应用于在线 URL 时不起作用。
这可能对你有帮助
VideoView simpleVideoView = (VideoView) findViewById(R.id.simpleVideoView); // initiate a video view
// perform set on prepared listener event on video view
simpleVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// do something when video is ready to play, you want to start playing video here
}
});
尝试仅在完全准备好播放时才开始播放视频。因为 mp4 需要一些时间来下载..所以当你开始视频时它可能处于不一致的状态。
希望这会有所帮助。
所以我最终自己修复了它。问题不在代码中,对于任何想知道我最终使用这种简单格式的人来说:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video = (VideoView) findViewById(R.id.video);
Uri uri = Uri.parse("http://techslides.com/demos/sample-videos/small.mp4");
video.setMediaController(new MediaController(this));
video.setVideoURI(uri);
video.requestFocus();
video.start();
}
问题出在 AVD 本身。我有一台 Pixel 1 运行 Android 9,但由于某种原因无法使用。我已经安装了带有 Oreo 的 Nexus 5,它运行完美。
所以我正在努力做作业,但老师给了我 0 条关于此的信息。有一个如何从 res/raw 文件夹中的文件播放视频的示例,但没有关于在线 URL 的内容。请帮助我,我只想要一个简单的播放器。我将附上一张图片,详细说明发生了什么。我还将添加代码,因为代码不多,而且我真的不知道哪里出了问题。错误是这样说的:
W/MediaPlayer: Couldn't open http://techslides.com/...
java.io.FileNotFoundException: No content provider: http://techslides.com/demos/sample-videos/small.mp4
这是代码:
VideoView video;
String url = "http://techslides.com/demos/sample-videos/small.mp4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video = (VideoView) findViewById(R.id.videoView);
MediaController mc = new MediaController(this);
mc.setAnchorView(mc);
video.setVideoPath(url);
video.setMediaController(mc);
video.start();
}
最后我要补充一点,我尝试了几个不同的 URL,包括一些 https 和一些 http。
编辑: 所以,我尝试修复它,结果看起来像这样:
video = (VideoView) findViewById(R.id.videoView);
final MediaController mc = new MediaController(this);
mc.setAnchorView(mc);
video.setVideoPath(url);
video.setMediaController(mc);
video.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp){
video.start();
}
});
但是打开emu还是报同样的错误。 "Can't play this video"。另一方面,我遇到了一堆新错误:
E/MediaPlayerNative: error (1, -2147483648)
E/MediaPlayer: Error (1,-2147483648)
D/VideoView: Error: 1,-2147483648
我不是很熟悉这项技术,而且老师也没有给我们任何关于代码中应该或不应该包含什么才能让它工作的概念。只是在 Android Studio 中使用 VideoView 播放的本地存储视频的示例...应用于在线 URL 时不起作用。
这可能对你有帮助
VideoView simpleVideoView = (VideoView) findViewById(R.id.simpleVideoView); // initiate a video view
// perform set on prepared listener event on video view
simpleVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// do something when video is ready to play, you want to start playing video here
}
});
尝试仅在完全准备好播放时才开始播放视频。因为 mp4 需要一些时间来下载..所以当你开始视频时它可能处于不一致的状态。
希望这会有所帮助。
所以我最终自己修复了它。问题不在代码中,对于任何想知道我最终使用这种简单格式的人来说:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video = (VideoView) findViewById(R.id.video);
Uri uri = Uri.parse("http://techslides.com/demos/sample-videos/small.mp4");
video.setMediaController(new MediaController(this));
video.setVideoURI(uri);
video.requestFocus();
video.start();
}
问题出在 AVD 本身。我有一台 Pixel 1 运行 Android 9,但由于某种原因无法使用。我已经安装了带有 Oreo 的 Nexus 5,它运行完美。