2011-12-02 9 views
0

私はMediaPlayerをHoneycombで使用しており、onPrepared()関数でHLS(httpライブストリーミング)ビデオの再生時間を取得できません。Android MediaPlayer:prepare()の後にgetDuration()が返される

getDuration()prepare()後に呼び出された場合は、0を返します。

public void onPrepared(MediaPlayer mp) { 
    // getduration returns 0 
    mediaPlayer.start(); 
    Log.d(TAG, "duration: " + mediaPlayer.getDuration()); 
} 

しかし、動画の再生が始まります。

getDuration()た場合は、それが

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
    // returns the correct value 
    Log.d(TAG, "duration: " + mediaPlayer.getDuration()); 
} 

はなぜonVideoSizeChanged()ではなくonPrepared()getDuration()作業を行い、正しい値を返しますonVideoSizeChanged()に呼ばれているのですか?

:最初はgetDuration()はまったく動作しませんでしたが、onVideoSizeChanged()で正しい値を返すことがわかりました。これを反映する修正された質問。

答えて

1

これについて何もできません。ストリームの詳細は、ストリームが読み取られるまで認識されません。フォーマットによっては、ストリームの先頭付近に正しい情報があるかもしれません。ヒントか何もありません。

ビデオサイズ変更リスナーは常に呼び出されるため、期間を取得するためにコードを再構成する必要があります(利用可能な場合)。便利な説明のための

(これはバグとそれが固定されている場合でも、あなたは現在の動作で立ち往生しているので、そのような修正は、既存のデバイスの数百万人に配布されない場合でも。)

+0

ありがとう! – jules

+0

mp.getDuration()がスレッドで呼び出された場合、このスレッドはそれぞれ100msを呼び出していましたか?私は、この関数はゼロではないが、正しいものではないという点について考える。どうして ? – phongvan

関連する問題