16

Android で MediaPlayer を使用してオーディオをストリーミングしています。

デバイスが Wi-Fi からセル ネットワークに、またはその逆に移動すると、MediaPlayer は再生を停止します。

通常、バッファには数秒分のオーディオがあるため、再生がすぐに停止することはありません。

理想的には、中断のない再生のためにストリームを取得したいのですが、その方法がわかりません。

サーバーでホストされている mp3 ファイルとライブ ブロードキャスト ストリームの両方を使用しています。

4

4 に答える 4

14

サーバーの観点からは、ネットワーク モードを WiFi から 3G に (その逆も) 変更すると、別の IP (クライアント) からのまったく新しい接続のように見えます。

ダウンロード元のサーバーがストリームの追跡 (秒数、シーケンス、バイトなど) をサポートしていない場合 (メディア サーバーとは異なります)、mp3 の提供を 0 バイトから再度開始する必要があります。

URL が標準の HTTP サーバーにある MP3 ファイルを指している場合、状況は予想どおりです。メディア ストリーミング サーバーの使用を検討する必要があります。そうすれば、選択したときにダウンロード/ストリーミングを再開できます。接続が失われている/再開されているという意図を受け取った場合、URL にファイル位置 (たとえば、秒 = 19、バイト = 57365) を指定して、メディアプレーヤーを新しい URL に向けることができます。

これが役立つかどうかはわかりませんが、「舞台裏」で何が起こっているかを少し説明しています。

于 2012-08-07T13:40:31.253 に答える
1

setOnCompletionListenerと を設定してみてくださいsetOnErrorListener。ライブ ストリームが完了したら、prepareAsync()もう一度電話をかけるだけで、ストリームが再び開始されます。独自のメディア フレームワークを作成しない限り、これを適切に行う方法はありません。

またonError()MEDIA_ERROR_SERVER_DIEDあなたは再び発砲することができますprepareAsync()

MediaPlayer が Error または Complete になることがわかります。これらの両方のコールバックを処理する場合、スムーズな再生のために、ネットワークの変更時にストリームを再起動することしかできません..Androidのものはかなり粗雑であるため、カスタムのメディアフレームワークが必要になります。

于 2012-08-07T14:50:22.980 に答える
0

メディアプレーヤーが停止している理由はわかりませんが、onReceiveメソッドを追加し、メソッドに「mp.start()」を追加して再生を再開することができます。
Android、データのポーリング中にネットワークの変更(GPRSからWi-Fiへ、またはその逆)を処理する方法

別のクラスを作成する必要があるかもしれませんが、ネットワークを切り替えるときに呼び出されるメソッドを作成する方法を説明する必要があります。その時点で、「mp.start()」を呼び出して再生を再開できます(mpがMediaPlayerであると想定)。
もちろん、これは、MediaPlayerが一時停止されているのは、ネットワークを切り替えているときだけであり、停止されていないことを前提としています。

于 2012-08-01T18:09:49.873 に答える
0

Vidar が言うように、接続の再確立は、サーバーによって新しい接続として扱われます。

オーディオ再生をダブル バッファリングする必要があるようです。これは、カスタム メディア プレーヤーを構築することを意味します。これにより、継続的なオーディオを提供できますが、ライブ ストリームを聞いているときはスキップされます。

MP3ファイルの方が再生位置がわかるので少し楽です。ライブストリームではそうではありません。

gmaster が言うように、ネットワークが変更されたときに新しい接続を確立するには、ブロードキャスト レシーバーが必要です。以前のネットワーク接続からのオーディオ バッファは、新しい接続を介して新しいオーディオ バッファが満たされる間、再生を継続する必要があります。

新しいバッファが再生を開始するのに十分なほどいっぱいになったら、再生を切り替えることができます。ファイルをストリーミングしている場合、サーバーのサポートと少しの作業で、現在の再生位置データが両方のバッファーにあることを確認し、シームレスに切り替えることができます。

ライブ ストリーム バッファは同期できないため、切り替え時に必然的に不具合が発生します。

バッファーを大きくすると、接続の確立に時間がかかる場合にオーディオのドロップアウトが回避されますが、再生の最初の開始が遅れます。MP3 ファイルをダウンロードすると、リアルタイムよりも速くバッファーがいっぱいになりますが、ライブ ストリームはリアルタイムでバッファーされます。

Chris.Jenkins は、役立つ MediaPlayer メソッドについて言及していますが、これにはカスタム フレームワークが必要なようだと指摘しています。彼が言及した条件などを処理する必要があります。

綺麗に撮れたらここに載せます。私は質問を開いたままにしておくつもりです。

于 2012-08-07T23:11:17.350 に答える