2010-06-16 17 views
5

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

अब, समस्या मैं है:

मैं वीडियो शुरू से ही शुरू करने के लिए नहीं करना चाहते हैं, लेकिन एक बाद की स्थिति से। इसलिए मैं एक खोज करता हूं (16867)। चूंकि seekTo एसिंक्रोनस है, इसलिए मैं onieekCompleteListener के ऑनसेक कॉम्प्ले में mediaplayer (player.start()) की प्रारंभ कॉल डालता हूं।

हालांकि मुझे लगता है कि अजीब व्यवहार यह है कि मैं कुछ मिलीसेक्स के लिए शुरुआत से वीडियो को देख/सुन सकता हूं, इससे पहले कि मैं वास्तव में उस स्थिति में कूदता/कूदता हूं। लेकिन - दूसरी तरफ - लॉग आउटपुट मैं प्लेयर से पहले कॉल करता हूं। स्टार्ट सही स्थिति 16867 देता है, जहां मैंने खोज की थी।

नीचे प्रासंगिक कोड खंड है, पूरा वर्ग http://pastebin.com/jqAAFsuX

private void playVideo(String url) { 
    try { 
     btnVideoPause.setEnabled(false); 
     if (player==null) { 
      player=new MediaPlayer(); 
      player.setScreenOnWhilePlaying(true); 
     } 
     else { 
      player.stop(); 
      player.reset(); 
     } 
     url = "/sdcard/myapp/main/videos/main.mp4"; // <--- just for test purposes hardcoded here now  
     player.setDataSource(url); 
     player.setDisplay(holder); 
     player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     player.setOnCompletionListener(this); 
     player.setOnPreparedListener(this); 

     player.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { 
      public void onSeekComplete(MediaPlayer mediaPlayer) { 
        Log.d("APP", "current pos... "+ player.getCurrentPosition()); 
        player.start();   // <------------------ start video on seek completed 
        player.setOnSeekCompleteListener(null); 
       } 
     });    
     player.prepareAsync(); 
    } 
    catch (Throwable t) { 
     Log.e(TAG, "Exception in btnVideoPause prep", t); 
    } 
} 

public void onPrepared(MediaPlayer mediaplayer) { 
    width=player.getVideoWidth(); 
    height=player.getVideoHeight(); 
    if (width!=0 && height!=0) { 
     holder.setFixedSize(width, height); 
     progressBar.setProgress(0); 
     progressBar.setMax(player.getDuration()); 
     player.seekTo(16867);     // <------------------ seeking to position 
    } 
    btnVideoPause.setEnabled(true); 
} 
+0

बीटीडब्लू पर एक बग रिपोर्ट दायर की: मुझे अपने मीडिया प्लेयर + सतह कार्यान्वयन के बजाय एसडीके के वीडियो व्यू का उपयोग करते समय अनुभव होता है। मैं यह भी सोच रहा हूं कि क्यों VideoView एक setOnSeekCompletionListener प्रदान नहीं करता है, हालांकि यह एक तलाश प्रदान करता है। क्या एसिंक भी तलाश नहीं है? –

+0

http://code.google.com/p/android/issues/detail?id=9135 –

+0

पर एक बग रिपोर्ट दायर की गई है अभी तक कामकाज के साथ कोई भाग्य? मुझे 2 साल पता है लेकिन अब यह मेरे ऐप – Slartibartfast

उत्तर

4

(मैं नेक्सस वन/2.2 StageFright पर हूँ) के बाद से मैं भी से कोई जवाब प्राप्त नहीं किया है पर है एंड्रॉइड डेवलपर सूची और वेब पर समान समस्याएं मिलीं, मैंने निष्कर्ष निकाला कि यह एक बग है। मैंने http://code.google.com/p/android/issues/detail?id=9135

+1

2 साल पर मुझे अभी भी यह समस्या है - डर्न! – Slartibartfast

+3

@Slartibartfast lol एंड्रॉइड प्रोग्रामिंग में आपका स्वागत है। Google बस डेवलपर्स की परवाह नहीं करता है। – StackOverflowed

संबंधित मुद्दे