2015-05-05 12 views
13

इसकी रिकॉर्डिंग करते समय सर्वर पर ऑडियो क्लिप रीयलटाइम कैसे अपलोड करें? असल में मेरी आवश्यकता एक रिकॉर्डिंग के दौरान चक्स/पैकेट के रूप में एक ऑडियो क्लिप अपलोड है। मैंने पहले से ही IQAudioRecorderController https://github.com/hackiftekhar/IQAudioRecorderController का उपयोग कर रिकॉर्डिंग हिस्सा किया है। यह ऑडियो रिकॉर्ड करता है और अस्थायी डायरेक्टरी को सहेजता है।इसकी रिकॉर्डिंग के दौरान ऑडियो क्लिप रीयलटाइम अपलोड करें?

मैं जानना चाहता था कि ऑडियो क्लिप को सहेजे बिना रीयलटाइम कैसे अपलोड करें।

यह रिकॉर्डिंग हिस्सा

//Unique recording URL 


NSString *fileName = [[NSProcessInfo processInfo] globallyUniqueString]; 
_recordingFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m4a",fileName]]; 


// Initiate and prepare the recorder 

_audioRecorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:_recordingFilePath] settings:recordSetting error:nil]; 
_audioRecorder.delegate = self; 
_audioRecorder.meteringEnabled = YES; 


// Recording start 
- (void)recordingButtonAction:(UIBarButtonItem *)item 
{ 
if (_isRecording == NO) 
    { 
    _isRecording = YES; 

    //UI Update 
    { 
     [self showNavigationButton:NO]; 
     _recordButton.tintColor = _recordingTintColor; 
     _playButton.enabled = NO; 
     _trashButton.enabled = NO; 
    } 

    /* 
    Create the recorder 
    */ 
    if ([[NSFileManager defaultManager] fileExistsAtPath:_recordingFilePath]) 
    { 
     [[NSFileManager defaultManager] removeItemAtPath:_recordingFilePath error:nil]; 
    } 

    _oldSessionCategory = [[AVAudioSession sharedInstance] category]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil]; 
    [_audioRecorder prepareToRecord]; 
    [_audioRecorder record]; 
} 
else 
{ 
    _isRecording = NO; 

    //UI Update 
    { 
     [self showNavigationButton:YES]; 
     _recordButton.tintColor = _normalTintColor; 
     _playButton.enabled = YES; 
     _trashButton.enabled = YES; 
    } 

    [_audioRecorder stop]; 
    [[AVAudioSession sharedInstance] setCategory:_oldSessionCategory error:nil]; 
} 
} 

// Recording done 

-(void)doneAction:(UIBarButtonItem*)item 
{ 
    if ([self.delegate respondsToSelector:@selector(audioRecorderController:didFinishWithAudioAtPath:)]) 
    { 
     IQAudioRecorderController *controller = (IQAudioRecorderController*)[self navigationController]; 
     [self.delegate audioRecorderController:controller didFinishWithAudioAtPath:_recordingFilePath]; 
    } 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

उत्तर

1

इस के हल के लिए विभिन्न तरीके हैं, एक तरह से अपने खुद के AudioGraph बनाने के लिए है। ऑडियोग्राफ माइक्रोफोन से या फ़ाइल से नमूने ले सकता है। फिर आप आउटपुट इकाई पर जाते हैं, लेकिन नमूना फ्रेम प्राप्त करने के लिए कॉलबैक इंस्टॉल करते हैं। ये तब आप अपने नेटवर्क क्लास को दबाते हैं जो पैकेट द्वारा पैकेट अपलोड कर सकते हैं।

एक अच्छा उदाहरण जो आपको दिखाता है कि इन कैप्चर किए गए पैकेट को डिस्क पर कैसे लिखना है AVCaptureAudioDataOutput है।

उस उदाहरण में पैकेट सूट ExtAudioFileWriteAsync लिखा जाता है। किसी सर्वर पर अपलोड करने के लिए आपको इसे अपने तर्क से बदलना होगा। ध्यान दें कि जब आप इसे आसानी से कर सकते हैं, तो एक समस्या यह है कि यह आपको कच्चे ऑडियो नमूने देगा। यदि आपको उन्हें लहर फ़ाइल या समान के रूप में आवश्यकता है, तो आपको रिकॉर्डिंग समाप्त होने तक प्रतीक्षा करने की आवश्यकता हो सकती है, क्योंकि फ़ाइल के शीर्षलेख में निहित ऑडियो नमूने के बारे में जानकारी चाहिए।

-1

जो कोड आप वर्तमान में उपयोग कर रहे हैं वह आपके लिए काम करेगा यदि आप रिकॉर्डिंग के बाद रिकॉर्ड की गई फाइल अपलोड करना चाहते हैं क्योंकि यह आपको अंतिम रिकॉर्ड की गई फाइल देगा।

आप सर्वर तो मुझे लगता है कि आप के संयोजन के साथ जाना है करने के लिए लाइव ऑडियो रिकॉर्डिंग अपलोड करना चाहते हैं, रिकॉर्डिंग सामान

ffmpeg सर्वर से अपने लाइव ऑडियो अपलोड करने के लिए के लिए

AudioSession।

आप ऑडियो रिकॉर्डिंग और ffmpeg मुझे लगता है कि आप एक बहुत lear करने के लिए है के लिए से here

ऑडियो बफ़र के प्रबंधन के लिए अच्छा मदद मिल सकती है। Ffmpeg का उपयोग कर सर्वर पर स्थिर/सहेजी गई ऑडियो फ़ाइल भेजना आसान होगा लेकिन सर्वर पर लाइव ऑडियो बफर भेजने के लिए मुश्किल काम होगा।

+0

आपको ऑडियो अपलोड करने के लिए 'ffmpeg' की आवश्यकता नहीं है, और आपके पास ऐप स्टोर पर एक ऐप डालने के साथ लाइसेंसिंग समस्याएं होंगी। – damian

+0

ffmpeg के लिए अन्य विकल्प हो सकते हैं, लेकिन यदि आप लाइसेंसिंग के बारे में चिंतित हैं तो ऐप स्टोर में कोई बिल्ड सबमिट करने में कोई समस्या नहीं है क्योंकि मैंने ऐप स्टोर में ffmpeg कार्यान्वयन के साथ सफलतापूर्वक एक ऐप सबमिट किया है, लेकिन आपको यह उल्लेख करना होगा कि आप इसका उपयोग कर रहे हैं क्रेडिट प्रयोजन के लिए आपका ऐप। – Yuvrajsinh

+0

ffmpeg लाइसेंस प्राप्त एलजीपीएल है। एलजीपीएल की शर्तें ऐप स्टोर के साथ असंगत हैं। असल में, आप ffmpeg लाइसेंसिंग शर्तों का उल्लंघन कर रहे हैं। https://trac.ffmpeg.org/ticket/1229 – damian

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