ビデオを生のリソースとして取得し、ビデオを開始してループする次のコードがありますが、クリップの終わりに来て、クリップを再び開始すると、ビデオがシームレスにループする必要があります一瞬ちらつきますが、これはアプリには本当にできません。
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秒ですが、シームレスに作成されているため、遅延なく作業できます。
これを試してみてください100%動作します
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(true);
}
});
これが数年後に役立つかどうかはわかりませんが、私は
vv.start();
vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
vv.start();
}
});
そして、それはシームレスなループを持っています
一時停止は、基礎となるMediaPlayer
がバッファを更新するためのものです。それにかかる時間は多くの要因に依存しますが、その多くは制御できません(CPUの速度、オンボードフラッシュストレージの速度など)。
制御できるのは、リソースからファイルシステムにビデオを取得することです。リソースはAPK(Zipファイル)に保存されるため、この方法でビデオを抽出するにはおそらく余分な時間がかかります。
VideoView
から切り替えて、2つのSurfaceView
を交互に使用してMediaPlayers
を使用する必要がある場合があります。終了すると、新しいプレーヤーに切り替えることができます。私はこれを試したことがないので、結果がどうなるかはわかりません。ただし、この手法は、あるクリップから別のクリップに移行するためのオーディオ再生に頻繁に使用されることを知っています。
少し遅れましたが、次を使用できない理由はありますか?
MediaPlayer.setLooping(true);
ここに答えの友人がいます。setOnCompletionListener
クラスでvv.resume
を使用する必要があります
これに対する答えは、ビデオからオーディオを削除し、それを.ogg
ファイルをシームレスにループし、音声なしのビデオを使用してループループすることができます。これは機能します。