6

Wir verwenden die YouTube Live Streaming-API in Verbindung mit der Google API PHP Client und ich kann nicht herausfinden, wie Sie eine grundlegende (voreingestellte) Aufnahme anstelle von a Gewohnheit eins.Verwenden der einfachen Aufnahme bei Verwendung der YouTube Live Streaming-API oder Vermeiden doppelter benutzerdefinierter

Benutzerdefinierte sind OK, aber aus irgendeinem Grund, auch wenn Sie sie den gleichen Namen nennen, erstellt es kontinuierlich Duplikate für jeden von Ihnen erstellten Stream.

Also meine Frage ist, wie bekommen wir es zu grundlegenden Einnahme oder in der Lage, eine benutzerdefinierte zu wählen, ohne jedes Mal ein neues zu erstellen?

Zum Beispiel hier ist die grundlegende Einnahme Sie, wenn Sie Setup einen Stream manuell in Ihrem YouTube-Konto auswählen:

YouTube encoder

Die entsprechende PHP Code:

// Create an object for the liveBroadcast resource's snippet. Specify values 
// for the snippet's title, scheduled start time, and scheduled end time. 
$broadcastSnippet = new Google_Service_YouTube_LiveBroadcastSnippet(); 
$broadcastSnippet->setTitle($this->title); 
$broadcastSnippet->setDescription($this->desc); 
$broadcastSnippet->setScheduledStartTime($this->start_time); 

// Create an object for the liveBroadcast resource's status, and set the 
// broadcast's status. 
$status = new Google_Service_YouTube_LiveBroadcastStatus(); 
$status->setPrivacyStatus($this->privacy_status); 

// Create the API request that inserts the liveBroadcast resource. 
$broadcastInsert = new Google_Service_YouTube_LiveBroadcast(); 
$broadcastInsert->setSnippet($broadcastSnippet); 
$broadcastInsert->setStatus($status); 
$broadcastInsert->setKind('youtube#liveBroadcast'); 

// Execute the request and return an object that contains information 
// about the new broadcast. 
$broadcastsResponse = $this->youtube->liveBroadcasts->insert('snippet,status', $broadcastInsert, array()); 

// Create an object for the liveStream resource's snippet. Specify a value 
// for the snippet's title. 
$streamSnippet = new Google_Service_YouTube_LiveStreamSnippet(); 
$streamSnippet->setTitle($this->stream_title); 

// Create an object for content distribution network details for the live 
// stream and specify the stream's format and ingestion type. 
$cdn = new Google_Service_YouTube_CdnSettings(); 
# TODO: Update the below `Format` method to use the new 'resolution' and 'frameRate' methods 
$cdn->setFormat($this->format); 
$cdn->setIngestionType('rtmp'); 

// Create the API request that inserts the liveStream resource. 
$streamInsert = new Google_Service_YouTube_LiveStream(); 
$streamInsert->setSnippet($streamSnippet); 
$streamInsert->setCdn($cdn); 
$streamInsert->setKind('youtube#liveStream'); 

// Execute the request and return an object that contains information 
// about the new stream. 
$streamsResponse = $this->youtube->liveStreams->insert('snippet,cdn', $streamInsert, array()); 

// Bind the broadcast to the live stream. 
$bindBroadcastResponse = $this->youtube->liveBroadcasts->bind(
    $broadcastsResponse['id'], 'id,contentDetails', 
    array(
     'streamId' => $streamsResponse['id'], 
    )); 

Antwort

0

Ok, von dem, was ich sagen kann, gibt es keine Möglichkeit zu verwenden

Sie können den Stream über den Code erstellen, wenn Sie möchten, oder manuell in der YouTube-Oberfläche erstellen.

Sobald dies erledigt ist, müssen Sie den Stream ID des Streams, den Sie mit der neuen Sendung, die Sie erstellt haben, zuordnen möchten; Ich konnte keinen Weg finden, diese Informationen über die YouTube-Oberfläche herauszufinden, so dass du es auch mit der API machen kannst.

können Sie den folgenden Code verwenden, um eine Liste von Streams mit dem list method zu bekommen:

// Execute an API request that lists the streams owned by the user who 
// authorized the request. 
$streamsResponse = $this->youtube->liveStreams->listLiveStreams('id,snippet', array(
    'mine' => 'true', 
)); 

