2013-02-26 115 views
5

के साथ एक और थ्रेड और समस्या में एंड्रॉइड वीडियो देखें मैं एंड्रॉइड वीडियो व्यू में स्ट्रीम वीडियो फॉर्म यूआरएल चाहता हूं। मैं प्राप्त करने के लिए मेरी जरूरत .मेरा कोडएंड्रॉइड वीडियो देखें एंड्रॉइड 2.1

public class VideoViewDemo extends Activity { 

private static final String TAG = "VideoViewDemo"; 
private String current; 

/** 
* TODO: Set the path variable to a streaming video URL or a local media 
* file path. 
*/ 
private String path = "http://www.boisestatefootball.com/sites/default/files/videos/original/01%20-%20coach%20pete%20bio_4.mp4"; 
private VideoView mVideoView; 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.videoview); 
    mVideoView = (VideoView) findViewById(R.id.surface_view); 
    runOnUiThread(new Runnable() { 
     public void run() { 
      playVideo(); 
     } 
    }); 
} 

private void playVideo() { 
    try { 
     // final String path = path; 
     Log.v(TAG, "path: " + path); 
     if (path == null || path.length() == 0) { 
      Toast.makeText(VideoViewDemo.this, "File URL/path is empty", 
        Toast.LENGTH_LONG).show(); 

     } else { 
      // If the path has not changed, just start the media player 
      if (path.equals(current) && mVideoView != null) { 
       mVideoView.start(); 
       mVideoView.requestFocus(); 
       return; 
      } 
      current = path; 
      mVideoView.setVideoPath(getDataSource(path)); 
      mVideoView.start(); 
      mVideoView.setMediaController(new MediaController(this)); 
      mVideoView.requestFocus(); 

     } 
    } catch (Exception e) { 
     Log.e(TAG, "error: " + e.getMessage(), e); 
     if (mVideoView != null) { 
      mVideoView.stopPlayback(); 
     } 
    } 
} 

private String getDataSource(String path) throws IOException { 
    if (!URLUtil.isNetworkUrl(path)) { 
     return path; 
    } else { 
     URL url = new URL(path); 
     URLConnection cn = url.openConnection(); 
     cn.connect(); 
     InputStream stream = cn.getInputStream(); 
     if (stream == null) 
      throw new RuntimeException("stream is null"); 
     File temp = File.createTempFile("mediaplayertmp", "dat"); 
     temp.deleteOnExit(); 
     String tempPath = temp.getAbsolutePath(); 
     FileOutputStream out = new FileOutputStream(temp); 
     byte buf[] = new byte[128]; 
     do { 
      int numread = stream.read(buf); 
      if (numread <= 0) 
       break; 
      out.write(buf, 0, numread); 
     } while (true); 
     try { 
      stream.close(); 
     } catch (IOException ex) { 
      Log.e(TAG, "error: " + ex.getMessage(), ex); 
     } 
     return tempPath; 
    } 
} 
} 

यहाँ है तुम वहाँ धागा मेरे पर से किसी भी तरह से इस संभाल करने .is देख सकते हैं मैं वीडियो स्ट्रीम करने के uithread उपयोग कर रहा हूँ कि में नमूना एपीआई कोड और किया छोटे संशोधन का उपयोग

मैं क्या करने की कोशिश की

new Thered(new Runnable() { 
     public void run() { 
      playVideo(); 
     } 
    }).start(); 

है लेकिन यह

और यह भी विफल जबकि Android 2.2 पहले कोड रन में चल रहा है और यह error(-38,0) से पता चलता मैं एन एंड्रॉइड 2.1 यह त्रुटि क्या है ?? मैंने This File चेक किया लेकिन यह नहीं पता कि यह क्या त्रुटि है ??

क्या कोई मुझे गाइड कर सकता है ??

+0

एक बटन 'प्ले वीडियो' कहें, और इसके क्लिक फ़ंक्शन में अपना रननेबल थ्रेड कोड रखें। OnCreate() फ़ंक्शन में अपना स्वयं का धागा गड़बड़ हो सकता है अगर उचित रूप से संभाल नहीं किया जाता है क्योंकि गतिविधि निर्माण को हमेशा ठीक करना पड़ता है। एंड्रॉइड एमुलेटर या फोन में आपने जिस तरह से कोशिश की? –

