Démarrer YouTube Live Streaming par l'API
Je rencontre un problème avec les API YouTube, j'utilise ("google/apiclient": "2.7")
J'ai créé une diffusion et l'ai liée au flux, puis j'ai ajouté l'URL RTMP en tant que point de terminaison à mon flux en direct. Mais je n'ai pas trouvé de moyen de démarrer la diffusion en direct sur YouTube (après le démarrage en direct d'origine).
$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()));
}
J'ai trouvé ces options dans la salle de gestion YouTube, mais je ne les ai pas trouvées dans l'API

des solutions?
Réponses
D'après la docs, vous avez à votre disposition les deux propriétés suivantes de LiveBroadcasts resource:
contentDetails.enableAutoStart (booléen)
Indique si cette diffusion doit démarrer automatiquement lorsque vous démarrez la diffusion vidéo sur le flux en direct lié .contentDetails.enableAutoStop (booléen)
Indique si cette diffusion doit s'arrêter automatiquement environ une minute après que le propriétaire de la chaîne a arrêté de diffuser la vidéo sur le flux vidéo lié.
Ces deux propriétés peuvent être définies à votre guise via les deux points de terminaison de modification LiveBroadscasts.insertet Livebroadcasts.update.
Wrt votre code, vous auriez à faire quelque chose comme:
$contentDetails = new Google_Service_YouTube_LiveBroadcastContentDetails();
$contentDetails->setEnableAutoStart(true);
$contentDetails->setEnableAutoStop(true);
alors aussi:
$broadcastInsert->setContentDetails($contentDetails);
et remplacez l'appel à $youtube->liveBroadcasts->insert
par :
$broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status,contentDetails', $broadcastInsert, array());