2011-06-15 9 views
5

मेरे पास एक वीडियो फ़ाइल है, और मुझे इसे H264/AVC के रूप में एन्कोड करने और HTTP के माध्यम से क्लाइंट को फ़ीड करने की आवश्यकता है। मुझे जो चाहिए वह यह है कि मैं क्लाइंट साइड पर खिलाड़ी वीडियो को वापस चला सकता हूं क्योंकि इसे एन्कोड किया जा रहा है।क्या एन्कोडर से एक आउटपुट वीडियो फ़ाइल चलाने के लिए संभव है क्योंकि इसे एन्कोड किया जा रहा है?

AFAIK, वीडियो डाउनलोड करने के लिए प्लेयर को सक्षम करने के लिए, "moov atom" को वीडियो फ़ाइल की शुरुआत में रखा जाना चाहिए। हालांकि, एन्कोडर्स (ex: ffmpeg) एन्कोडिंग पूर्ण करने के बाद फ़ाइल के अंत में हमेशा "moov atom" लिखते हैं।

क्या एनकोड के आउटपुट की शुरुआत में एन्कोडर "moov atom" डाल सकता है? या moov परमाणु उपस्थिति के बिना वीडियो खेलते हैं? अग्रिम में

धन्यवाद

एलआर

उत्तर

13

हाँ, यह संभव है, लेकिन केवल कुछ कंटेनर प्रारूपों में। क्विकटाइम/एमपी 4 कंटेनर के साथ यह संभव नहीं है। इन प्रारूपों में, मूव परमाणु में नमूना ऑफसेट (एमडीएटी परमाणु में नमूने के स्थान) होते हैं। वीडियो को एन्कोड किए जाने के बाद तक ये ज्ञात नहीं हैं। स्ट्रीमिंग काम को बेहतर बनाने के लिए वीओडी (मांग पर वीडियो) के साथ आप तैयार फ़ाइल ले सकते हैं, और मोव परमाणु को आगे बढ़ सकते हैं। लेकिन अगर आप फ्लाई पर एन्कोडिंग कर रहे हैं तो ऐसा करने का कोई तरीका नहीं है। यह काम करने के लिए, आपको एक स्ट्रीम उन्मुख परिवहन प्रारूप का उपयोग करने की आवश्यकता होगी। एफएलवी या एमपीईजी-टीएस की तरह कुछ काम करेगा। यदि आप ffmpeg में वीडियो पास करते हैं और इसे एक FLV कंटेनर में H.264 वीडियो बनाने के लिए कहते हैं, तो आप उस डेटा को किसी प्लेयर को एन्कोड किए जाने के बाद सेवा कर सकते हैं, और यह काम करेगा। बेशक, यदि आप इसे HTTP पर सेवा देना चाहते हैं, तो आपको शायद अपना सर्वर (या मौजूदा सर्वर के लिए मॉड्यूल) लिखना होगा। कुछ भी जो मुझे पता है कि फाइल को सेवा देने में सहायता करने का समर्थन करता है (एक मुद्दा यह है कि फ़ाइल आकार को ज्ञात नहीं है जब सामग्री-लंबाई हेडर भेजा जाता है)। यदि आप आरटीएमपी या आरटीएसपी पर वीडियो की सेवा करते हैं, तो आप इस काम को मौजूदा सॉफ्टवेयर के साथ बना सकते हैं।

+0

बहुत धन्यवाद! यह बहुत उपयोगी है। मैंने आउटपुट विकल्प के रूप में mpegts के साथ H264 और AAC में एक वीडियो फ़ाइल एन्कोड करने का प्रयास किया। एन्कोडिंग के दौरान अपूर्ण आउटपुट फ़ाइल vlc द्वारा खेला जा सकता है। मैं वास्तव में एंड्रॉइड पर इसे खेलना चाहता हूं, हालांकि एंड्रॉइड का प्लेयर अपूर्ण आउटपुट नहीं खेल सकता है। मुझे लगता है कि मुझे एंड्रॉइड के लिए अपना खुद का प्लेयर लागू करना है। – jAckOdE

+0

मुझे विश्वास नहीं है कि एंड्रॉइड एमपीईजी-टीएस धाराओं के लिए समर्थन की गारंटी देता है। (हालांकि वे ऐप्पल-स्टाइल खंडित http एमपीईजी-टीएस स्ट्रीमिंग के लिए समर्थन जोड़ रहे हैं)। वीडियो पर वीडियो प्राप्त करने के लिए आप किस प्रोटोकॉल का उपयोग कर रहे हैं? एंड्रॉइड यूडीपी पर आरटीएसपी का समर्थन करता है (जो वीएलसी शायद भी करता है) – wombat57

+0

वीडियो फ़ाइल को HTTP पर एंड्रॉइड फोन में स्थानांतरित किया जाता है और एंड्रॉइड फोन में कई छोटे हिस्से के रूप में सहेजता है, ऐप्पल की HTTP स्ट्रीमिंग पसंद करता है। हम अन्य प्रोटोकॉल लेकिन HTTP का उपयोग नहीं कर सकते हैं। मैंने एंड्रॉइड साइट की जांच की, और यहां घोषणा की गई है कि एंड्रॉइड 3.0+ से एंड्रॉइड समर्थन एमपीईजी-टीएस: http://developer.android.com/guide/appendix/media-formats।एचटीएमएल – jAckOdE

1

मैंने एफएमपीईजीई के साथ पहले भी यही कोशिश की, लेकिन सफल नहीं हो सका। लेकिन वीएलसी के साथ मैं एंड्रॉइड पर एक साथ डाउनलोड, ट्रांसकोड और स्ट्रीम करने में सक्षम था, हालांकि आरटीएसपी के साथ। मैंने http प्रगतिशील विधि के साथ प्रयास नहीं किया। मैं mpeg4 वीडियो कोडेक, vlc में एमपीईजी ऑडियो कोडेक का इस्तेमाल किया।

+0

एंड्रॉइड संभाल सकता है कि एक आरटीएसपी स्ट्रीम उत्पन्न करने के लिए आप वीएलसी कैसे प्राप्त किया? मुझे "असमर्थित प्रारूप"/त्रुटि -1010 मिल रहा है। मुझे लगता है कि शायद समस्या यह है कि एमडीएटी परमाणुओं से पहले कोई मूव परमाणु नहीं है, लेकिन मैं निश्चित रूप से दूर हूं! –

2

आप क्यूटी-फास्टस्टार्ट नामक ffmpeg में किसी टूल का उपयोग करके फ़ाइल को फिर से लिखकर फ़ाइल की शुरुआत में MOOV एटम को स्थानांतरित कर सकते हैं। आपको इसे स्वयं स्रोत कोड से संकलित करने की आवश्यकता होगी (लेकिन कम से कम लिनक्स/मैक ओएस में आसान है)। बस libavcodec का स्रोत डाउनलोड, उदाहरण के लिए: http://libav.org/releases/libav-0.8.tar.xz

यह Untar और उपकरणों निर्देशिका जाना, वहाँ एक फ़ाइल क्यूटी-faststart.c कहा जाता है, बस इसे बनाने के साथ:

बनाने क्यूटी-ठीक हैं

अब आप इसे इस तरह कॉल करके एमओवीवी एटम को पुनः आवंटित कर सकते हैं: qt-faststart input.mp4 output.mp4

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

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