Android Mediaplayer:getDuration()はprepare()後に0を返します
-
27-10-2019 - |
質問
HoneycombでMediaplayerを使用していますが、onprepared()関数でHLS(HTTPライブストリーミング)ビデオの期間を取得できません。
もしも getDuration()
後に呼ばれます prepare()
, 、それは0を返します:
public void onPrepared(MediaPlayer mp) {
// getduration returns 0
mediaPlayer.start();
Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}
ただし、ビデオは再生を開始します。
もしも getDuration()
で呼ばれます onVideoSizeChanged()
それは正しい値を返します、
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
// returns the correct value
Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}
なぜ getDuration()
で働く onVideoSizeChanged()
しかし、ではありません onPrepared()
?
編集: :最初は、getDuration()はまったく機能しないと考えましたが、onvideosizeChanged()で正しい値を返すことがわかりました。これを反映するために修正された質問。
解決
これについてできることは何もありません。ストリームが読み取られるまで、ストリームの詳細はわかりません。フォーマットに応じて、ストリームの前面近くに正しい情報、ヒント、または何もない場合があります。
ビデオサイズの変更リスナーは常に呼ばれるため、期間を取得するにはコードを再構築する必要があります(利用可能な場合)。
(これがバグであり、修正されたとしても、そのような修正は数百万の既存のデバイスに展開されないため、現在の動作に固執します。)
所属していません StackOverflow