3

どうやら例外はスローされないため、ストリーミング オーディオ コンテンツのバッファリング中にエラーを認識できます。たとえば、ルーターを切断すると、アプリはずっとバッファリングを試み続けます。再接続すると、バッファリングが完了し、1 分以上切断された後でも続行されます。

したがって、問題は、それを問題と見なさずに、ユーザーをそこに長時間座らせることができないことです。Android メディア プレーヤーのバッファリングの問題を検出する適切な方法は何ですか?

タイムアウトにタイマーを使用することを考えています。おそらく 15 秒から始めます (最悪のケースである 5kbps 接続をテストしたプロキシを使用して、6 ~ 10 秒で再生を開始できたので、15 秒が妥当なタイムアウト時間になると思います)。これは良い計画のように聞こえますか? その場合、バッファの試行ごとに新しいタイマーを作成する必要がありますか、それとも再生サービスの有効期間を通じて同じタイマーを維持する必要がありますか?

だから基本的に私は2つの質問をしています:

1) バッファに問題があるかどうかを検出する適切な方法は何ですか? 私が見落としているリスナーはいますか?もちろん、テストで起動しない MediaPlayer.OnErrorListener を試しました。私の結論は、バッファリング エラーを検出するにはタイムアウトが必要であるということです。

2) 1 番目の質問が正しければ、タイマーを使用する適切な方法は何ですか? バッファ試行ごとに作成するか、同じものを再利用しますか? EDITまた、タイマー onBufferUpdate を再起動する (またはキャンセルして新しいものを作成する) 必要がありますか? onBufferUpdate リスナーを使用すると、一部のデータが戻ってくることを知っているはずなので、それでタイマーをリセットする必要があります。

4

4 に答える 4

4

あなたの質問から、主な目的は、バッファリングが原因でプレーヤーが停止した場合に状況を検出し、その状況に対して何らかのアクションを実行することであると理解しています。この状況に対処するには、次の 2 つのリスナーが同じことを特定するのに役立つと思います。

MediaPlayer.onBufferingUpdateバッファリングのタイムリーな進行状況を提供します。したがって、同じpercent値を持つ 2 つのコールバックがある場合、これはバッファリングの可能性を示している可能性があります。

MediaPlayer.onInfoListenerあなたにとって興味深いかもしれないいくつかの特定のイベントを持つ別のリスナーがあります。このリスナーで が の場合、whatプレーヤーMEDIA_INFO_BUFFERING_STARTがバッファリング、つまりロジックのトリガーのために再生を一時停止していることを示します。同様にMEDIA_INFO_BUFFERING_END、バッファがいっぱいになった後の再生の再開を示します。

于 2013-03-23T01:04:26.507 に答える
1

あなたはこの記事を見るべきです。mediaplayer には、エラーを取得するための ErrorListener があります。

http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html

于 2013-03-18T16:46:57.503 に答える
0

準備中のバッファリングのために、一定の間隔で player.reset() を呼び出す独自のタイマーを設定する必要があります。これにより、プレーヤーは初期状態に戻ります。

準備後 (プレイ中) のバッファリングについては、getPosition() を監視する必要があります。最大値より遅れている場合は、reset() を呼び出します。これにより、再生の経験値のしきい値を設定できます。接続失敗だけでなく、途切れ途切れの接続にも対応します。

最善の解決策は、MediaPlayer を使用しないことです。代わりに公開 VLC 派生物を使用してください。MP には内部化されたプライベートな設計制限が多すぎて、恐ろしい回避策が必要になります (例: コーデックを追加できない)。この場合、RTFM は誤った希望を与えます。

非常に堅実な Android アプリを実行している場合を除き、Android API に依存しないでください。一部のオープンソースの代替品はより適切にサポートされており、それには正当な理由があります。

(本当にやんちゃな olly jolly 満足のいく編集上の暴言は削除されました)

于 2015-01-28T01:46:44.377 に答える