2013-10-21 7 views
8

मैंका उपयोग करके माइम-प्रकार "वीडियो/एवीसी" के साथ पूर्वावलोकन डेटा एन्कोड कर रहा हूं और MediaMuxer पर एन्कोडेड डेटा (केवल वीडियो, ऑडियो नहीं) पास कर रहा हूं। मक्सर ठीक चल रहा है और एक उचित आकार की आउटपुट फ़ाइल बनाता है (यानी, जितना लंबा मैं रिकॉर्ड करता हूं)। हालांकि, मैं त्रुटि "म्युक्सर बंद करने में विफल" हो जब मैं म्युक्सर रोकने की कोशिश:MediaMuxer त्रुटि "muxer को रोकने में विफल"

10-21 10:39:40.755: E/AndroidRuntime(2166): Caused by: java.lang.IllegalStateException: Failed to stop the muxer 

कुछ संदिग्ध MPEG4Writer लॉग संदेशों में विफल रहा है बंद पूर्ववर्ती हैं:

10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track 
10-21 10:39:40.740: E/MPEG4Writer(2166): Missing codec specific data 
10-21 10:39:40.740: W/MPEG4Writer(2166): 0-duration samples found: 122 
10-21 10:39:40.740: I/MPEG4Writer(2166): Received total/0-length (123/1) buffers and encoded 123 frames. - video 
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track source 
10-21 10:39:40.740: D/MPEG4Writer(2166): Video track stopped 
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping writer thread 
10-21 10:39:40.740: D/MPEG4Writer(2166): 0 chunks are written in the last batch 
10-21 10:39:40.740: D/MPEG4Writer(2166): Writer thread stopped 
10-21 10:39:40.740: E/MPEG4Writer(2166): writer error ended! 

कोई सुराग क्या यह कारण है? सुनिश्चित नहीं है कि आपको और जानकारी की आवश्यकता होगी।

+0

ऐसा लगता है जब आप इसे रोकने की कोशिश करते हैं तो आपके मक्सर पहले ही समाप्त हो चुका है। आपकी मदद करने के लिए आपको हमारे लिए कुछ कोड पोस्ट करना होगा। –

उत्तर

12
E/MPEG4Writer(2166): Missing codec specific data 

लगता है कि आपका MediaFormat कि CSD शामिल साथ MediaMuxer#addTrack() फोन नहीं किया। इसे कैसे करें इसके उदाहरण के लिए EncodeAndMuxTest.java कोड देखें।

MPEG4Writer implementationMediaMuxer द्वारा उपयोग किया गया, isTrackMalformed() लाइन 2360 पर जांचें; यदि सीएसडी डेटा मौजूद नहीं है, तो यह ERROR_MALFORMED सेट करता है, लेकिन तुरंत वापस नहीं आता है। कुछ भी त्रुटि को साफ़ नहीं करता है, इसलिए यह काम का एक गुच्छा करेगा और फिर असफल हो जाएगा, जो आप देख रहे हैं उससे मेल खाता है।

+5

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

+0

राकटन की टिप्पणी बहुत उपयोगी है। अपने आप से MediaFormat बनाने की कोशिश मत करो। – Qylin

3

मुझे एक ही समस्या थी। मक्सर को बंद करते समय यह "रोकने में विफल" त्रुटि फेंक रहा था। जब मैंने अपनी सहेजी गई फ़ाइल को एक आईएसओ व्यूअर में चेक किया तो मुझे इसमें ट्रैक नहीं मिला। मैं केवल वीडियो से पहले उत्पादन प्राप्त करने के बाद ट्रैक बनाने के द्वारा समस्या हल हो जाती encoder.Here कैसे मैं अपने ट्रैक

m_VideoTrackIndex = muxer.addTrack(mediaCodec.getOutputFormat()); 

ट्रैक के लिए मीडिया प्रारूप mediaCodec.getOutputFormat() से प्राप्त होता है जोड़ना है जो बदले में पहले फ्रेम को एन्कोड करने के बाद ही आरंभ किया जाएगा। मैंने अपना कोड बदल दिया पहला एन्कोडेड डेटा प्राप्त करने के बाद ट्रैक जोड़ने के लिए (और निश्चित रूप से केवल एक बार)। यह ठीक काम कर रहा है।

+0

अगर (encoderStatus = MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { \t \t \t \t \t MediaFormat newFormat = mEncoder.getOutputFormat(); \t \t \t \t m12rackIndex = mMuxer.addTrack (newFormat); \t \t \t \t \t mMuxer.start(); – surya

2

वहाँ Android के साथ 2 समस्याएं हैं 5.0.2 डिवाइस मोटो ई 1) चौड़ाई & ऊंचाई 16 वर्ष की नहीं की आपूर्ति की गुणकों अपने 2 दुर्घटनाग्रस्त हो) mediaBuffer स्थापित किया जाना के बाद पहला फ्रेम एनकोड किया गया है

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