質問

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()で正しい値を返すことがわかりました。これを反映するために修正された質問。

役に立ちましたか?

解決

これについてできることは何もありません。ストリームが読み取られるまで、ストリームの詳細はわかりません。フォーマットに応じて、ストリームの前面近くに正しい情報、ヒント、または何もない場合があります。

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

(これがバグであり、修正されたとしても、そのような修正は数百万の既存のデバイスに展開されないため、現在の動作に固執します。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top