【问题标题】:ERROR_CODE_IO_BAD_HTTP_STATUS exoplayer androidERROR_CODE_IO_BAD_HTTP_STATUS exoplayer android
【发布时间】:2021-09-03 05:56:12
【问题描述】:

我有一个http://x.x.x:80/movie/HqZqUt3I7B/QhGtliO2V4/xxxx.mp4?play_token=6nsYOBGUKj 形式的网址,我想从中获取视频并将其显示在 exoplayer 中。通过将该 url 放入 VLC 网络流中,我确认该 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的视频。

【问题讨论】:

    标签: android kotlin exoplayer exoplayer2.x


    【解决方案1】:

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

    【讨论】:

    • 如何设置allowCrossProtocolRedirects?我看过有关此的各种帖子,他们将 MediaSource 设置为 player.prepare(mediaSource) 已弃用。他们也在做类似val mediaSource = ExtractorMediaSource() 之类的事情,在我的情况下,它无法找到课程ExtractorMediaSource
    • 遵循 url 重定向实际上可以解决问题。谢谢大佬!
    • @FerozKhan,您能否告诉我们为了使其正常工作而进行了哪些更改?更改是在应用程序中还是在后端进行的?
    • @AnasAzeem 已经很久了,但我记得我将 Retrofit.Builder().addConverterFactory(GsonConverterFactory.create(gson)) 更改为 Retrofit.Builder().addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create(gson)) 。并添加了 ScalarsConverterFactory 的依赖项,即implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'。然后只需使用该改造客户端向您被重定向的 url 发送一个获取请求。然后作为响应,您将收到response.raw().request().url().toString()
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2015-12-25
    • 2016-08-20
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多