+0

@RahulSundar मैंने फोन पर कोशिश की। मैं बटन का उपयोग नहीं करना चाहता था। जब मैं गतिविधि में प्रवेश करता हूं तो मैं वीडियो को सीधे खेलना चाहता हूं। यही कारण है कि मैंने किसी भी बटन – edwin

+0

ठीक नहीं किया। बस यह जांचने के लिए कि क्या सब कुछ थ्रेड के साथ ठीक काम करता है, इसे एक बटन से लॉन्च करें। फिर ऑनक्रेट() फ़ंक्शन में इसका उपयोग करें। यह सुनिश्चित करने के लिए कि गतिविधि निर्माण के पूरा होने के बाद वीडियो प्रतिपादन शुरू होता है, पर्याप्त देरी नींद (5 सेकंड) दें और जांचें कि सब कुछ ठीक काम करता है या नहीं। –

उत्तर

2

आपको पूरे वीडियो को लाने और फ़ाइल सिस्टम में सहेजने की आवश्यकता नहीं है, फिर इसे चलाएं .. आपके द्वारा उल्लिखित वीडियो में 32 एमबी आकार है, और नेटवर्क के माध्यम से लाने में इतना समय लगेगा। इसके बजाय आप वीडियोव्यू के लिए सीधा लिंक दे सकते हैं, यह वीडियो को प्रगतिशील रूप से लाएगा/बफर करेगा और इसे चलाएगा। आप यूआई थ्रेड में वीडियो डेटा लाने की कोशिश कर रहे थे, जो स्वीकार्य नहीं है। यहां सही कोड है, आप इसे देख सकते हैं।

public class VideoViewDemo extends Activity { 

private static final String TAG = "VideoViewDemo"; 
private String current; 

/** 
* TODO: Set the path variable to a streaming video URL or a local media 
* file path. 
*/ 
private String path = "http://www.boisestatefootball.com/sites/default/files/videos/original/01%20-%20coach%20pete%20bio_4.mp4"; 
private VideoView mVideoView; 

private Handler handler; 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    handler = new Handler(); 
    setContentView(R.layout.videoview); 
    mVideoView = (VideoView) findViewById(R.id.surface_view); 
/* runOnUiThread(new Runnable() { 
     public void run() { 
      playVideo(); 
     } 
    }); 
*/  
    playVideo(); 
    Log.v(TAG, "activity oncreate finished"); 
} 

private void playVideo() { 
    try { 
     // final String path = path; 
     Log.v(TAG, "path: " + path); 
     if (path == null || path.length() == 0) { 
      Toast.makeText(VideoViewDemo.this, "File URL/path is empty", 
        Toast.LENGTH_LONG).show(); 

     } else { 
      // If the path has not changed, just start the media player 
      if (path.equals(current) && mVideoView != null) { 
       mVideoView.start(); 
       mVideoView.requestFocus(); 
       return; 
      } 
      current = path; 

      mVideoView.setVideoPath(path); 
      mVideoView.start(); 
      mVideoView.setMediaController(new MediaController(VideoViewDemo.this)); 
      mVideoView.requestFocus(); 

     } 
    } catch (Exception e) { 
     Log.e(TAG, "error: " + e.getMessage(), e); 
     if (mVideoView != null) { 
      mVideoView.stopPlayback(); 
     } 
    } 
} 

} 
+0

@edwin, मेरा उत्तर उपयोगी था? – Suji

+0

कोड के लिए धन्यवाद! मेरे पास एक और सवाल है, क्या आप जानते हैं कि वीडियो पूरी तरह से देखे जाने के बाद डिवाइस पर कहीं और सहेजा जा रहा है या नहीं? क्या यह वहां पहुंचा जा सकता है? कृपया उस मुद्दे पर मेरा [प्रश्न] (http://stackoverflow.com/questions/23842450/android-where-do-videoview-and-mediacontroller-store-media-downloaded-with-htt) भी देखें – nburk

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

  • कोई संबंधित समस्या नहीं^_^