2012-06-06 17 views
5

जब मैं IM12W64 एक सरल ट्रांसकोड कर रहा हूं तो मुझे अपवाद मिल रहा है। अपवाद है "java.lang.RuntimeException: त्रुटि ऑपरेशन अनुमति नहीं है, test.mp3 पर ट्रेलर लिखने में विफल रहा है" जब भी मैं IMediaWriter.close() को कॉल करता हूं, तो मुझे यह मिलता है कि कोई भी विचार क्यों मैं इसे सरल के लिए प्राप्त कर रहा हूं ट्रांसकोडिंग?Xuggler MediaWriter ऑपरेशन की अनुमति नहीं है

IMediaReader reader = null; 
    IMediaWriter writer = null; 
    try { 
     reader = ToolFactory.makeReader("test.wav"); 
     writer = ToolFactory.makeWriter("test.mp3", reader); 
     reader.addListener(writer); 
     while (reader.readPacket() == null) ; 
     reader.close(); 
     writer.close(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
+0

क्या आपने ओएस फ़ाइल अनुमतियां जांच ली हैं? – Gorky

+0

एप्लिकेशन को ब्रेक पॉइंट या एक शाश्वत पाश का उपयोग करके 'writer.close()' से पहले ठीक से लटकाएं। फिर मैन्युअल रूप से 'test.mp3' कॉपी करें और दो अलग-अलग सॉफ़्टवेयर ऑडियो प्लेयर का उपयोग करके इस नई फ़ाइल को चलाने का प्रयास करें। क्या वहां कोई ऑडियो डेटा है? - दूसरे शब्दों में, लेखक को बंद करने में एकमात्र समस्या है? – Luke

उत्तर

2

यह निश्चित रूप से, क्योंकि मैं एक ही समस्या का सामना करना पड़ रहा था काम करेगा: यहाँ नमूना कोड है। धन्यवाद। यदि आप अधिक स्पष्टीकरण चाहते हैं तो कृपया पूछें ...

IMediaReader reader = null; 
    IMediaWriter writer = null; 
    try { 
     reader = ToolFactory.makeReader("sijo.mp4"); 
     writer = ToolFactory.makeWriter("Thomas.flv", reader); 
     reader.addListener(writer); 
     while (reader.readPacket() == null) ; 
     //Should IMediaReader automatically call close(), only if ERROR_EOF (End of File) is returned from readPacket(). 
     reader.setCloseOnEofOnly(false); 
     //If false the media data will be left in the order in which it is presented to the IMediaWriter. 
     //If true IMediaWriter will buffer media data in time stamp order, and only write out data when it has at least one same time or later packet from all streams. 
     writer.setForceInterleave(false); 
     System.out.println("closed..."); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    }