Starten Sie YouTube Live Streaming über die API
Ich habe ein Problem mit den von mir verwendeten YouTube-APIs ("google/apiclient": "2.7")
Ich habe eine Übertragung erstellt und an den Stream gebunden und dann die RTMP-URL als Endpunkt zu meinem Live-Stream hinzugefügt. Ich konnte jedoch keine Möglichkeit finden, das Live-Streaming auf YouTube zu starten (nachdem das ursprüngliche Live gestartet wurde).
$access_token = $data['yt-access-token'];
$title = $data['title'];
$description = $data['description'];
//=======================================//
$client = new Google_Client();
$client->setClientId(env('GOOGLE_APP_ID'));
$client->setClientSecret(env('GOOGLE_SECRET'));
$client->setScopes('https://www.googleapis.com/auth/youtube');
$client->setAccessToken($access_token);
// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);
//=======================================//
try {
// 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($title);
$broadcastSnippet->setDescription($description);
$broadcastSnippet->setScheduledStartTime('2020-08-20T00:00:00.000Z');
$broadcastSnippet->setScheduledEndTime('2020-08-25T00:00:00.000Z');
// Create an object for the liveBroadcast resource's status, and set the
// broadcast's status to "private".
$status = new Google_Service_YouTube_LiveBroadcastStatus();
$status->setPrivacyStatus('public'); //private or public
// 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 = $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($title.' Stream');
// 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();
$cdn->setFormat("1080p");
$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 = $youtube->liveStreams->insert('snippet,cdn', $streamInsert, array());
// Bind the broadcast to the live stream.
$bindBroadcastResponse = $youtube->liveBroadcasts->bind(
$broadcastsResponse['id'],'id,contentDetails',
array(
'streamId' => $streamsResponse['id'],
)
);
$id = $streamsResponse->id;
$rtmp_url = $streamsResponse->cdn->ingestionInfo->ingestionAddress.'/'.$streamsResponse->cdn->ingestionInfo->streamName;
return [
'id' => $id,
'rtmp_url' => $rtmp_url
];
} catch (Google_Service_Exception $e) {
$htmlBody = sprintf('<p>A service error occurred: <code>%s</code></p>',
htmlspecialchars($e->getMessage()));
} catch (Google_Exception $e) {
$htmlBody = sprintf('<p>An client error occurred: <code>%s</code></p>',
htmlspecialchars($e->getMessage()));
}
Ich habe diese Optionen im YouTube-Verwaltungsraum gefunden, aber ich konnte sie nicht in der API finden
irgendwelche Lösungen?
Antworten
Laut den Dokumenten stehen Ihnen die folgenden zwei Eigenschaften von zur Verfügung LiveBroadcasts resource:
contentDetails.enableAutoStart (boolesch)
Gibt an, ob diese Übertragung automatisch gestartet werden soll, wenn Sie mit dem Streamen von Videos im gebundenen Live-Stream beginnen .contentDetails.enableAutoStop (boolesch)
Gibt an, ob diese Übertragung etwa eine Minute, nachdem der Kanalbesitzer das Streamen von Videos im gebundenen Videostream beendet hat, automatisch beendet werden soll.
Diese beiden Eigenschaften können nach Belieben über die beiden modifizierenden Endpunkte LiveBroadscasts.insertund eingestellt werden Livebroadcasts.update.
Wrt Ihren Code, müssten Sie so etwas tun:
$contentDetails = new Google_Service_YouTube_LiveBroadcastContentDetails();
$contentDetails->setEnableAutoStart(true);
$contentDetails->setEnableAutoStop(true);
dann auch:
$broadcastInsert->setContentDetails($contentDetails);
und ersetzen Sie den Aufruf von $youtube->liveBroadcasts->insertmit:
$broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status,contentDetails', $broadcastInsert, array());