Начать прямую трансляцию YouTube с помощью API
У меня проблема с API YouTube, я использую ("google / apiclient": "2.7")
Я создал трансляцию и привязал ее к потоку, а затем добавил URL-адрес RTMP в качестве конечной точки в свой прямой эфир. Но я не смог найти способ начать прямую трансляцию на YouTube (после того, как начнется исходная прямая трансляция)
$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()));
}
Я нашел эти параметры в разделе управления YouTube, но не смог найти их в API.

любые решения?
Ответы
Согласно документации, в вашем распоряжении есть следующие два свойства LiveBroadcasts resource:
contentDetails.enableAutoStart (boolean)
Указывает, должна ли эта трансляция запускаться автоматически при запуске потоковой передачи видео в привязанном прямом потоке .contentDetails.enableAutoStop (boolean)
Указывает, должна ли эта трансляция автоматически прекращаться примерно через одну минуту после того, как владелец канала прекращает потоковую передачу видео в привязанном видеопотоке.
Эти два свойства могут быть установлены по вашему желанию с помощью двух изменяющих конечных точек LiveBroadscasts.insertи Livebroadcasts.update.
Написав свой код, вам нужно будет сделать что-то вроде:
$contentDetails = new Google_Service_YouTube_LiveBroadcastContentDetails(); $contentDetails->setEnableAutoStart(true);
$contentDetails->setEnableAutoStop(true);
тогда также:
$broadcastInsert->setContentDetails($contentDetails);
и замените вызов на $youtube->liveBroadcasts->insert
:
$broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status,contentDetails', $broadcastInsert, array());