【问题标题】:"Can't play this video" Error using URL with VideoView and Mediacontroller“无法播放此视频”错误使用带有 VideoView 和 Mediacontroller 的 URL
【发布时间】:2020-01-23 16:10:47
【问题描述】:

所以我正在尝试做作业,但老师给了我关于此的 0 信息。有一个如何从 res/raw 文件夹中的文件播放视频的示例,但没有关于在线 URL 的内容。请帮帮我,我只想要一个简单的播放器。我会附上一张图片,详细说明发生了什么。我还将添加代码,因为它不是那么多,我真的不知道可能出了什么问题。错误是这样说的:

W/MediaPlayer:无法打开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打开时它仍然给我同样的错误。 “无法播放此视频”。另一方面,我得到了一堆新错误:

E/MediaPlayerNative:错误 (1, -2147483648)
E/MediaPlayer:错误 (1,-2147483648)
D/VideoView:错误:1,-2147483648

我对这项技术并不是很熟悉,老师也没有给我们任何关于代码中应该或不应该在什么地方工作的概念。只是在 Android Studio 中使用 VideoView 播放的本地存储视频的一个示例......当应用于在线 URL 时不起作用。

【问题讨论】:

    标签: android android-videoview mediacontroller


    【解决方案1】:

    所以我最终自己修复了它。问题不在代码中,任何想知道我最终使用这种简单格式的人:

        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 本身。我有一台运行 Android 9 的 Pixel 1,但由于某种原因无法正常工作。我已经用 Oreo 安装了 Nexus 5,它运行完美。

    【讨论】:

    • 是的,你是对的,AVD 模拟了一个设备.. 但它不是真正的设备
    • 问题不是模拟器,而是 Android 9 上的 HTTP。它应该是 HTTPS 或 network-security-config 中明确允许的。
    【解决方案2】:

    这可能对你有帮助

    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 需要一些时间来下载..所以当您开始播放视频时它可能处于不一致的状态。

    希望这会有所帮助。

    【讨论】:

    • 嘿,谢谢,我已经编辑了主要问题以合并代码。它仍然给我同样的错误,任何帮助将不胜感激。
    • 好的,让我检查一下.. 将在我得到解决方案后更新。谢谢。朋友,它在我的设备上完美播放。将在 1 小时内与您分享我的代码
    • 你是在真机还是模拟器上测试,请确认你是否在manifest中给了internet权限?
    • 小更新 .. 在 onPreparedListener 准备好播放视频之前设置 MediaController ... ..
    • 我会尽快检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多