10

私のアプリは、Nexus 5 を除くすべてのデバイスで正常にオーディオをストリーミングしています。Nexus 5 では、MediaPlayer がランダムに再生を停止します。ラウドネス ( http://developer.android.com/about/versions/android-4.4.html#Multimedia )に関する変更が4.4 で何か壊れているかどうかはわかりません。

他の誰かがこの問題に気づいていますか? 一部のユーザーに発生しているようですが、自分の Nexus 5 では再現できません。

更新:そのため、Nexus 5 で問題を再現することができました。実際には、クリップの終わり近くで発生しているようです。クリップの残り約 1 ~ 5 秒で、OnCompletionListener.onCompletion()MediaPlayer によってメソッドが呼び出されます。これは Nexus 5 でのみ発生しており、一部のクリップでランダムに発生しています。ほぼ 30% の確率で再現できます。クリップが早く終了した場合、戻ってクリップをもう一度再生しようとすると、2 回目のクリップ全体の再生が終了することに注意してください。Android 4.4 がリリースされたばかりですが、誰かが助けてくれることを願っています! ありがとう。

更新: Android に対してバグを報告しました: https://code.google.com/p/android/issues/detail?id=62304

4

3 に答える 3

5

わかりました、私は解決策を見つけました。これが皆さんが現在直面している問題かどうかはわかりませんが、私の場合は修正されます。基本的に、Android 4.4+ には多くの新しい電源管理機能が導入されており、そのうちの 1 つに、画面がオフのときに CPU をシャットダウンする機能が含まれています。Android ドキュメントからの引用:

Android システムはデバイスのスリープ中にバッテリーを節約しようとするため、CPU や WiFi ハードウェアなど、電話の不要な機能をシャットダウンしようとします。ただし、サービスが音楽を再生またはストリーミングしている場合は、システムが再生に干渉しないようにする必要があります。

したがって、CPU ウェイク ロックがないと、MediaPlayer は適切にストリーミングする機能を失い、クリップが完了する前に再生を停止します。これに対する解決策は簡単です。MediaPlayer に PARTIAL_WAKE_LOCK を追加します。 Androidで文書化されているように

mMediaPlayer = new MediaPlayer();
// ... other initialization here ...
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

私たちの多くは、ドキュメントでこれを確認できなかったと思います。見た覚えがないので、追加されたのかもしれません。とにかく、これでみんなの問題が解決することを願っています!

于 2013-12-21T00:17:04.783 に答える
1

最近、ほぼ同じ問題に遭遇しました。MediaPlayer上と下では完全に動作しAndroid 4.3ますが、同じビデオを再生できませんAndroid 4.4

ライブラリに切り替えることに決めたのでvitamio、私のアプリは 4.4 でも動作するようになりました。vitamio APIMediaPlayerのものと同じなので、移行は非常に簡単でした。

ただし、このソリューションにはまだいくつかの欠点があります。

  • 個人の開発者でない場合は、ライセンスを購入する必要があります
  • アプリのサイズが最大 11 メガバイト増加します
于 2013-12-20T14:49:37.827 に答える