从 ExoPlayer 获取 403 响应代码错误
Posted
技术标签:
【中文标题】从 ExoPlayer 获取 403 响应代码错误【英文标题】:Getting a 403 response code error from ExoPlayer 【发布时间】:2018-12-29 18:11:02 【问题描述】:我从 google DAI url 随机收到 403 错误。有时一整天都没有问题。有时会在开始播放时发生,有时会在播放几分钟后发生。这发生在直播和全屏直播上。 以下是日志:
onLoadError() called with: eventTime = [com.google.android.exoplayer2.analytics.AnalyticsListener$EventTime@c2e375b], loadEventInfo = [com.google.android.exoplayer2.source.MediaSourceEventListener$LoadEventInfo@fed7bf8], mediaLoadData = [com.google.android.exoplayer2.source.MediaSourceEventListener$MediaLoadData@db388d1], error = [com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403], wasCanceled = [false]
ExoAnalyticsLogger: onLoadStarted() called with: eventTime = [com.google.android.exoplayer2.analytics.AnalyticsListener$EventTime@bc71f36], loadEventInfo = [com.google.android.exoplayer2.source.MediaSourceEventListener$LoadEventInfo@90eee37], mediaLoadData = [com.google.android.exoplayer2.source.MediaSourceEventListener$MediaLoadData@d7a5fa4]
ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:211)
at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:147)
at com.google.android.exoplayer2.source.hls.HlsMediaChunk.loadMedia(HlsMediaChunk.java:267)
at com.google.android.exoplayer2.source.hls.HlsMediaChunk.load(HlsMediaChunk.java:214)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:320)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
ExoAnalyticsLogger: onLoadError() called with: eventTime = [com.google.android.exoplayer2.analytics.AnalyticsListener$EventTime@65df8c2], loadEventInfo = [com.google.android.exoplayer2.source.MediaSourceEventListener$LoadEventInfo@fda36d3], mediaLoadData = [com.google.android.exoplayer2.source.MediaSourceEventListener$MediaLoadData@6cfd210], error = [com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403], wasCanceled = [false]
Encountered error
com.google.android.exoplayer2.ExoPlaybackException
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:349)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:211)
at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:147)
at com.google.android.exoplayer2.source.hls.HlsMediaChunk.loadMedia(HlsMediaChunk.java:267)
at com.google.android.exoplayer2.source.hls.HlsMediaChunk.load(HlsMediaChunk.java:214)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:320)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
【问题讨论】:
【参考方案1】:根据此thread,cookie 处理程序/管理器可能存在问题。确保您在 okhttp
服务类和 exo 播放器活动中使用相同的 CookieHandler
。您也可以查看此link 以获取更多参考。
【讨论】:
我根本没有使用 cookie 处理程序,服务器的 url 也没有使用 cookie 发送,我什至尝试使用与评论中提到的相同示例的 cookie 处理程序,它没有t 解决问题,我得到了空值。其次,作为你提到的例子,我的问题是不同的,在这种情况下,我的直播连续运行了几个小时,甚至几天,但突然它显示了这个异常,当我重新启动它时,它开始像往常一样工作。 这方面有什么更新吗?我也被这个 403 问题困扰。我正在尝试播放 HLS 直播频道。 HD 频道可以正常播放,但 SD 频道播放 1 分钟,然后卡住并出现 403 错误。 这有什么更新吗?我也有同样的问题。会播放 10 秒,然后在尝试提高比特率时冻结。 这有什么更新吗?我也有同样的问题响应码 403【参考方案2】:查看this 关于存储 cookie 的线程。假设您使用 Akamai url 进行流式传输,该解决方案为我解决了 403 问题。
注意你需要实现
com.squareup.okhttp3:okhttp-urlconnection:4.6.0
com.google.android.exoplayer:extension-okhttp:2.11.4
获取 JavaNetCookieJar 和 OkHttpDataSourceFactory。
【讨论】:
以上是关于从 ExoPlayer 获取 403 响应代码错误的主要内容,如果未能解决你的问题,请参考以下文章
当我使用谷歌你管 API 获取搜索结果时,它给出 403 错误