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