[iOS 개발] AFNetworking 서버에 음성 파일 업로드 (.mp3)

1. 비즈니스 환경


로컬 녹음 파일을caf 파일은 네트워크를 통해 서버에 업로드되고 서버는 이 파일을 로 저장합니다.mp3 형식.


2. 사고방식 실현


(1) AVAudioRecorder를 사용하여 로컬에 녹음 파일 저장


(2) AFNetworking으로 로컬을 업로드합니다.서버에 caf 파일


(3) AFNetworking의 minetype 설정과 AVAudioRecorder의 매개 변수 설정을 주의하십시오. 그렇지 않으면 오디오 프레임과 업로드에 실패할 수 있습니다.


3. 구체적인 코드 실현


(1) 녹음 도구 만들기

/*
*  AVAudioRecorder  
*/
- (AVAudioRecorder *)recorder {
    if (!_recorder) {

        // 1. 

        NSString *filePath = [path stringByAppendingPathComponent:@"ihefe_ichat.caf"];
        self.recordFileUrl = [NSURL fileURLWithPath:filePath];
        NSLog(@"filePath: %@", filePath);

        // 2. 
        NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
        //   AVFormatIDKey==kAudioFormatLinearPCM
        [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
        // (Hz)  :AVSampleRateKey==8000/44100/96000( ),  11025 mp3 
        [recordSetting setValue:[NSNumber numberWithFloat:11025.0] forKey:AVSampleRateKey];
        //   1   2 , mp3 
        [recordSetting setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];
        //   8、16、24、32
        [recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
        // 
        [recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];

        // 3. AVAudioRecorder 
        _recorder = [[AVAudioRecorder alloc] initWithURL:self.recordFileUrl settings:recordSetting error:NULL];
        _recorder.delegate = self;
        _recorder.meteringEnabled = YES;

        [_recorder prepareToRecord];
    }
    return _recorder;
}

(2) AFNetworking 파일 업로드

/*
 *   .mp3 
 */
- (void)uploadFile
{
    NSURL *mp3Url =  [NSURL URLWithString:@" "];//  .caf  

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"image/jpeg", nil];
    NSMutableDictionary *para = [NSMutableDictionary dictionary];
    para[@"action"] = @"999";
    [manager POST:@"http://push.hjourney.cn/api.php?c=Index2" parameters:para constructingBodyWithBlock:^(id  _Nonnull formData) {

        //              application/octer-stream   audio/mpeg video/mp4   application/octet-stream

        /* url      :   
         * name     :   
         * fileName :   
         * mimeType :    [mp3 : application/octer-stream application/octet-stream] [mp4 : video/mp4]
        */
        [formData appendPartWithFileURL:mp3Url name:@"video" fileName:@"xxx.mp3" mimeType:@"application/octet-stream" error:nil];

    } progress:^(NSProgress * _Nonnull uploadProgress) {

        float progress = 1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount;
        NSLog(@" -----   %f",progress);

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        NSLog(@"  %@",responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"  %@",error);
    }];
}

Demo 다운로드 주소: Demo_RecordAndPlayVoice

좋은 웹페이지 즐겨찾기