Не удалось загрузить видео с использованием API API Youtube rest - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь загрузить видео на YouTube с помощью REST API YouTube через Swift из приложения ios, но мне очень трудно понять, что делать.Я использовал следующий код для загрузки видео на 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

Пожалуйста, проверьте это изображение Пожалуйста, помогите

1 Ответ

0 голосов
/ 10 октября 2018

Обычно это происходит по двум причинам:

  1. Если видео слишком велико, иногда при загрузке может быть пропущено несколько пакетов данных.Это приведет к сбою кодирования видео.

  2. Загрузка была выполнена правильно, но кодирование видео завершилось неудачно в конце YouTube.

Мало что может бытьпроверил, чтобы отладить / исправить проблему:

  1. вы получили идентификатор видео в ответе.Выполните вызов get по идентификатору и проверьте, указана ли причина отказа в ответе.

  2. , если размер видеофайла велик, то лучше выбрать chunk upload overзагрузка из нескольких частей.

...