ERROR_CODE_IO_BAD_HTTP_STATUS exoplayer android

ERROR_CODE_IO_BAD_HTTP_STATUS exoplayer android

我有一个 url 形式的 http://x.x.x:80/movie/HqZqUt3I7B/QhGtliO2V4/xxxx.mp4?play_token=6nsYOBGUKj,我想从那里获取视频并在 exoplayer 中显示它。我通过将 url 放入 VLC 网络流中确认 url 可以正常工作。但同样的 url 在 exoplayer 中不起作用。这是我的 exoplayer 初始化代码。

private fun initializePlayer() {
    if (url.isNotEmpty()){
        player = SimpleExoPlayer.Builder(this).build()
        binding.videoView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FILL
        player.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT
        binding.videoView.player = player
        val mediaItem: MediaItem = MediaItem.fromUri(url)
        Log.d("testurl", url)
        player.setMediaItem(mediaItem)
        player.playWhenReady = playWhenReady
        player.seekTo(currentWindow, playbackPosition)
        player.prepare()
        player.addListener(this)
    } else {
        Toast.makeText(this, "Unable to play the video!", Toast.LENGTH_SHORT).show()
    }
}

我还实施了 OnPlayerError 侦听器来捕获错误。

override fun onPlayerError(error: PlaybackException) {
    super.onPlayerError(error)
    if (error.message!=null) {
        Log.d("testmediaerror", "${error.errorCodeName} ${error.message}")
    } else {
        Log.d("testmediaerror", error.errorCodeName)
    }
}

因此,使用此代码 if 中的块 OnPlayerError 被执行,并将错误显示为 D/testmediaerror: ERROR_CODE_IO_BAD_HTTP_STATUS Source error。还需要提到的是,我的服务器正在返回状态代码为 302.

的视频

向服务器请求文件,然后遵循 HTTP 302 重定向 - 这将在获取文件时导致实际的 URL 和 HTTP 200。在 Exoplayer 中,还有一个配置 allowCrossProtocolRedirects(它通常不允许从 HTTPS 重定向到 HTTP ...但它应该支持常见的重定向)。