2011-08-16 25 views
3

MediaPlayerは、最初にローカルファイルにキャッシュされるmp3音楽をストリームするために使用されており、MediaPlayerはlocalserver経由でストリームします。ソニーエリクソンXperia X10がAndroid 2.3.3にアップデートされるまでは、1.6年のAndroid端末で約1.5年の間、かなりうまくいきました。突然、そのデバイスだけで、Android 2.3.3ではオーディオストリーミングは機能しなくなりました。Android MediaPlayer「ピアによって接続がリセットされました」

MediaPlayerエラー(100,0)が発生することがありますが、たいていはMediaPlayer.prepareAsync()メソッドにスタックします。 調査は、その問題は、ラインを指す

“java.net.SocketException: Connection reset by peer” 

で起こる示す:ところで正常例外

前に2回実行される

outstream.write(buffer, skipFirst, length); 

コードはとても非常に複雑です私がここでそれを提供するのは難しいですが、必要に応じてさらに詳しい情報を返すことができます。

MediaPlayerは、コンテンツを入力し始めた瞬間に何らかの理由で接続が切断されます。また、時々(1/20)MediaPlayerが音楽を演奏するのに奇妙に思われるものがあります。

アイデア?

答えて

0

私はいくつかのコードスニペットとデバッグログが必要だと思います。私たちのためにそれを手配してください。それとも、あなたが私のバージョンを渡すことができれば、APKの商業的なアイデアを盗むことはしません。そして、私は他の携帯電話でapkをテストすることができます。

ヨハン、ソニーエリクソンの開発者サポート

+0

@Johan - まったく同じ問題があります。あなたに連絡するにはどうすればよいですか? –

+0

私はかなりの時間オフラインになっています。ごめんなさい。 [email protected]を試してみてください –

2

プロキシが正しくレンジHTTPヘッダを解析していることを確認します。 Xperiaデバイスは、より一般的なRange: bytes=10000-ではなく、Range: bytes=10000-20000の形式で範囲リクエストを送信します。

これは本当に問題があるのか​​どうかわかりませんが、新しいXperiaデバイスの再生が固定されていて、古いデバイスのMediaPlayerが非常に似ていると思います。

0

シークまたはスキップした場合、または接続が失われてMediaPlayerがプロキシサーバーに再接続し続ける場合は、クライアントから要求および範囲(int)を取得した後でステータス206でこの応答を送信する必要があります。

String headers += "HTTP/1.1 206 Partial Content\r\n"; 
headers += "Content-Type: audio/mpeg\r\n"; 
headers += "Accept-Ranges: bytes\r\n"; 
headers += "Content-Length: " + (fileSize-range) + "\r\n"; 
headers += "Content-Range: bytes "+range + "-" + fileSize + "/*\r\n"; 
headers += "\r\n"; 

そして、あなたは、HTTPヘッダに範囲が含まれていないのMediaPlayerからのリクエストを受信したとき、あなたのレスポンスヘッダは次のようになります。この場合には、新しいストリームのファイルを要求している:

String headers = "HTTP/1.1 200 OK\r\n"; 
headers += "Content-Type: audio/mpeg\r\n"; 
headers += "Accept-Ranges: bytes\r\n"; 
headers += "Content-Length: " + fileSize + "\r\n"; 
headers += "\r\n"; 

お楽しみください!

関連する問題