如何解决ExoPlayer2 无法在某些小米设备中播放视频
我正在尝试在启动画面中播放视频,我使用 ExoPlayer 播放视频,我播放视频以使用 ExoPlayer2 for android 9 和 android 10 它工作,但是当我尝试在 android Xiomi device Api 25 中播放视频时,它给出以下错误,它在许多设备上成功播放视频,但某些小米设备不播放视频,并出现黑屏并出现以下错误,我该如何解决这个问题?
构建 Gradle 文件
实现'com.google.android.exoplayer:exoplayer:2.8.4'
E/MediaCodec: Codec reported err 0x80001019,actionCode 0,while in state 6
E/ExoPlayerImplInternal: Internal runtime error.
java.lang.IllegalStateException
at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:2570)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1033)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:582)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
E/ExoPlayerImplInternal: Stop failed.
java.lang.IllegalStateException
at android.media.MediaCodec.native_stop(Native Method)
at android.media.MediaCodec.stop(MediaCodec.java:2007)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.releaseCodec(MediaCodecRenderer.java:527)
at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.releaseCodec(MediaCodecVideoRenderer.java:477)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:483)
at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:365)
at com.google.android.exoplayer2.BaseRenderer.disable(BaseRenderer.java:153)
at com.google.android.exoplayer2.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:972)
at com.google.android.exoplayer2.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:768)
at com.google.android.exoplayer2.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:731)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:353)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
ExoPlayer 代码
private fun exoPlayer() {
val player: SimpleExoPlayer = ExoPlayerFactory.newSimpleInstance(
DefaultRenderersFactory(this),DefaultTrackSelector(),DefaultLoadControl())
player_splash.setPlayer(player)
val dataSourceFactory: DataSource.Factory = DefaultDataSourceFactory(this,Util.getUserAgent(this,"yourApplicationName"))
val firstSource: MediaSource = ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(RawResourceDataSource.buildRawResourceUri(R.raw.benim_sehrim_intro))
player.prepare(firstSource)
player.playWhenReady = true
player.addListener(object : DefaultEventListener() {
override fun onTimelineChanged(timeline: Timeline,manifest: Any?,reason: Int) {
super.onTimelineChanged(timeline,manifest,reason)
}
override fun onTracksChanged(trackGroups: TrackGroupArray,trackSelections: TrackSelectionArray) {
super.onTracksChanged(trackGroups,trackSelections)
}
override fun onLoadingChanged(isLoading: Boolean) {
super.onLoadingChanged(isLoading)
}
override fun onPlayerStateChanged(playWhenReady: Boolean,playbackState: Int) {
when (playbackState) {
Player.STATE_BUFFERING -> {
}
Player.STATE_ENDED -> {
checkHolding()
player.stop()
player.seekTo(0)
}
Player.STATE_IDLE -> {
}
Player.STATE_READY -> {
}
else -> {
}
}
}
override fun onRepeatModeChanged(repeatMode: Int) {
super.onRepeatModeChanged(repeatMode)
}
override fun onShuffleModeEnabledChanged(shuffleModeEnabled: Boolean) {
super.onShuffleModeEnabledChanged(shuffleModeEnabled)
}
override fun onPlayerError(error: ExoPlaybackException) {
super.onPlayerError(error)
}
override fun onPositionDiscontinuity(reason: Int) {
super.onPositionDiscontinuity(reason)
}
override fun onPlaybackParametersChanged(playbackParameters: PlaybackParameters) {
super.onPlaybackParametersChanged(playbackParameters)
}
override fun onSeekProcessed() {
super.onSeekProcessed()
}
override fun onTimelineChanged(timeline: Timeline,manifest: Any?) {
super.onTimelineChanged(timeline,manifest)
}
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。