2017-01-12 3 views
0

с использованием AVFoundation для записи видео и отправки его на сервер. Всякий раз, когда сервер с моим записанным видео, он возвращает ошибку внутреннего сервера. Но когда я загружаю какое-то фиктивное видео, отличное от моего, оно загружается успешно. Добавление кода ниже.Не удалось загрузить записанное видео на сервер с помощью AVFoundation - Swift 3

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]) 
     let logsPath = documentsPath.appendingPathComponent(GlobalVar.interVCode) 


    if !FileManager.default.fileExists(atPath: (logsPath?.absoluteString)!){ 
    do { 
     try FileManager.default.createDirectory(at: logsPath!, withIntermediateDirectories: true, attributes: nil) 
        } catch let error as NSError { 
     NSLog("Unable to create directory \(error.debugDescription)") 
    } 
    } 
    let outputURL: URL = (self.applicationDocumentsDirectory().appendingPathComponent(GlobalVar.interVCode)?.appendingPathComponent("\(questionId)").appendingPathExtension("mp4"))! 


self.camera.startRecording(withOutputUrl: outputURL, didRecord: 

{(camera, outputURL, error) in 

    }) 

Использование пользовательского контроллера камеры LLSimpleCamera для начала записи. Ниже приведен код для начала записи.

 - (void)startRecordingWithOutputUrl:(NSURL *)url didRecord:(void (^)(LLSimpleCamera *camera, NSURL *outputFileUrl, NSError *error))completionBlock 
{ 
    // check if video is enabled 
    if(!self.videoEnabled) { 
     NSError *error = [NSError errorWithDomain:LLSimpleCameraErrorDomain 
               code:LLSimpleCameraErrorCodeVideoNotEnabled 
             userInfo:nil]; 
     [self passError:error]; 
     return; 
    } 

    if(self.flash == LLCameraFlashOn) { 
     [self enableTorch:YES]; 
    } 

    // set video orientation 
    for(AVCaptureConnection *connection in [self.movieFileOutput connections]) { 
     for (AVCaptureInputPort *port in [connection inputPorts]) { 
      // get only the video media types 
      if ([[port mediaType] isEqual:AVMediaTypeVideo]) { 
       if ([connection isVideoOrientationSupported]) { 
        [connection setVideoOrientation:[self orientationForConnection]]; 
       } 
      } 
     } 
    } 

    self.didRecordCompletionBlock = completionBlock; 

    [self.movieFileOutput startRecordingToOutputFileURL:url recordingDelegate:self]; 
} 

Помощь очень ценится.

ответ

1

Я использую UIImagePickerController для записи и загрузки на сервер

if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){ 

    imagePicker.delegate = self 
    imagePicker.sourceType = .camera 
    imagePicker.mediaTypes = [kUTTypeMovie as NSString as String] 
    imagePicker.allowsEditing = false 
    imagePicker.videoMaximumDuration = TimeInterval(10.0) 

    self.present(imagePicker, animated: true, completion: nil) 
    } 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    picker .dismiss(animated: true, completion: nil) 



    let mediaType = info[UIImagePickerControllerMediaType] as! NSString 

    if mediaType == kUTTypeMovie { 
     guard let path = (info[UIImagePickerControllerMediaURL] as! NSURL).path else { return } 
     if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path) { 
if let fileURL = info[UIImagePickerControllerMediaURL] as? NSURL { 
       if let videoData = NSData(contentsOf: fileURL as URL) { 
        print(videoData.length) 

        let fileManager = FileManager.default 
        let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("xyz.mov") 
        fileManager.createFile(atPath: paths as String, contents: videoData as Data, attributes: nil) 
       } 
      } 


     } 
    }else{ 
    } 

} 

Используйте метод для извлечения данных видео из каталога документов и загрузить на сервер

func uploadVideo(_ userDetails : [String : AnyObject]) { 

    let imagePAth = URL(fileURLWithPath:(self.getDirectoryPath() as NSString).appendingPathComponent("xyz.mov")) 

    //let videoData = UIImage(contentsOfFile: imagePAth)! 

    do {let data = try Data(contentsOf: imagePAth) 

     print(data) 
} catch { 
     print(error) 
    } 



} 
+0

При преобразовании в NSData 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00 00000000000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00> печать этого .. с фиктивным видео, показывающим некоторые другие значения. –

Смежные вопросы