web-dev-qa-db-ja.com

VideoViewによるシームレスなビデオループ

ビデオを生のリソースとして取得し、ビデオを開始してループする次のコードがありますが、クリップの終わりに来て、クリップを再び開始すると、ビデオがシームレスにループする必要があります一瞬ちらつきますが、これはアプリには本当にできません。

public class Example extends Activity {
    VideoView vv;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        vv = (VideoView)findViewById(R.id.VideoView01);

        //Video Loop
        vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer mp) {
                vv.start(); //need to make transition seamless.
            }
        });

        Uri uri = Uri.parse("Android.resource://com.example/"
                + R.raw.video);

        vv.setVideoURI(uri);
        vv.requestFocus();    
        vv.start();
    }
}

クリップの長さはわずか22秒ですが、シームレスに作成されているため、遅延なく作業できます。

75
SamRowley

これを試してみてください100%動作します


videoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
    }
});
202
PravinDodia

これが数年後に役立つかどうかはわかりませんが、私は

vv.start();
vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() {

 @Override 
  public void onCompletion(MediaPlayer mediaPlayer) {   
    vv.start();
  }
});

そして、それはシームレスなループを持っています

5
lexodus k

一時停止は、基礎となるMediaPlayerがバッファを更新するためのものです。それにかかる時間は多くの要因に依存しますが、その多くは制御できません(CPUの速度、オンボードフラッシュストレージの速度など)。

制御できるのは、リソースからファイルシステムにビデオを取得することです。リソースはAPK(Zipファイル)に保存されるため、この方法でビデオを抽出するにはおそらく余分な時間がかかります。

VideoViewから切り替えて、2つのSurfaceViewを交互に使用してMediaPlayersを使用する必要がある場合があります。終了すると、新しいプレーヤーに切り替えることができます。私はこれを試したことがないので、結果がどうなるかはわかりません。ただし、この手法は、あるクリップから別のクリップに移行するためのオーディオ再生に頻繁に使用されることを知っています。

5
CommonsWare

少し遅れましたが、次を使用できない理由はありますか?

MediaPlayer.setLooping(true);
1
J J

ここに答えの友人がいます。setOnCompletionListenerクラスでvv.resumeを使用する必要があります

[ https://stackoverflow.com/a/27606389/3414469] [1]

0
ylmzekrm1223

これに対する答えは、ビデオからオーディオを削除し、それを.oggファイルをシームレスにループし、音声なしのビデオを使用してループループすることができます。これは機能します。

0
SamRowley