$htmlBody .= "<h3>Live Streams</h3><ul>"; 
foreach ($streamsResponse['items'] as $streamItem) { 
    $htmlBody .= sprintf('<li>%s (%s)</li>', $streamItem['snippet']['title'], 
         $streamItem['id']); 
} 
$htmlBody .= '</ul>'; 

Beachten Sie, dass der Code über ein Stummel; Sie können ein vollständiges Beispiel bei der obigen Methode der verknüpften Liste sehen; im Grunde müssen Sie immer noch Anrufe an Google_Client, Google_Service_YouTube tätigen und stellen Sie sicher, dass Sie ein gültiges Zugriffs-Token usw. haben.

Sobald Sie Ihre Stream-ID haben, die Sie über den obigen Prozess erhalten haben sollten; Sie können dann so etwas wie die unten tun, dass bestimmte Strom Sie verwenden möchten:

// Create an object for the liveBroadcast resource's snippet. Specify values 
// for the snippet's title, scheduled start time, and scheduled end time. 
$broadcastSnippet = new Google_Service_YouTube_LiveBroadcastSnippet(); 
$broadcastSnippet->setTitle($this->title); 
$broadcastSnippet->setDescription($this->desc); 
$broadcastSnippet->setScheduledStartTime($this->start_time); 

// Create an object for the liveBroadcast resource's status, and set the 
// broadcast's status. 
$status = new Google_Service_YouTube_LiveBroadcastStatus(); 
$status->setPrivacyStatus($this->privacy_status); 

// Create the API request that inserts the liveBroadcast resource. 
$broadcastInsert = new Google_Service_YouTube_LiveBroadcast(); 
$broadcastInsert->setSnippet($broadcastSnippet); 
$broadcastInsert->setStatus($status); 
$broadcastInsert->setKind('youtube#liveBroadcast'); 

// Execute the request and return an object that contains information 
// about the new broadcast. 
$broadcastsResponse = $this->youtube->liveBroadcasts->insert('snippet,status', $broadcastInsert, array()); 

// Bind the broadcast to the live stream. 
$bindBroadcastResponse = $this->youtube->liveBroadcasts->bind(
    $broadcastsResponse['id'], 'id,contentDetails', 
    array(
     'streamId' => 'stream_id_here', // <-- Insert your stream ID here 
    )); 

Auch der obige Code ist ein Stummel.

Also im Grunde die Quintessenz ist, sobald Sie Ihre Stream-ID Sie verwenden möchten, können Sie die Erstellung eines Stream-Code vollständig entfernen und dann einfach in die Stream-ID übergeben sollten Sie bereits in den Aufruf an die bind Methode und Sie sollten gut sein.

Hoffentlich hilft das jemand anderem.

2

I‘ Ich bin mir nicht sicher, was Sie mit "Grundeinnahme" meinen. Gemäß der API ist die einzige einstellbare Aufnahmeeigenschaft cdn.ingestionType, die zu diesem Zeitpunkt nur RTMP-Aufnahme unterstützt.

Die Entsprechung der Encodereinstellungen, die Sie im Webportal sehen, war der Wert cdn.format, der eine Schnittstelle zur Auswahl des Bitratenauflösungspaars für Ihren Live Broadcast bietet. Diese Immobilie wurde am 18. April 2016 zugunsten zweier neuer Immobilien veraltet: cdn.frameRate und cdn.resolution. Die im Webportal aufgeführten Bitratenwerte sind die empfohlenen Bitraten für jede Auflösung, die von Ihrem Encoder und nicht von der API konfiguriert werden.

Korrekte Einstellung benutzerdefinierte cdn Formate sollten keine doppelten Live Stream-Objekte verursachen. Es könnte einen Fehler in Ihrem Code geben. Wenn Sie der Meinung sind, dass dies ein API-Fehler ist, empfehle ich, ein Ticket für Google here zu öffnen.

+0

Aktualisierte Frage, um ein Beispiel für * basic ingestion * zu zeigen. – Brett

+0

@Brett hat meine Antwort aktualisiert. – JAL

+0

Ja, ich kenne das veraltete 'cdn.format', aber unglücklicherweise hat der' Google API PHP Client' keine Unterstützung für die neue Art, dies zu tun, noch AFAIK; zumindest im Zweig V1. – Brett