2009-02-02 16 views
6

मैं FLV, mov's, और mp4 के खेलने के लिए वीडियोडिस्प्ले का उपयोग कर रहा हूं और सबकुछ बढ़िया काम कर रहा है। वे सभी प्रगतिशील डाउनलोड के माध्यम से लोड किए जा रहे हैं और स्ट्रीम नहीं किए जा रहे हैं। मैं जो करना चाहता हूं वह एक निर्दिष्ट फ्रेम (जैसे कि जो भी 10 सेकंड चिह्न पर दिखाया जा रहा है) को पकड़ना है, इसे बिटमैप में परिवर्तित करें और उस बिटमैप को वीडियो के पूर्वावलोकन छवि के रूप में उपयोग करें। मैं रनटाइम पर ऐसा करना चाहता हूं इसलिए मुझे दिखाए जाने वाले प्रत्येक वीडियो के लिए एक पूर्वावलोकन छवि बनाने की ज़रूरत नहीं है।फ्लेक्स: वीडियो के लिए गतिशील रूप से एक पूर्वावलोकन छवि बनाएं

कोई विचार यह कैसे करना है? मैं इसे बजाकर इसे नकली नहीं बनाना चाहूंगा - उस विशिष्ट फ्रेम की तलाश कर रहा हूं और फिर इसे रोक रहा हूं लेकिन मेरे पास कोई अन्य विकल्प नहीं हो सकता है?

उत्तर

2

रयान और जेम्स सही हैं - संभवतः अपलोड/ट्रांसकोड-समय पर फ्रेम निकालने का सही तरीका है। लेकिन अगर यह कोई विकल्प नहीं है, तो आप किसी भी प्रकार की डिफ़ॉल्ट/प्लेसहोल्डर छवि का उपयोग करने का विकल्प चुन सकते हैं (कुछ जेनेरिक या किसी भी तरह से उन सभी वीडियो के लिए उपयुक्त जिनके अंगूठे अभी तक कब्जा नहीं किए गए हैं), और केवल वीडियोडिस्प्ले के डिस्प्ले ऑब्जेक्ट-नेस का उपयोग करें खींचते हैं और फिर अपने सर्वर पर एक फ्रेम अपलोड करते हैं, उदाहरण के लिए:

<mx:Script> 
    <![CDATA[ 

     var captured:Boolean; 

     private function creationCompleteHandler(event:Event):void 
     { 
      videoDisplay.source = "http://yourserver/yourvideo.flv"; 
     } 

     private function videoDisplay_playheadUpdate(event:VideoEvent):void 
     { 
      if (!captured && videoDisplay.playheadTime >= 10) 
       capture(); 
     } 

     private function capture():void 
     { 
      var bmpData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height); 
      bmpData.draw(videoDisplay); 

      captured = true; 

      // Now just upload the byte array to your server for the next user 
      var loader:URLLoader = new URLLoader(); 
      loader.dataFormat = URLLoaderDataFormat.BINARY; 

      // ... etc. 
     } 

    ]]> 
</mx:Script> 

<mx:VideoDisplay id="videoDisplay" playheadUpdate="videoDisplay_playheadUpdate(event)" /> 

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

+0

मैंने ऐसा कुछ करने के लिए बहुत कुछ किया (मुझे शायद यह निर्धारित करना चाहिए था कि ऐप को ऑफ़लाइन चलाने में सक्षम होना चाहिए, इसलिए मेरे पास सर्वर पर अधिकतर आसान पहुंच नहीं है) लेकिन मैं कोडिंग समाप्त कर दिया एक हैक जिसमें वीडियो लोड करना शामिल था और मुझे आवश्यक फ्रेम पर रोक दिया गया था। धन्यवाद! – onekidney

+0

बहुत बढ़िया, खुशी हुई इससे मदद मिली। –

1

मुझे यकीन है कि यह संभव नहीं है। यह अच्छी तरह से हो सकता है ... लेकिन ऐसा मत सोचो। मुझे लगता है कि वीडियो में लोड करने का एकमात्र तरीका नेटस्ट्रीम और नेटकनेक्शन ऑब्जेक्ट का उपयोग करना है, जैसा कि आप जानते हैं कि वीडियो की लोडिंग बंद हो जाती है।

यदि यह उपयोगकर्ता उत्पन्न वीडियो है तो मुझे लगता है कि सबसे अच्छा शर्त कुछ सीवर साइड स्क्रिप्ट है जो पूर्वावलोकन छवि उत्पन्न करती है। यह नहीं पता कि यह कैसे किया जाता है लेकिन ऐसा लगता है कि अधिकांश क्लिप साइटें कैसे काम करती हैं।

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

अस्पष्ट उत्तर के लिए खेद है ... यदि आपको त्वरित समाधान की आवश्यकता है तो यह आपको सही दिशा में इंगित कर सकता है।

-1

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