Frage Verwenden der einfachen Aufnahme bei Verwendung der YouTube Live Streaming API oder Vermeidung von doppelten benutzerdefinierten


Wir verwenden die YouTube Live Streaming API in Verbindung mit der Google API PHP-Client und ich kann nicht herausfinden, wie man eine einfache (voreingestellte) Aufnahme statt einer benutzerdefinierten verwenden kann.

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

Also meine Frage ist, wie bekommen wir es, um grundlegende Aufnahme zu verwenden oder in der Lage zu sein, eine benutzerdefinierte zu wählen, ohne jedes Mal eine neue zu erstellen?

Hier sehen Sie zum Beispiel die grundlegende Aufnahme, die Sie auswählen können, wenn Sie einen Stream manuell in Ihrem YouTube-Konto einrichten:

YouTube encoder

Das relevante 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'],
    ));

6
2018-05-01 09:21


Ursprung


Antworten:


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

Die Entsprechung der Encodereinstellungen, die Sie im Webportal sehen, war die cdn.format Wert, zur Verfügung gestellt eine Schnittstelle zu Bitrate-Auflösung-Paar für Ihre Live-Sendung auswählen. Diese Liegenschaft 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.

Benutzerdefiniert einstellen 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 zu öffnen Hier.


2
2018-05-04 12:58



Ok, von dem, was ich sagen kann, gibt es keine Möglichkeit zu verwenden grundlegende Einnahme aber ich habe herausgefunden, wie man eine bestehende benutzerdefinierte Aufnahme verwenden kann.

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

Sobald dies erledigt ist, müssen Sie den Stream erhalten ID des Streams, den Sie mit der von Ihnen erstellten neuen Übertragung verknüpfen 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.

Sie können den folgenden Code verwenden, um eine Liste von Streams mit dem zu erhalten Listenmethode:

// 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 obige Code ein ist Stub; Sie können ein vollständiges Beispiel bei der obigen Methode der verknüpften Liste sehen; im Grunde werden Sie immer noch anrufen müssen Google_Client, Google_Service_YouTube und stellen Sie sicher, dass Sie ein gültiges Zugriffs-Token usw. haben.

Sobald du dein hast Stream-ID was du über den obigen Prozess erhalten hättest; Sie können dann wie folgt vorgehen, um den gewünschten Stream zu verwenden:

// 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 hier ist der obige Code a Stub.

Im Grunde genommen ist die Quintessenz: Sobald Sie Ihre Stream - ID haben, die Sie verwenden möchten, können Sie die Erstellung eines Stream - Codes komplett entfernen und dann einfach in die Stream-ID Du solltest schon in den Anruf zum bind Methode und Sie sollten gut sein.

Hoffentlich hilft das jemand anderem.


0
2018-05-07 07:31