Синхронная загрузка видео на YouTube с помощью Alamofire показывает неправильный порядок на канале YouTube - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь загрузить несколько видеоклипов (mp4) из моего ios приложения на YouTube в определенном порядке. Поэтому я вызываю следующий вызов загрузки при успехе первого. Но канал YouTube показывает совершенно другой порядок (сначала самый новый / самый старый, ничего не показывает правильный порядок загрузки). Ниже приведен код

func postSingleVideo(fName:String,outputURL:URL,privStat:String, details:[String:Any]){
       
       //fName - actual mp4 file name, outputURL - URL on device where clip mp4 is exported
       //details - clip metadata    
       //privStat - privacy status chosen for the clip  

        let gToken = GOOGLE_TOKEN //Google access token
        let API_URL = "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet,status&key=<mykey>"
       let headers = ["Authorization": "Bearer \(gToken)"]
       let url = URL.init(string: API_URL)
       let clipData = details
       
       let clipTitle:String = (clipData["title"] as! String)
       let clipDesc:String = (clipData["desc"] as! String)
       let strSnippet = "{'snippet':{'title' : '\(clipTitle)', 'description': '\(clipDesc)'},'status':{'privacyStatus' : '\(privStat)'}}"

        Alamofire.upload(multipartFormData:{ multipartFormData in
            multipartFormData.append(strSnippet.data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "snippet",mimeType: "application/json")
            multipartFormData.append(outputURL, withName: "video", fileName: fName, mimeType: "application/octet-stream")
             },
           usingThreshold:UInt64.init(),
           to:url!,
           method:.post,
           headers:headers,
           encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                   debugPrint(response) // this prints response of Google API response - data, result and timeline
                   print("video uploaded")
                   self.uploadSuccess = self.uploadSuccess + 1
                   if (self.uploadSuccess == self.arrSelection.count) // condition that checks of all clips are uploaded
                   {
                      self.showSuccessAlert()
                   }
                   let manager = FileManager.default
                   _ = try? manager.removeItem(at: outputURL) // after success the uploaded clip is removed and device space is freed
                   
                   if (self.uploadSuccess < self.arrSelection.count)
                   {
                       self.cropAndExportClip() 
//This function crops the next clip from the selected video and exports it to device and in turn calls this function i.e. postSingleVideo

                   //Tried with delay as well.                   
                   // _ = Timer.scheduledTimer(timeInterval:5, target: self, selector: #selector(self.cropAndExportClip), userInfo: nil, repeats: false)
                   }
                   
                }
                
            case .failure(let encodingError):
                print(encodingError)
                let alertController = UIAlertController(title: "Error!", message: fName + ":" + encodingError.localizedDescription, preferredStyle: .alert)
               
               // Create the actions
               let okAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default) {
                   UIAlertAction in
                   NSLog("Error OK Pressed")
               }
               alertController.addAction(okAction)
               self.present(alertController, animated: true, completion: nil)
            }
        })
    }

Ответ Google API показывает, что загрузка происходит в правильном порядке, как и ожидалось. Если я даю задержку, время начала каждого следующего запроса api точно после времени окончания предыдущего запроса, а разница такая же, как и задержка. Но канал YouTube не показывает порядок (фильтр - сначала самые новые), как ожидалось. Это всегда отличается от ожидаемого. например, если я загружаю в порядке 1,2,3,4, то я ожидаю, что канал покажет 4,3,2,1 (сначала самые новые), но он покажет 4,2,3,1 или любой порядок, но не последовательность. Как решить эту проблему?

...