2015-05-05 16 views
13

Làm cách nào để tải clip âm thanh lên máy chủ trong khi đang ghi? Về cơ bản, yêu cầu của tôi là tải lên một đoạn âm thanh như là cặp/gói trong khi ghi âm. Tôi đã thực hiện phần ghi âm bằng cách sử dụng IQAudioRecorderController https://github.com/hackiftekhar/IQAudioRecorderController. Nó ghi lại âm thanh và lưu vào TemporaryDirectory.Tải lên clip âm thanh thời gian thực trong khi ghi âm?

Tôi muốn biết cách tải lên thời gian thực mà không lưu clip âm thanh.

Đây là phần ghi

//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]; 
} 

Trả lời

1

Có rất nhiều cách giải quyết này, một cách là để tạo ra máy không ảnh của riêng bạn. AudioGraph có thể lấy mẫu từ micrô hoặc từ một tệp. Sau đó, bạn tiến tới một đơn vị đầu ra, nhưng cài đặt một cuộc gọi lại để có được các khung lấy mẫu. Sau đó, bạn sẽ chuyển sang lớp mạng của mình, sau đó có thể tải lên gói theo gói.

Một ví dụ điển hình cho bạn biết cách ghi các gói đã chụp này vào đĩa là AVCaptureAudioDataOutput.

Trong các gói ví dụ đó được viết su kiện ExtAudioFileWriteAsync. Bạn phải thay thế điều này bằng logic của riêng mình để tải lên máy chủ. Lưu ý rằng trong khi bạn có thể làm điều đó dễ dàng, một vấn đề là điều này sẽ cung cấp cho bạn các mẫu âm thanh thô. Nếu bạn cần chúng dưới dạng tệp sóng hoặc tương tự, bạn có thể cần đợi cho đến khi quá trình ghi kết thúc, vì tiêu đề của tệp cần thông tin về các mẫu âm thanh chứa.

-1

Mã bạn hiện đang sử dụng sẽ hoạt động cho bạn nếu bạn muốn tải tệp đã ghi lên sau khi ghi xong vì nó sẽ cung cấp cho bạn tệp được ghi cuối cùng.

Nếu bạn muốn tải lên ghi âm trực tiếp vào máy chủ sau đó tôi nghĩ rằng bạn phải đi với sự kết hợp của,

AudioSession để ghi thứ

ffmpeg để tải âm thanh sống của bạn đến máy chủ.

Bạn có thể nhận được sự giúp đỡ tốt cho ghi âm và quản lý âm thanh Buffers từ here

Đối với ffmpeg Tôi nghĩ rằng bạn phải Lear rất nhiều. Nó sẽ được dễ dàng để gửi tập tin âm thanh tĩnh/lưu vào máy chủ bằng cách sử dụng ffmpeg nhưng để gửi trực tiếp bộ đệm âm thanh đến máy chủ sẽ được công việc khó khăn.

+0

Bạn không cần 'ffmpeg' để tải lên âm thanh và có thể bạn sẽ gặp phải sự cố cấp phép khi đặt ứng dụng được tích hợp sẵn trên App Store. – damian

+0

Có thể có các tùy chọn khác cho ffmpeg, nhưng nếu bạn lo ngại về cấp phép thì không có vấn đề gì khi gửi bản dựng lên App Store vì tôi đã gửi thành công ứng dụng có triển khai ffmpeg tới App Store, nhưng bạn phải đề cập rằng bạn đang sử dụng nó ứng dụng của bạn cho mục đích tín dụng. – Yuvrajsinh

+0

ffmpeg được cấp phép LGPL. Các điều khoản của LGPL không tương thích với App Store. Về cơ bản, bạn đang vi phạm các điều khoản cấp phép ffmpeg. https://trac.ffmpeg.org/ticket/1229 – damian

Các vấn đề liên quan