Inicie a transmissão ao vivo do YouTube pela API
Estou enfrentando um problema com as APIs do YouTube, estou usando ("google/apiclient": "2.7")
Eu criei a transmissão e a vincule à transmissão, em seguida, adicionei o URL RTMP como um ponto de extremidade à minha transmissão ao vivo, mas não consegui encontrar uma maneira de iniciar a transmissão ao vivo no YouTube (após o início da transmissão ao vivo original)
$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()));
}
Encontrei essas opções na sala de gerenciamento do YouTube, mas não consegui encontrá-las na API
alguma solução?
Respostas
De acordo com os documentos, você tem à sua disposição as duas seguintes propriedades de LiveBroadcasts resource:
contentDetails.enableAutoStart (booleano)
Indica se esta transmissão deve iniciar automaticamente quando você iniciar o streaming de vídeo na transmissão ao vivo vinculada .contentDetails.enableAutoStop (booleano)
Indica se esta transmissão deve parar automaticamente cerca de um minuto depois que o proprietário do canal parar de transmitir vídeo no fluxo de vídeo vinculado.
Essas duas propriedades podem ser definidas à sua vontade por meio dos dois pontos de extremidade modificadores LiveBroadscasts.inserte Livebroadcasts.update.
Escreva seu código, você teria que fazer algo como:
$contentDetails = new Google_Service_YouTube_LiveBroadcastContentDetails();
$contentDetails->setEnableAutoStart(true);
$contentDetails->setEnableAutoStop(true);
então também:
$broadcastInsert->setContentDetails($contentDetails);
e substitua a chamada para $youtube->liveBroadcasts->insertpor:
$broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status,contentDetails', $broadcastInsert, array());