7

MediaPlayerHTTP URL からストリーミングするときに回復力を得るのに苦労しています。

ファイルの再生を開始した後、接続を切断すると (機内モードなど)、 がMediaPlayer#OnErrorListener生成されwhat=1, extra=-17、その後すぐにwhat=-38, extra=0.

これが何を意味するかについて API で確認できるドキュメントはありませんが、extra は「通常は実装依存」です。私は HTC Hero を使っています (まあ、それは T-Mobile UK の G2 Touch です)。

他の人も同じ値を取得しますか?これらの値を、接続が失われたことを意味するものとして捉えても安全ですか?

接続が再表示されたときに再開するにはどうすればよいですか? (現在のシークを設定に保存し、5 秒ごとに再試行しますか?)

デバイスがバッファリングしているものの再生を開始することを決定したことをどのように知ることができますか? (ポーリング以外にisPlaying()) コールバックはありますか?

さらに、何onBufferingUpdateが提供されるのか完全にはわかりません。私は 40 分のポッドキャストを使用していますMP3 (64kbps bitrate)- バッファリングは 1%、2%、3% になります。約 30 分をシークすると 75% が表示され、最初に戻って 5% に戻ると、キャッシュされているものをおおよそ表示する以外に、このコールバックのポイントは何ですか?

最後に、ストリーミングされたものを にパイプする方法はありますMP3か?

4

4 に答える 4

5

この同様のスタックオーバーフローの質問から取得

私も MEDIA_INFO_BUFFERING_START および MEDIA_INFO_BUFFERING_END フックに失望しています...残念です。

Pandora アプリをチェックアウトしましたが、バッファリング インジケーターが表示されません。音楽がバッファリングのために中断されると、何も起こらなかったかのようにそこに留まり、UI はまだ再生されているように見えます。したがって、MediaPlayer を使用している場合、トラックが一時的にバッファリングのために一時停止されているかどうかを判断することは不可能であるという結論に達しました。

ただし、MEDIA_INFO_BUFFERING_START と MEDIA_INFO_BUFFERING_END という、いくつかの MediaPlayer 定数が使用できることに気付きました。しかし、それらは API レベル 9+ でのみ利用可能であり、ドキュメントにはそれらについて何も記載されていません。OnInfoListener で使用できると仮定しています。

がっかりしましたが、少なくとも今は車輪を回すのをやめて、別のことに移ることができます。

于 2011-02-16T16:15:41.557 に答える
1

ネットワークの損失/利得を聞くべきだと思います。ご覧ください: 3G または WiFi ネットワークの復元を検出する

于 2011-02-03T14:16:01.740 に答える
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 ヘッダーに Range が含まれていない 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";

楽しみ!

于 2013-01-22T00:46:20.833 に答える