2014-11-20 11 views
5

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसे ओपस कोडेक के साथ रिकॉर्ड और प्लेबैक करने की आवश्यकता है, मैं बहुत कुछ खोजता हूं लेकिन मुझे उस समाधान का उपयोग करके कोई डेमो/उदाहरण नहीं मिल रहा है। मुझे एन्कोडर वाला डेमो मिल रहा है लेकिन डिकोडर नहीं मिल रहा है। मुझे केवल सी का उपयोग करके इस कोडेक का स्रोत कोड मिल गया है, क्या आप मेरी मदद कर सकते हैं?एंड्रॉइड में ओपस कोडेक के साथ रिकॉर्ड और प्लेबैक

+0

में संशोधित कोड आप कुछ भी मिला है? मैं वही ढूंढ रहा हूं ... – JVS

+0

यदि आपको केवल रिकॉर्ड करने की आवश्यकता है, तो यह ऐप ऐसा करने का दावा करता है: https://play.google.com/store/apps/details?id=dje073.android.modernrecforgepro –

+0

i इस टिप्पणी को बहुत देर हो चुकी है, लेकिन हमने हाल ही में इसे पूरा किया है: https://github.com/edwardsmarkf/opus-streaming-recorder – edwardsmarkf

उत्तर

0

इस GitHub demo आज़माएं। मैंने इसे संकलित किया लेकिन, यह रिकॉर्ड की गई ध्वनि नहीं चलाता है।

+0

हाय, मैंने कोशिश की, लेकिन यह काम नहीं किया। और उस गिट में रिलीज नोट का उल्लेख है "क्या काम नहीं करता है: "पैकेज" द्वारा ओपस कोडेक " –

1

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

यहाँ OpusEncoder.java

public void write(short[] buffer) throws IOException 
    { 
     byte[] encodedBuffer = new byte[buffer.length]; 
     int lenEncodedBytes = this.nativeEncodeBytes(buffer , encodedBuffer); 
     Log.i(TAG,"encoded "+lenEncodedBytes+" bytes"); 
     if (lenEncodedBytes > 0) 
     { 
      this.out.write(lenEncodedBytes); 
      this.out.write(encodedBuffer, 0, lenEncodedBytes); 
     } 
     else 
     { 
      Log.e(TAG, "Error during Encoding. Error Code: " + lenEncodedBytes); 

      throw new IOException("Error during Encoding. Error Code: " + lenEncodedBytes); 
     } 
    } 


यहाँ से संशोधित कोड OpusDecoder.java

 byte[] encodedBuffer; 
     int bytesEncoded=this.in.read(); 
     int bytesDecoded=0; 

     Log.d(TAG, bytesEncoded + " bytes read from input stream"); 
     if (bytesEncoded >= 0) 
     { 
      encodedBuffer=new byte[bytesEncoded]; 
      int bytesRead = this.in.read(encodedBuffer); 
      bytesDecoded = nativeDecodeBytes(encodedBuffer , buffer); 
      Log.d(TAG, bytesEncoded + " bytes decoded"); 
     } 
+0

" का उपयोग करके रिकॉर्डिंग और खेलना क्या आपका मतलब "पैकेट" है? मैंने आपके पैच की कोशिश की लेकिन अभी भी काम करने के लिए रिकॉर्ड और प्लेबैक नहीं मिला। बहुत सारे पॉप और क्लिक – spy

+0

अभी भी इसके साथ खेल रहे हैं, ऐसा लगता है कि यह ठीक है, लेकिन प्लेबैक काम नहीं करता है। ओपस एक समय में केवल 3 बाइट्स डीकोडिंग की रिपोर्ट कर रहा है। – spy

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