मैं डेटा स्रोत को एक अलग फ़ाइल में सेट करने के लिए ऑनकंप्लिशन लिस्टर लागू करके वापस ठीक से वीडियो चला सकता हूं। वहां कोई समस्या नहीं है। मैं रीसेट() और तैयार() बस ठीक कहता हूं।एंड्रॉइड: मीडियाप्लेयर गैपलेस या सीमलेस वीडियो प्लेइंग
जो मैं समझने में सक्षम नहीं हूं, डेटा स्रोत परिवर्तन और नए वीडियो के बीच 1-2 सेकंड अंतराल स्क्रीन फ़्लिकर से छुटकारा पाने का तरीका है। अंतराल एक ब्लैक स्क्रीन दिखाता है, और मुझे इसके चारों ओर जाने का कोई रास्ता नहीं मिला है।
मैंने किसी छवि को मूल दृश्य की पृष्ठभूमि सेट करने का प्रयास किया है, लेकिन यह इसे बाईपास करने का प्रबंधन करता है। भले ही SurfaceView पारदर्शी है (जो डिफ़ॉल्ट रूप से है।) मैंने एक ही समय में कई वीडियो फ़ाइलों को चलाने की कोशिश की है, और जब कोई समाप्त होता है और दूसरा शुरू होता है तो मध्यस्थता के प्रदर्शन को स्विच करना भी होता है।
आखिरी चीज़ जो मैंने कोशिश की थी, उस पृष्ठभूमि में दूसरा दृश्य होना था जो वीडियो अस्थायी रूप से दिखाता है जबकि वीडियो "तैयारी" करता है और वीडियो को शुरू करने के लिए तैयार होने पर इसे हटा देता है। वह भी निर्बाध नहीं था।
क्या उस अंतर से छुटकारा पाने का कोई तरीका है। एक लूप में एक वीडियो चलाने से आश्चर्यजनक रूप से काम करता है और मैं अपवाद के साथ वही करता हूं जो कि मैं एक अलग वीडियो को देखने के बजाए एक ही वीडियो को देख रहा हूं। बहुत ज्यादा यह पता लगाने की कैसे "अंतर" बिना लगातार वीडियो खेलने के लिए, मैं 'की कोशिश कर बर्बाद समय
main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:background="@drawable/background"
android:layout_height="fill_parent">
<SurfaceView
android:id="@+id/surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">
</SurfaceView>
</FrameLayout>
Player.java
public class Player extends Activity implements
OnCompletionListener, MediaPlayer.OnPreparedListener, SurfaceHolder.Callback {
private MediaPlayer player;
private SurfaceView surface;
private SurfaceHolder holder;
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.main);
surface = (SurfaceView)findViewById(R.id.surface);
holder = surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void onCompletion(MediaPlayer arg0) {
File clip = new File(Environment.getExternalStorageDirectory(),"file2.mp4");
playVideo(clip.getAbsolutePath());
}
public void onPrepared(MediaPlayer mediaplayer) {
holder.setFixedSize(player.getVideoWidth(), player.getVideoHeight());
player.start();
}
private void playVideo(String url) {
try {
File clip = new File(Environment.getExternalStorageDirectory(),"file1.mp4");
if (player == null) {
player = new MediaPlayer();
player.setScreenOnWhilePlaying(true);
}
else {
player.stop();
player.reset();
}
player.setDataSource(url);
player.setDisplay(holder);
player.setOnPreparedListener(this);
player.prepare();
player.setOnCompletionListener(this);
}
catch (Throwable t) {
Log.e("ERROR", "Exception Error", t);
}
}
हालांकि इसे कुछ समय पहले पोस्ट किया गया है, मुझे एक ही समस्या का सामना करना पड़ रहा है। वीडियोव्यू का उपयोग करने के साथ भी, वीडियो के बीच स्विच करते समय भी मुझे एक अंतर होता है। क्या इसे हल करने का कोई और तरीका है? – dulys