3

Ich versuche, Live aus meiner .Net-Anwendung mit Youtube.Data.Api v3 zu übertragen. Ich habe OAuth eingerichtet und die .JSON-Datei heruntergeladen, und das funktioniert einwandfrei. Ich weiß das, weil ich bereits eine Liste von Kanälen bzw. (Zeige ich Ihnen die ganze Methode auf Vollständigkeit)Youtube Live API - Broadcast-Übertragung verweigert mit OAuth

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

Aber wenn ich versuche, einen Einsatz Anforderung auszuführen,

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; 
} 

ich eine Ausnahme erhalten, wenn: Videos auf meinem Konto, also folgender Code funktioniert Aufruf insertBroadcastRequest.Execute(), nämlich:

Google.GoogleApiException wurde nicht behandelt

HResult = -2146233088 Message = Google.Apis.Requests.RequestError

Unzureichende Berechtigung [403] Fehler [ Nachricht [Unzureichende Berechtigung] Standort [-] Grund [insufficientPermissions] Domain [global] ] Servicename = youtube

Source = Google.Apis

Stacktrace: bei Google.Apis.Requests.ClientServiceRequest`1.Execute() in C: \ Benutzer \ cloudsharp \ Dokumente \ GitHub \ google-api-dotnet-Client \ Src \ Support \ GoogleApis \ Apis \ Anfragen \ ClientServiceRequest.cs: Zeile 96 bei YoutubeConsole.YouTubeAPI.CreateImmediateStream (String title) in C: \ Users \ bussg \ Source \ Workspaces \ OwnExperimental \ YoutubeConsole \ YoutubeConsole \ YouTubeAPI.cs: Linie 87 bei YoutubeConsole.YouTubeAPI.Test() in ...

auch für die Vollständigkeit, hier ist meine Genehmigung,

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; 
} 

auch für die YouTubeService.Scope ich habe alle Optionen ausprobiert. Die Methode insert sollte mit ForceSsl gemäß der documentation funktionieren.

Auch this documentation page sais

Hinweis: Ein Kanal genehmigt werden muss die YouTube-Live-Funktion zu verwenden, die den Kanalinhaber ermöglicht, diesen Kanal Live-Inhalte zu streamen. Wenn Sie API-Anforderungen im Namen eines authentifizierten Benutzers senden, dessen Kanal nicht aktiviert oder zum Streamen von Live-Inhalten berechtigt ist, gibt die API einen Fehler mit unzureichenden Berechtigungen zurück.

Aber alle meine Kanäle sind für Youtube Live zugelassen. Irgendwelche Ideen wie man das zum Laufen bringt?

+0

wilde erraten Sie wahrscheinlich ein YouTube-Content-Partner sein. oder vielleicht https://support.google.com/youtube/answer/2474026?hl=de – DaImTo

+0

@Dalmto: Ich habe viele der Dokumentationsseiten bereits mehrfach durchforstet, und nirgends erwähnen sie, dass sie Content-Partner sein müssen (das brauchst du nur, wenn du Werbung in deinem Stream anzeigen willst Und bezüglich deines Links: Habe auch nachgesehen, mein Kanal ist für Live Treaming ohne Einschränkungen geeignet – EluciusFTW

+0

Wo bist du auf der Welt? – DaImTo

Antwort

2

Ok nach einigen Tests zwischen uns über E-Mail.

  1. Sie müssen den richtigen Bereich „YouTubeService.Scope.YoutubeForceSsl“ haben, von „user“ Ändern wir gezwungen, es wieder auf Anfrage Berechtigungen. Meine tutorial darüber, wie filedata Store in Google funktioniert.net client library

  2. entfernen sie den platz "snippet, status" durch send "schnipsel, status" es hat für mich funktioniert.

Für den Spaß an der Sache: Issue 8568:LiveBroadcasts: insert - spaces in part

+0

Danke! Lassen Sie mich folgendes hinzufügen: "status" und "snippet" funktionieren nicht von selbst. Nur eine Anfrage mit "status" UND " Snippet "(und möglicherweise mehr Zeichenfolgen), und keine Leerzeichen, funktioniert. – EluciusFTW

+0

Auch ein ähnliches Problem wird für die 'livestreams.insert' Anfrage auftreten. Dort ist es notwendig, "snippet" AND "cdn" als Teilparameter in die Anfrage aufzunehmen. – EluciusFTW

+0

Danke, dass ich mit einer neuen API spielen darf :) – DaImTo

Verwandte Themen