मैं एक कस्टम वीडियो प्लेयर लागू कर रहा हूं क्योंकि मुझे कस्टम वीडियो नियंत्रण की आवश्यकता है। मेरे पास केवल एक गतिविधि वाला ऐप है, जो स्टार्टअप पर तुरंत एक वीडियो खेलना शुरू कर देगा।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);
}
बीटीडब्लू पर एक बग रिपोर्ट दायर की: मुझे अपने मीडिया प्लेयर + सतह कार्यान्वयन के बजाय एसडीके के वीडियो व्यू का उपयोग करते समय अनुभव होता है। मैं यह भी सोच रहा हूं कि क्यों VideoView एक setOnSeekCompletionListener प्रदान नहीं करता है, हालांकि यह एक तलाश प्रदान करता है। क्या एसिंक भी तलाश नहीं है? –
http://code.google.com/p/android/issues/detail?id=9135 –
पर एक बग रिपोर्ट दायर की गई है अभी तक कामकाज के साथ कोई भाग्य? मुझे 2 साल पता है लेकिन अब यह मेरे ऐप – Slartibartfast