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 ...但它应该支持常见的重定向)。
我有一个 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 ...但它应该支持常见的重定向)。