使用 Youtube rest API 上传的视频失败
Uploded Video using Youtube rest API getting Failed
我正在尝试通过 ios 应用程序中的 Swift 使用 YouTube 的 REST API 将视频上传到 YouTube,但我很难弄清楚该怎么做。我使用以下代码从应用程序将视频上传到 youtube。
func postVideoToYouTube(uploadUrl: String, videoData: Data, title: String, description: String, callback: @escaping PostVideoCallback){
if (self.authorizer != nil) && (self.authorizer?.canAuthorize)! {
self.servive?.apiKey = kGoogleAPIKey
self.servive?.authorizer = authorizer
let status = GTLRYouTube_VideoStatus()
status.privacyStatus = "public"
let snippet = GTLRYouTube_VideoSnippet()
snippet.title = title
let desc = description
if desc.count > 0 {
snippet.descriptionProperty = desc
}
var video = GTLRYouTube_Video()
video.status = status
video.snippet = snippet
// ---------------------
let accessToken = UserDefaults.standard.string(forKey: kAccessToken) ?? ""
let headers: HTTPHeaders = ["Authorization": "Bearer \(accessToken)"]
Alamofire.upload(
multipartFormData: { multipartFormData in
let metadata = "{'snippet':{'title' : '\(title)', 'description': '\(description)'}}".data(using: .utf8, allowLossyConversion: false)!
multipartFormData.append(metadata, withName: "snippet", mimeType: "application/json")
multipartFormData.append(videoData, withName: "video", fileName: "demo2.mov", mimeType: "application/octet-stream")
},
to: "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet",
headers: headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
print(response.result.value)
do {
let jsonData = try JSONSerialization.jsonObject(with: response.data!, options: .allowFragments) as! JSON
} catch {
print("error serializing JSON: \(error)")
callback("", false)
}
print("Success")
}
case .failure(_):
print("Failure")
callback("", false)
}
})
}
}
我正在关注 Youtube 的回复
`Optional({
etag = "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/CAh7qTdnefHn2x9Fdt7z11TW1HM\"";
id = muradZ51g78;
kind = "youtube#video";
snippet = {
categoryId = 22;
channelId = UCfI1223CGZiSGVKhapRfc4Q;
channelTitle = "Khushbu Desai";
description = Test;
liveBroadcastContent = none;
localized = {
description = Test;
title = Video;
};
publishedAt = "2018-10-10T07:09:40.000Z";
thumbnails = {
default = {
height = 90;
url = "https://i.ytimg.com/vi/muradZ51g78/default.jpg";
width = 120;
};
high = {
height = 360;
url = "https://i.ytimg.com/vi/muradZ51g78/hqdefault.jpg";
width = 480;
};
medium = {
height = 180;
url = "https://i.ytimg.com/vi/muradZ51g78/mqdefault.jpg";
width = 320;
};
};
title = Video;
};
})
Success`
但我没有在我的频道上找到该视频。因为我在 youtube Studio 上收到视频失败
Please check This Image
请帮助
这通常有两个原因:
如果视频太大,上传时有时会漏掉几个数据包。这将导致视频编码失败。
确实上传正确,但视频编码在 youtube 端失败。
很少有事情可以检查 debug/fix 问题:
您已在回复中收到视频的 ID。通过 Id 调用 get 并检查响应中是否提到失败原因。
如果视频文件很大,那么最好选择 chunk 上传而不是分段上传。
我正在尝试通过 ios 应用程序中的 Swift 使用 YouTube 的 REST API 将视频上传到 YouTube,但我很难弄清楚该怎么做。我使用以下代码从应用程序将视频上传到 youtube。
func postVideoToYouTube(uploadUrl: String, videoData: Data, title: String, description: String, callback: @escaping PostVideoCallback){
if (self.authorizer != nil) && (self.authorizer?.canAuthorize)! {
self.servive?.apiKey = kGoogleAPIKey
self.servive?.authorizer = authorizer
let status = GTLRYouTube_VideoStatus()
status.privacyStatus = "public"
let snippet = GTLRYouTube_VideoSnippet()
snippet.title = title
let desc = description
if desc.count > 0 {
snippet.descriptionProperty = desc
}
var video = GTLRYouTube_Video()
video.status = status
video.snippet = snippet
// ---------------------
let accessToken = UserDefaults.standard.string(forKey: kAccessToken) ?? ""
let headers: HTTPHeaders = ["Authorization": "Bearer \(accessToken)"]
Alamofire.upload(
multipartFormData: { multipartFormData in
let metadata = "{'snippet':{'title' : '\(title)', 'description': '\(description)'}}".data(using: .utf8, allowLossyConversion: false)!
multipartFormData.append(metadata, withName: "snippet", mimeType: "application/json")
multipartFormData.append(videoData, withName: "video", fileName: "demo2.mov", mimeType: "application/octet-stream")
},
to: "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet",
headers: headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
print(response.result.value)
do {
let jsonData = try JSONSerialization.jsonObject(with: response.data!, options: .allowFragments) as! JSON
} catch {
print("error serializing JSON: \(error)")
callback("", false)
}
print("Success")
}
case .failure(_):
print("Failure")
callback("", false)
}
})
}
}
我正在关注 Youtube 的回复
`Optional({
etag = "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/CAh7qTdnefHn2x9Fdt7z11TW1HM\"";
id = muradZ51g78;
kind = "youtube#video";
snippet = {
categoryId = 22;
channelId = UCfI1223CGZiSGVKhapRfc4Q;
channelTitle = "Khushbu Desai";
description = Test;
liveBroadcastContent = none;
localized = {
description = Test;
title = Video;
};
publishedAt = "2018-10-10T07:09:40.000Z";
thumbnails = {
default = {
height = 90;
url = "https://i.ytimg.com/vi/muradZ51g78/default.jpg";
width = 120;
};
high = {
height = 360;
url = "https://i.ytimg.com/vi/muradZ51g78/hqdefault.jpg";
width = 480;
};
medium = {
height = 180;
url = "https://i.ytimg.com/vi/muradZ51g78/mqdefault.jpg";
width = 320;
};
};
title = Video;
};
})
Success`
但我没有在我的频道上找到该视频。因为我在 youtube Studio 上收到视频失败
Please check This Image 请帮助
这通常有两个原因:
如果视频太大,上传时有时会漏掉几个数据包。这将导致视频编码失败。
确实上传正确,但视频编码在 youtube 端失败。
很少有事情可以检查 debug/fix 问题:
您已在回复中收到视频的 ID。通过 Id 调用 get 并检查响应中是否提到失败原因。
如果视频文件很大,那么最好选择 chunk 上传而不是分段上传。