2012-07-17 7 views
13

मैं एंड्रॉइड में सर्वर स्ट्रीमिंग के लिए लाइव डिवाइस पर काम कर रहा हूं। मैं सर्वर पर बाइट्स में डेटा भेजने में सक्षम हूं लेकिन जब मैं सर्वर पर रिकॉर्डिंग के दौरान उस फ़ाइल को चलाता हूं तो वीएलसी कहता है कि MOOV परमाणु नहीं मिला। बहुत सारे कामकाज के बाद मुझे पता चला कि एमओवी एक एमपी 4 फ़ाइल के परमाणु अंत में उत्पन्न होता है। लेकिन रिकॉर्डिंग का मतलब है, जबकि मुझे सर्वर पर उस फाइल को चलाने के लिए है। मैं के स्रोत कोड के माध्यम से जाता हूं SPYDROID और SIPDROID लेकिन उनमें से कोई भी काम नहीं कर रहा है। मैंने FFMPEG का उपयोग करके सर्वरसाइड पर चाल परमाणु जोड़ने की कोशिश की लेकिन उसे कोई सफलता नहीं मिली। किसी को भी कोई विचार है कि मैं इसे कैसे प्राप्त कर सकता हूं। अग्रिम में Thanx।एक एमपी 4 वीडियो फ़ाइल में एक एमओवीवी परमाणु कैसे जोड़ें

उत्तर

2

स्ट्रीम की शुरुआत में moov परमाणु को स्थानांतरित करने के लिए qt_faststart चलाएं।

qt-faststart in.mp4 out.mp4 
+0

हाय d33pika..thnx, मैं रिकॉर्डिंग के दौरान सर्वर पर वीडियो डेटा भेजने के लिए चाहते हैं, लेकिन एक Moov परमाणु तो thats समाप्त रिकॉर्डिंग क्यों मुझे लगता है कि क्यूटी-ठीक हैं यहाँ उपयोगी साबित नहीं होगा के बाद उत्पन्न करता है। – Ravinder

+0

क्या आपने अपनी समस्या @Ravinder हल किया है? मैं अभी वही करने की कोशिश कर रहा हूं और एक व्यवहार्य समाधान नहीं देख रहा हूं। यदि आप एक जानते हैं, तो कृपया यहां एक टिप्पणी पोस्ट करें। –

+0

एंड्रॉइड में qt-faststart का उपयोग कैसे करते हैं? क्या कोई एक उदाहरण कोड पोस्ट कर सकता है? –

6

आपको कोई समस्या है। 'Moov' बॉक्स सामग्री की एक प्रकार की मेज है। यदि सभी सामग्री नहीं है तो आपके पास सामग्री की पूरी तालिका नहीं हो सकती है। आउच!

यदि आप MP4 के साथ रहना चाहते हैं और यदि आप स्वयं फ़ाइल को लिख रहे हैं तो आप फ़ाइल को खंडित एमपी 4 फ़ाइल के रूप में लिख सकते हैं। एक खंडित एमपी 4 फ़ाइल में वीडियो के कई स्वयं निहित छोटे टुकड़े होते हैं - प्रत्येक में सामग्री की अपनी तालिका होती है। यह पूरी रिकॉर्डिंग समाप्त होने से पहले फ़ाइल को चलाने में सक्षम होगी।

यदि आपको MP4 के साथ चिपकने की आवश्यकता नहीं है तो विकल्प सर्वर पर कच्चे H264 स्ट्रीम को लिखना होगा। तब आपके पास उस तरह की सामग्री की सारणी नहीं है। वीएलसी कच्चे एच 264 धाराएं खेल सकता है।

+0

हाय सेबेटियन, मैं वीडियो रिकॉर्डिंग के दौरान एंड्रॉइड में पंक्ति डेटा प्राप्त करने में सक्षम नहीं हूं, क्या आप कृपया मुझे बता सकते हैं कि मैं इसे कैसे प्राप्त कर सकता हूं। – Ravinder

+0

मुझे एमपी 4 पता है लेकिन विशेष रूप से एंड्रॉइड नहीं। शायद आपको एक नया सवाल बनाना चाहिए। –

+0

ऐसा करने का एक और तरीका केवल एक या दो सेकंड रिकॉर्ड करना और सर्वर पर दोबारा मिलना चाहिए ?! –

3

फ़ाइल की शुरुआत में एमओवीवी परमाणु को स्थानांतरित करने और खंड में स्ट्रीम करने के लिए इंटरलीविंग करने के लिए MP4Box का उपयोग करें।

MP4Box test.mp4 test.mp4 
+3

यह मेरे लिए काम नहीं करता है। यह लौटाता है: त्रुटि - 2 इनपुट नाम निर्दिष्ट, कृपया एमपी 4 बॉक्स संस्करण 0.5.0-rev4065 का उपयोग करें –

0

अपने Gradle में जोड़े इस lib: संकलन 'net.ypresto.qtfaststartjava: qtfaststart: 0.1.0' और फिर

File input = new File(path + "/input.mp4"); // Your input file 
File output = new File(path + "/output.mp4"); // Your output file 
try{ 
    if(!output.exists()) // if there is no output file we'll create one 
     output.createNewFile(); 
    } 
}catch (IOException e){ 
    Log.e("TAG", e.toString()); 
} 

try{ 
    QtFastStart.fastStart(input, output); // Adds moov to your input 
              // Now your output file is ready to stream! 
}catch (QtFastStart.MalformedFileException m){ 
    Log.e("QT", m.toString()); 
}catch (QtFastStart.UnsupportedFileException q){ 
    Log.e("QT", q.toString()); 
}catch (IOException i){ 
    Log.e("QT", i.toString()); 
} 

यहाँ है कि सभी

0

यह संभव है है FFMpeg का उपयोग कर वीडियो फ़ाइल की शुरुआत में moov परमाणु को स्थानांतरित करने के लिए। उर rply के लिए

ffmpeg -i input_video_file.mp4 -vcodec copy -acodec copy -movflags +faststart output_video_file.mp4 
संबंधित मुद्दे