如何解决 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.

如果您还想尝试下面的步骤。

  1. 向 link (https://clips.vorwaerts-gmbh.de/VfE_html5.mp4) 发出 http 请求并存储收到的 cookie。
  2. 当您想播放视频时,将收到的 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 的原因。