वीडियो दृश्य के साथ निर्बाध वीडियो लूप


88

मेरे पास कच्चे संसाधन के रूप में वीडियो लेने के लिए निम्नलिखित कोड है, वीडियो शुरू करें और इसे लूप करें लेकिन मुझे वीडियो को मूल रूप से लूप करने की आवश्यकता है जब यह क्लिप के अंत में आता है और क्लिप को फिर से शुरू करता है, जिससे संक्रमण कम होता है एक दूसरे विभाजन के लिए झिलमिलाहट, जो मैं वास्तव में अपने ऐप के लिए नहीं कर सकता।

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 सेकंड लंबा है, लेकिन सहज होने के लिए बनाया गया था, इसलिए बिना देरी के काम करना संभव है।

जवाबों:


229

यह कोशिश करो कि यह 100% काम करेगा


VideoView videoView;<--- इसे विधि के बाहर लिखें या फिर इसे अंतिम चर घोषित करें।

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

फिर भी हर लूप के लिए
रिफ़रर

@ पेंसिलें यह स्थानीय वीडियो के लिए सरल लूपिंग है, यदि आप इसे यूआरएल के लिए उपयोग करना चाहते हैं और इसे बफर करना चाहते हैं, तो आपको अन्य तर्क को लागू करना होगा।
प्रवीणदोदिया

सभी को FYI करें, यह स्थानीय वीडियो के लिए भी काम नहीं करता है। यदि आप लगातार ध्वनि के साथ एक वीडियो चलाते हैं, तो आप छोरों के बीच में ठहराव सुन सकते हैं।
एडीसन १

1
@PravinDodia यह mp4 वीडियो (फ़ाइल) के लिए काम करता है लेकिन m3u8 के साथ काम नहीं कर रहा है। कृपया मुझे एक समाधान सुझाएं यदि आपके पास m3u8 फ़ाइल के बारे में कोई आइडिया है।
मारोती

2
@PravinDodia जानकारी के लिए धन्यवाद। हां, मैंने स्ट्रीम वीडियो का उपयोग किया है। मैंने MediaPlayer.OnCompletionListener () के बजाय vv.start () का उपयोग किया है।
मारोती

7

यकीन नहीं होता कि यह वर्षों बाद मदद करता है, लेकिन मैंने इस्तेमाल किया

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

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

और इसमें एक निर्बाध लूप है


5

विराम MediaPlayerअपने बफ़र्स को ताज़ा करने के लिए अंतर्निहित है। कितना समय लगेगा यह कई कारकों पर निर्भर करेगा, जिनमें से कई आपके नियंत्रण से बाहर हैं (उदाहरण के लिए, सीपीयू की गति, ऑन-बोर्ड फ्लैश स्टोरेज की गति)।

एक जिसे आप नियंत्रित कर सकते हैं वह है आपके वीडियो को संसाधन से बाहर और फाइलसिस्टम में लाना। एपीके में संसाधन संग्रहीत किए जाते हैं, जो एक ज़िप फ़ाइल है, इसलिए वीडियो को इस तरह से निकालना संभवतः अतिरिक्त समय लगता है।

आपको दो से बारी-बारी से VideoViewउपयोग करने की आवश्यकता है , उनके बीच बारी-बारी से एक - एक खेल रहा है जबकि दूसरा तैयारी कर रहा है, इसलिए जब एक खेल समाप्त होता है तो आप नए खिलाड़ी पर स्विच कर सकते हैं। मैंने यह कोशिश नहीं की है, और इसलिए मुझे नहीं पता कि क्या प्रभाव हो सकते हैं। हालाँकि, मुझे पता है कि इस तकनीक का उपयोग ऑडियो प्लेबैक के लिए अक्सर एक क्लिप से दूसरे क्लिप में संक्रमण के लिए किया जाता है।SurfaceViewMediaPlayers


अगर मुझे सही तरीके से याद है, तो मीडियाप्लेयर तैयार होने पर सतह दृश्य पर पकड़ रखते हैं, इसलिए जब आप इसका उपयोग कर रहे होते हैं तो आप एक और मीडियापेयर तैयार नहीं कर सकते।
एडिसन


1

थोड़ी देर, लेकिन किसी भी कारण से जो आप निम्नलिखित का उपयोग नहीं कर सकते हैं?

MediaPlayer.setLooping(true);

1
यह एक लंबे समय से पहले था, लेकिन इसके साथ ही मुझे लगता है कि जब लूप को बुलाया गया था, तो वीडियो में ध्यान देने योग्य ठहराव था।
सैमरावली

1

यदि आप कोटलिन का उपयोग कर रहे हैं

 videoView.setOnPreparedListener(object : MediaPlayer.OnPreparedListener {
                override fun onPrepared(mp: MediaPlayer?) {
                    //Start Playback
                    videoView.start()
                    //Loop Video
                    mp!!.isLooping = true;
                    Log.i(TAG, "Video Started");
                }
            });

एरो एक्सप्रेशन शॉर्ट फॉर्म का उपयोग करना

videoView.setOnPreparedListener { mp ->
            //Start Playback
            videoView.start()
            //Loop Video
            mp!!.isLooping = true;
            Log.i(TAG, "Video Started");
        };

0

इसका उत्तर वीडियो से ऑडियो को निकालना है और उसे एक .oggफाइल में बदलना है, जिसे मूल रूप से लूप किया जा सकता है और फिर ऑडियो के बिना वीडियो को लूप राउंड और इस काम में उपयोग किया जा सकता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.