दिलचस्प पोस्ट
फ़्रेम में प्रदर्शित होने से इनकार किया क्योंकि यह 'एक्स-फ़्रेम-विकल्प' को 'सैमोरिजिन' में सेट किया गया था जावास्क्रिप्ट में लूप रूपांतरण करते समय पायथन कैसे सी # में शब्दकोश में संग्रहीत मूल्य को अद्यतन करने के लिए? रैंड फ़ंक्शन एक ही फ़ंक्शन को रिटर्न देता है जब एक फ़ंक्शन c ++ में कॉल किया जाता है सी # का उपयोग कर किसी श्रेणी में एक यादृच्छिक संख्या का निर्माण करें मैं बच्चों की संख्या कैसे गिना सकता हूं? विस्तार विधियां कैसे काम करती हैं? मापदंडों को सी # / .net में नल योग्य नहीं के रूप में चिह्नित करें? क्रोम में वेबकिट-रूपांतरण के साथ घूर्णन करते समय वोंगकी पाठ एंटी-एलिआसिंग सी # वेब ब्रासर नियंत्रण प्रॉक्सी "गैर-स्थिर वैरिएबल यह एक स्थिर संदर्भ से संदर्भित नहीं किया जा सकता है" जब कोई ऑब्जेक्ट बनाते हैं सप्ताह, महीनों, तिमाहियों और वर्षों के संदर्भ में तिथियों के बीच का अंतर प्राप्त करें पायथन सेट बनाम सूचियां संख्या और सीमाओं के साथ लूप के लिए AngularJS एक विशिष्ट एप्लिकेशन का एक स्क्रीनशॉट प्राप्त करें

एंड्रॉइड कैप्चर वीडियो फ़्रेम

मुझे एक वीडियो फ़ाइल का फ्रेम प्राप्त करना होगा (यह एसडीसीडी, कैश डाइर या ऐप डीआईआर पर हो सकता है) मेरे पास अपने आवेदन में पैकेज एंड्रॉइड। मीडिया है और मेरे अंदर क्लास मीडियामैटडेटा रैटरियर है। बिटमैप में पहली फ्रेम प्राप्त करने के लिए, मैं कोड का उपयोग करता हूं:

public static Bitmap getVideoFrame(Context context, Uri videoUri) { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY); retriever.setDataSource(context, videoUri); return retriever.captureFrame(); } catch (IllegalArgumentException ex) { throw new RuntimeException(); } catch (RuntimeException ex) { throw new RuntimeException(); } finally { retriever.release(); } } 

लेकिन यह काम नहीं कर रहा है जब मैं डेटा स्रोत सेट करता हूं तो यह अपवाद (java.lang.RuntimeException: setDataSource विफल: स्थिति = 0x80000000) को फेंकता है I क्या आप जानते हैं कि यह कोड कैसे काम करेगा? या क्या आपके पास कोई समान (सरल) समाधान है ffmpeg या अन्य बाहरी पुस्तकालयों का उपयोग किए बिना? videoUri एक वैध यूरी है (मीडिया प्लेयर उस यूआरआइ से वीडियो चला सकता है)

Solutions Collecting From Web of "एंड्रॉइड कैप्चर वीडियो फ़्रेम"

मेरे लिए निम्नलिखित कार्य:

 public static Bitmap getVideoFrame(FileDescriptor FD) { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(FD); return retriever.getFrameAtTime(); } catch (IllegalArgumentException ex) { ex.printStackTrace(); } catch (RuntimeException ex) { ex.printStackTrace(); } finally { try { retriever.release(); } catch (RuntimeException ex) { } } return null; } 

यह भी काम करता है यदि आप किसी दावेदार के बजाय पथ का उपयोग करते हैं।

इसे आज़माएं, मैंने इसे इस्तेमाल किया है और इसका काम करना है

 public static Bitmap getVideoFrame(Context context, Uri uri) { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(uri.toString(),new HashMap<String, String>()); return retriever.getFrameAtTime(); } catch (IllegalArgumentException ex) { ex.printStackTrace(); } catch (RuntimeException ex) { ex.printStackTrace(); } finally { try { retriever.release(); } catch (RuntimeException ex) { } } return null; } 

