ローカルのプロキシサーバーを実行するオーディオストリーミングアプリがあります。ローカルプロキシサーバは、インターネットストリーミングソースへのhttp接続を行い、ストリーミングデータをローカルに取得し、バッファリングする。 、 - はその後、内部のアプリでは、私が(1.5 ... 4.0 Androidデバイスと異なるOSのバージョンをたっぷり使って)アンドロイドメディアプレーヤー - 範囲リクエストを無効にする方法(Nexus 7でオーディオストリーミングが途切れている)
mediaPlayer.setDataSource(...); // the url of the local proxy server
すべてが大丈夫だった方法を使用して、ローカルプロキシサーバーに接続するためのMediaPlayerを使用しますNexus 7がリリースされるまで
Nexus 7では、メディアプレーヤーがローカルプロキシサーバーからのソースの再生を拒否します。
ログを調べたとき、MediaPlayerが範囲要求を内部的に使用しているようです。 私のローカルプロキシサーバーはそれを処理しません。 HTTP/1.0 200 OKとそのデータを返します。 はしかし、メディアプレーヤーは、そのようにしないと例外がスローされます:http仕様によると
Caused by: libcore.io.ErrnoException
?:??: W/?(?): [ 07-18 00:08:35.333 4962: 5149 E/radiobee ]
?:??: W/?(?): : sendto failed: ECONNRESET (Connection reset by peer)
?:??: W/?(?): at libcore.io.Posix.sendtoBytes(Native Method)
?:??: W/?(?): at libcore.io.Posix.sendto(Posix.java:146)
?:??: W/?(?): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:
?:??: W/?(?): at libcore.io.IoBridge.sendto(IoBridge.java:473)
We requested a content range, but server didn't support that. (responded with 200)
を、サーバはHTTP/1.0ではなく1.1で応答した場合、クライアントは範囲要求を発射してはならない(1.0
また、サーバが範囲要求をサポートしていない場合は、200 OKで応答するとうまくいくはずですが(これは私がやっていることです)、MediaPlayerの実装ですNexus 7ではそれが好きではありません。
私は、このスレッドを見てみました: HTTP: How should I respond to "Range: bytes=" when Range is unsupported?
、彼らは200 OKとの応答が十分でなければならないが、残念ながらそれは助けにはならないと主張しています。
これがJelly Beanの問題か、具体的なNexus 7実装の問題であるかどうかはわかりませんが、まだ解決しなければならない問題です。
もう一度、同じアプリを使用して、他の多くのAndroid搭載端末では範囲のリクエストはありません。何らかの理由で、これらの範囲リクエストがNexus 7で発生しています(これは他のAndroid搭載端末でも発生する可能性がありますが、これまでのところこれまで私には起こりませんでした)。
MediaPlayerの範囲要求を無効にする方法はありますか?
誰も私のプロキシサーバーのロジック(正確には、この範囲の要求を受け取った場合、返す必要がありますか?
「HTTP/1.0 206 OK \ r \ n部分コンテンツ\ r \ n \ r \ n」のようなものを返さなければならないようですが、おそらく部分的なコンテンツの最後に値があるはずです。これが何であるべきかを確かめてください。
あなたのご協力をお待ちしております。
おかげ..
ゼリービーンの問題(Nexus 7だけではない)が確認できます。最近、Ice Cream SandwichからJelly Beanに更新されたさまざまなNexus端末でも発生しました。 誰かがJelly Beanのローカルプロキシサーバーに対してMediaPlayerを使用できましたか? – user1512464
この問題も(Jelly Bean上で)確認できます。ただし、プロキシは使用していません。メディアプレーヤーを使用してオーディオストリームに直接アクセスします。 – pulse00
これは、Jelly Beanの回帰のようです。私はbugtrackerに関する問題を作成しました:https://code.google.com/p/android/issues/detail?id=35790 – pulse00