MediaPlayerのループ再生について

1,208 views
Skip to first unread message

marimo

unread,
Aug 7, 2012, 8:18:28 AM8/7/12
to android-g...@googlegroups.com
いつもお世話になっております。岩橋と申します。

現在、MediaPlayerでの再生を検討しております。

1  MediaPlayer mp = new MediaPlayer();
2  mp.setDataSource(mContext, mUri); 
3  mp.setLooping(false);
4  mp.prepare();
5  mp.start();


ループ再生をしたくないため4行目でfalseを設定しているのですが
oggファイル(だけではないかもしれませんが)については、ループ再生をしてしまいます。

調べてみたところ、ファイルのヘッダ情報で
 ANDROID_LOOP=true
となっているものは、こちらを優先してループ再生を行うような記事を見ました。

このようなファイルでも
ループさせないようアプリから制御する方法はありますでしょうか。

ご存知の方がいればご教示頂けると助かります。

MORIHIRO

unread,
Aug 7, 2012, 1:03:10 PM8/7/12
to android-g...@googlegroups.com
不細工ですけど、getDuration()で取得した時間のタイマーを
セットして自前でstopするしかないような気がします。
(pause/resumeで再設定も必要です。。。)

2012年8月7日火曜日 21時18分28秒 UTC+9 marimo:

marimo

unread,
Aug 7, 2012, 7:24:52 PM8/7/12
to android-g...@googlegroups.com
ご連絡頂きありがとうございます。

やはり自分でチェックでしょうか。確かに。。

現在、定期的にプログレスバーで進捗率を出しているため
そこでチェックして、次回の更新がgetDurationを超える場合は
pauseで止め、seekToでgetDurationの値を設定しています。
(再度0から再生が可能なように、終わったようにする)


まだ検証段階なレベルだからだと思いますが・・
このようにすると、
 ・直後、再生ボタン押下で再び再生した場合にタイミングによって再生してくれないときがある
  (この場合2回押下すると動く)
 ・タイミングがずれるとストップかける前にループするのではないか

というような動きになるのではないかと考えてます。。

また、再度スタートから再生するためpause・seekToでごまかしてますが、
MediaPlayerのライフサイクルに反しているため
oggのようなファイルのLoopをfalseに設定させることができない場合は
現在、以下の2点を検討しております。

・pause・seekToで無理に持っていくのではなく、
 ライフサイクルPlaybackCompletedに進められる方法はないか

・ヘッダ情報を取得し、ANDROID_LOOP=trueのコンテンツだと判断できないか
 →その場合のみ上記の方法で強制的に止め、通常のコンテンツはonComplesionを待つようにしたい
  ANDROID_LOOP=trueのコンテンツのほうが少ないと思いますのでリスクを減らしたい。


プログレスバーで進捗を表示するため、手でも変更が可能です。
そのため、よりリスクが少ない形で進めればと思っております。

ループしちゃうのは諦める、とも思いますが、、
まずは、止める方向で何かアドバイス頂けると助かります。

みなさまよろしくお願いします。

2012年8月8日水曜日 2時03分10秒 UTC+9 MORIHIRO:

wara

unread,
Aug 8, 2012, 3:44:24 AM8/8/12
to android-g...@googlegroups.com
setOnCompletionListenerを使用するのは如何でしょうか?
このリスナーで再生終了時の通知をキャッチできるので
その中でpause();すれば止まるような気がします。

marimo

unread,
Aug 8, 2012, 7:25:10 AM8/8/12
to android-g...@googlegroups.com
ご連絡ありがとうございます。

通常のコンテンツの場合はsetOnCompletionListenerを使用し
onCompletionを受けて問題ありません。

ヘッダにANDROID_LOOP=trueが設定されているコンテンツ(私が見たのはogg)の場合
再生が完了しても、onCompletionが呼ばれずにリピート再生してしまうのです。

onCompletionが呼ばれるような方法があればいいのですが・・。


2012年8月8日水曜日 16時44分24秒 UTC+9 wara:
setOnCompletionListenerを使用するのは如何でしょうか?
このリスナーで再生終了時の通知をキャッチできるので
その中でpause();すれば止まるような気がします。
Reply all
Reply to author
Forward
0 new messages