android - 在 android 媒体播放器上流式传输音频时出现异常,在 okhttp 缓冲上

标签 android android-mediaplayer audio-streaming okhttp

E/JavaBinder: *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
    java.lang.ArrayIndexOutOfBoundsException: length=8192; index=8192
     at com.android.okhttp.okio.Buffer.writeByte(Buffer.java:973)
     at com.android.okhttp.internal.Platform.concatLengthPrefixed(Platform.java:212)
     at com.android.okhttp.internal.Platform.configureTlsExtensions(Platform.java:116)
     at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:187)
     at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:26)
     at android.media.MediaHTTPConnection.seekTo(MediaHTTPConnection.java:212)
     at android.media.MediaHTTPConnection.getSize(MediaHTTPConnection.java:374)
     at android.media.IMediaHTTPConnection$Stub.onTransact(IMediaHTTPConnection.java:81)
     at android.os.Binder.execTransact(Binder.java:731)

此异常发生在 Android 媒体播放器流式传输和缓冲上,播放器卡在同一位置一段不寻常的时间,有时甚至永远卡在同一位置。

最佳答案

我认为你无能为力。这是been reported致 okhttp 开发者。但是,正如他们指出的,错误出在 android 中包含的 okhttp 内部打包版本。 square 的外部开发版本没有任何错误,因此他们理所当然地将这个问题视为非问题关闭。

该错误已为 reported to google ,但近两年来似乎没有采取任何行动。

也许您可以在项目中包含来自 square 的 okhttp 的较新上游版本,并以某种方式告诉 MediaHTTPConnection 使用 HttpURLConnectionokhttp3 实现>。有OkUrlFactory可以与java的URL.setURLStreamHandlerFactory一起使用。然而,这已被弃用,并且覆盖内置 url 流处理程序逻辑可能不是一个好主意。

事实上,它已从最新版本的 okhttp 中删除。删除它的开发人员确实制作了 ObsoleteUrlFactory.java您可以将其复制/粘贴到您的项目中并用作:

OkHttpClient okHttpClient = new OkHttpClient();
URL.setURLStreamHandlerFactory(new ObsoleteUrlFactory(okHttpClient));

关于android - 在 android 媒体播放器上流式传输音频时出现异常,在 okhttp 缓冲上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538210/

相关文章:

android - 如何制作 Android 传感器 SensorEvent 对象的副本

Titanium 中的 Android 视频控制位置

java - Mediaplayer 响应第二次点击暂停

audio - 更改PCM数据中吉他弹拨的持续时间

php - HTML5 音频流

java - 如何更改背景图片?

android - Android 中上下文菜单的项目分隔符

android - 访问 mObservables 时对 RecyclerView 适配器进行单元测试会引发 NullPointerException

android - 重置媒体播放器后,播放按钮不起作用

c++ - 如何听Windows当前正在播放的声音?