Youtube Live API - предварительная передача трансляции запрещена с использованием OAuth

Я пытаюсь вести прямую трансляцию из своего приложения .Net с помощью Youtube.Data.Api v3. Я настроил OAuth и загрузил файл .JSON, и он отлично работает. Я знаю это, потому что я уже успешно получил список каналов, соответственно. видео в моем аккаунте, т.е. работает следующий код:

var channelsRequest = ytService.Channels.List("contentDetails, snippet");
channelsRequest.Mine = true;
var channelsListResponse = channelsRequest.Execute();

Но если я попытаюсь выполнить запрос на вставку (для полноты я покажу вам весь метод),

public static LiveBroadcast CreateImmediateBroadcast(string title = "DefaultBroadcast") {
    var snippet = new LiveBroadcastSnippet();
    snippet.Title = title;
    snippet.ScheduledStartTime = DateTime.Now;
    snippet.ScheduledEndTime = DateTime.Now + TimeSpan.FromMinutes(60);

    var status = new LiveBroadcastStatus();
    status.PrivacyStatus = "unlisted";

    var broadcast = new LiveBroadcast();
    broadcast.Kind = "youtube#liveBroadcast";
    broadcast.Snippet = snippet;
    broadcast.Status = status;

    var insertBroadcastRequest = ytService.LiveBroadcasts.Insert(broadcast, "snippet, status");
    insertBroadcastRequest.Execute();
    return broadcast;
}

Я получаю исключение при вызове insertBroadcastRequest.Execute(), а именно:

Google.GoogleApiException не был обработан

HResult = -2146233088 Сообщение = Google.Apis.Requests.RequestError

Недостаточное разрешение [403] Ошибки [Сообщение [Недостаточное разрешение] Местоположение [-] Причина [недостаточные права доступа] Домен [глобальный]] ServiceName = youtube

Источник = Google.Apis

StackTrace: в Google.Apis.Requests.ClientServiceRequest`1.Execute () в C: \ Users \ cloudsharp \ Documents \ GitHub \ google-api-dotnet-client \ Src \ Support \ GoogleApis \ Apis \ Requests \ ClientServiceRequest.cs: строка 96 в YoutubeConsole.YouTubeAPI.CreateImmediateStream (заголовок строки) в C: \ Users \ bussg \ Source \ Workspaces \ OwnExperimental \ YoutubeConsole \ YoutubeConsole \ YouTubeAPI.cs: строка 87 в YoutubeConsole.YouTubeAPI.Test () в ...

Кроме того, для полноты, я разрешаю

using (var stream = new FileStream(Directory.GetCurrentDirectory() + @"\GoogleAuthOtherApplication.json", FileMode.Open, FileAccess.Read)) {
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        new[] { YouTubeService.Scope.YoutubeForceSsl},
        "user",
        CancellationToken.None,
        new FileDataStore("YouTubeAPI")
    ).Result;
}

Также для YouTubeService.Scope я перепробовал все варианты. Метод insert должен работать с ForceSsl в соответствии с документацией.

Также эта страница документации говорит

Примечание. Канал должен быть одобрен для использования функции YouTube Live, которая позволяет владельцу канала транслировать прямой контент на этот канал. Если вы отправляете запросы API от имени аутентифицированного пользователя, чей канал не включен или не имеет права транслировать контент в реальном времени, API вернет ошибку weakPermissions.

Но все мои каналы одобрены для Youtube Live. Есть идеи, как заставить это работать?


comment
Безумно догадываюсь, что вам, вероятно, нужно быть партнером по контенту YouTube. или, может быть, этот support.google.com/youtube/answer/2474026?hl=en   -  person DaImTo    schedule 08.09.2016
comment
@DalmTo: Я уже несколько раз просматривал многие страницы документации, и нигде не упоминается, что я должен быть партнером по контенту (что вам нужно только, если вы хотите показывать рекламу в своем потоке. И относительно вашей ссылки: также проверил, что, мой канал подходит для прямых трансляций без ограничений.   -  person EluciusFTW    schedule 08.09.2016
comment
Где ты в мире?   -  person DaImTo    schedule 08.09.2016
comment
@DalmTo: в Лейпциге, Германия. Почему?   -  person EluciusFTW    schedule 09.09.2016
comment
Домен [глобальный] заставляет меня задуматься, не связано ли это с дискриминацией местоположения. Я никогда не пробовал проводить прямые трансляции, но могу протестировать ваш код из Дании, чтобы увидеть, получу ли я то же самое.   -  person DaImTo    schedule 09.09.2016
comment
@DalmTo: Конечно, было бы здорово. Могу я как-нибудь связаться с вами наедине?   -  person EluciusFTW    schedule 09.09.2016


Ответы (1)


Хорошо, после некоторого тестирования между нами по электронной почте.

  1. У вас должна быть правильная область видимости «YouTubeService.Scope.YoutubeForceSsl», изменив «пользователя», мы заставили его снова запрашивать разрешения. Мой учебник о том, как работает хранилище файловых данных в клиентской библиотеке Google .net

  2. удалите пробел «сниппет, статус», отправив «сниппет, статус», у меня это сработало.

Для удовольствия: Проблема 8568: LiveBroadcasts: вставьте - пробелы в часть

person DaImTo    schedule 09.09.2016
comment
Спасибо! Позвольте мне добавить следующее: статус и сниппет не работают сами по себе. Работает только запрос, содержащий статус И фрагмент (и, возможно, другие строки), без пробелов. - person EluciusFTW; 09.09.2016
comment
Аналогичная проблема возникнет и с запросом livestreams.insert. Там необходимо включить сниппет И cdn как параметры части в запрос. - person EluciusFTW; 09.09.2016
comment
Спасибо, что разрешили мне поиграть с новым API :) - person DaImTo; 09.09.2016