यूरी के स्थान पर आप अपने यूआरएल को सीधे पास कर सकते हैं।

मेरे आवेदन में मेरे पास एक ही गलती है मैंने इस साइट पर देखा था कि

यह ऐसा करने का एक अनौपचारिक तरीका है और यह केवल कपकेक में काम करेगा (और बाद में संस्करण)। एंड्रॉइड टीम गारंटी नहीं देता कि libmedia_jni.so, जो जावा फ़ाइल का उपयोग करता है, को शामिल किया जाएगा या भविष्य के संस्करणों में एक ही इंटरफ़ेस होगा।

http://osdir.com/ml/AndroidDevelopers/2009-06/msg02442.html

मैंने अपने फ़ोन को जिंजरब्रेड पर अपडेट किया है और यह अब और काम नहीं करता है।

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

मैं थंबनेलउल्टल्स कक्षा http://developer.android.com/reference/android/media/ThumbnailUtils.html का उपयोग करते हुए एक ही त्रुटि प्राप्त कर रहा था।
यह डाकू के तहत मीडियामैटडेटा रेटिवर का उपयोग करता है और अधिकतर समय आप इसे बिना किसी समस्या के इस पद्धति का उपयोग कर एक फ़ाइलपथ भेज सकते हैं:

 public static Bitmap createVideoThumbnail (String filePath, int kind) 

हालांकि, एंड्रॉइड 4.0.4 पर, मैं ग़बी त्रुटि देख रहा था @ जीबी देख रहा था। बजाय फाइल डिस्क्रिप्टर का प्रयोग करके समस्या हल हो गई है और अभी भी गैर-4.0.4 उपकरणों के लिए काम करता है। मैं वास्तव में समाप्त subclassing ThumbnailUtils यहां मेरी उपवर्ग विधि है:

  public static Bitmap createVideoThumbnail(FileDescriptor fDescriptor, int kind) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(fDescriptor); bitmap = retriever.getFrameAtTime(-1); } catch (IllegalArgumentException ex) { // Assume this is a corrupt video file Log.e(LOG_TAG, "Failed to create video thumbnail for file description: " + fDescriptor.toString()); } catch (RuntimeException ex) { // Assume this is a corrupt video file. Log.e(LOG_TAG, "Failed to create video thumbnail for file description: " + fDescriptor.toString()); } finally { try { retriever.release(); } catch (RuntimeException ex) { // Ignore failures while cleaning up. } } if (bitmap == null) return null; if (kind == Images.Thumbnails.MINI_KIND) { // Scale down the bitmap if it's too large. int width = bitmap.getWidth(); int height = bitmap.getHeight(); int max = Math.max(width, height); if (max > 512) { float scale = 512f / max; int w = Math.round(scale * width); int h = Math.round(scale * height); bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true); } } else if (kind == Images.Thumbnails.MICRO_KIND) { bitmap = extractThumbnail(bitmap, TARGET_SIZE_MICRO_THUMBNAIL, TARGET_SIZE_MICRO_THUMBNAIL, OPTIONS_RECYCLE_INPUT); } return bitmap; } 

अपवाद तब भी फेंका जाता है जब File मौजूद नहीं होती है तो setDataSource() कॉल करने से पहले आप बेहतर new File(url).exists() कि new File(url).exists()

मैं इस कोड का इस्तेमाल किया और जो मेरे लिए काम कर रहा है आप यह कोशिश कर सकते हैं

 if (Build.VERSION.SDK_INT >= 14) { ffmpegMetaDataRetriever.setDataSource( videoFile.getAbsolutePath(), new HashMap<String, String>()); } else { ffmpegMetaDataRetriever.setDataSource(videoFile .getAbsolutePath()); } 

इसलिए वीडियो से फ्रेम प्राप्त करने का एक विशिष्ट तरीका है

  File sdcard = Environment.getExternalStorageDirectory(); File file = new File(sdcard, "myvideo.mp4");