Я пытаюсь загрузить несколько видеоклипов (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 или любой порядок, но не последовательность. Как решить эту проблему?