swift - 在 Swift 中将视频上传到 YouTube

标签 swift rest video youtube upload

编辑:仍然经常检查这个,当我或其他人帮助我解决问题时将标记为已解决!

我正在尝试通过 Swift 使用 YouTube 的 REST API 将视频上传到 YouTube,但我很难弄清楚该怎么做。我目前有一个有效的 GET 请求。

我对应该如何构建 POST 请求 URL 以及文件位置在请求中的位置感到困惑。另外我认为我应该使用可恢复上传协议(protocol)?

两天来,我一直在努力浏览各种 API 和文档,感到绝望。

这是我的 GET 请求的工作代码。

func getRequestVideoInfo(){
    // Set up your URL
    let youtubeApi = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet%2C+statistics&id=AKiiekaEHhI&key=" + apiKey
    let url = NSURL(string: youtubeApi)

    // Create your request
    let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
        do {
            if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [String : AnyObject] {

                print("Response from YouTube: \(jsonResult)")
            }
        }
        catch {
            print("json error: \(error)")
        }

    })

    // Start the request
    task.resume()
}

最佳答案

注意(截至 2019 年 10 月 6 日) YouTube 已将 API 配额减少到每天 10,000 个单位。这相当于在 24 小时内上传 4 个 YouTube 视频。如果您的应用程序用例依赖于上传许多 YouTube 视频,我强烈建议您重新考虑。你可以申请扩大你的每日配额,但众所周知,谷歌回复你的速度很慢,即使他们真的回复了。


是的,您需要在 YouTube 中创建应用/项目并使用 OAuth 2.0 Flow 将视频发布/插入到您获得授权访问权限的 channel 。

从 Google 获得访问 token 后

按如下方式使用 Alamofire:

func postVideoToYouTube(token: String, callback: Bool -> Void){

    let headers = ["Authorization": "Bearer \(token)"]

    let path = NSBundle.mainBundle().pathForResource("video", ofType: "mp4")
    let videodata: NSData = NSData.dataWithContentsOfMappedFile(path!)! as! NSData
    upload(
        .POST,
        "https://www.googleapis.com/upload/youtube/v3/videos?part=id",
        headers: headers,
        multipartFormData: { multipartFormData in
            multipartFormData.appendBodyPart(data: videodata, name: "video", fileName: "video.mp4", mimeType: "application/octet-stream")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { request, response, error in
                    print(response)
                    callback(true)
                }
            case .Failure(_):
                callback(false)
            }
        })
}

像这样调用post函数:

postVideoToYouTube(accessToken, callback: { success in
if success { }
})

关于swift - 在 Swift 中将视频上传到 YouTube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35053431/

相关文章:

ios - UICollectionView - insertItems(在 : indexPath) not working

ios - 下载并使用大量头像

Swift,从文件txt中分离字符串

java - 测试 Spring Boot REST API

用于 HTML5 视频播放的 jQuery 插件?

javascript - AngularJS 从 MongoDB GridFS 播放视频

Python获取ffmpeg进程

objective-c - 无法将 Float 类型的值转换为预期的参数类型 NSNumber

c# - Webapi 计算特定的获取请求

javascript - 如何在 SAHI 中使用 javascript ajax api