Использование базовой загрузки при использовании YouTube Live Streaming API или избегание дублирования пользовательских

Мы используем API потоковой передачи YouTube в сочетании с API Google PHP. Клиент и я не можем решить, как заставить его использовать базовый (предустановленный) прием, а не пользовательский.

С пользовательскими все в порядке, но по какой-то причине, даже если вы называете их одним и тем же именем, они постоянно создают дубликаты для каждого создаваемого вами потока.

Итак, мой вопрос: как заставить его использовать базовый прием или иметь возможность выбирать пользовательский, не создавая каждый раз новый?

Например, вот базовый прием, который вы можете выбрать, когда вручную настраиваете поток в своей учетной записи YouTube:

Кодировщик YouTube

Соответствующий код PHP:

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



Ответы (2)


Я не уверен, что вы подразумеваете под "основным приемом пищи". Согласно API, единственное настраиваемое свойство приема — cdn.ingestionType, которое в настоящее время поддерживает только прием RTMP.

Эквивалентом настроек кодировщика, который вы видите на веб-портале, является cdn.format , предоставил интерфейс для выбора пары битрейт-разрешение для прямой трансляции. Это свойство устарело 18 апреля 2016 г. Вместо него появились два новых свойства: cdn.frameRate и cdn.resolution. Значения битрейта, указанные на веб-портале, являются рекомендуемыми битрейтами для каждого разрешения, которые настраиваются вашим кодировщиком, а не API.

Правильная настройка пользовательских форматов cdn не должна приводить к дублированию объектов Live Stream. В вашем коде может быть ошибка. Если вы считаете, что это дефект API, я рекомендую открыть тикет для Google здесь.

person JAL    schedule 04.05.2016
comment
Обновлен вопрос, чтобы показать пример базового приема. - person Brett; 04.05.2016
comment
Да, я знаю об устаревшем cdn.format, но, к сожалению, Google API PHP Client еще не добавил поддержку нового способа сделать это, насколько мне известно; по крайней мере в ветке V1. - person Brett; 04.05.2016
comment
@Brett звучит как дефект с оболочкой PHP для меня. Вы открывали вопрос на странице проекта GitHub или в gdata-issues? - person JAL; 04.05.2016
comment
На прошлой неделе я открыл вопрос на странице клиента php о том, когда будет добавлена ​​​​поддержка; но пока ничего не открывал. - person Brett; 04.05.2016
comment
Да, я бы также сообщил о проблеме на странице gdata-issues Google Code: code.google.com/p/gdata-issues/issues/list?q=label:APi-YouTube - person JAL; 05.05.2016
comment
Вы уверены, что это проблема? Думал, а может быть, предполагается создавать поток каждый раз, даже если он имеет одно и то же имя, и если вы хотите использовать существующий, есть ли другой способ сделать это? - person Brett; 06.05.2016

Хорошо, из того, что я могу сказать, нет способа использовать базовый прием, но я понял, как заставить его использовать существующий настраиваемый прием.

Вы можете создать поток с помощью кода, если хотите, или создать его вручную в интерфейсе YouTube.

Как только это будет сделано, вам нужно будет получить поток ID потока, который вы хотите связать с новой созданной вами трансляцией; Я не мог сказать, как узнать эту информацию через интерфейс YouTube, поэтому вы можете сделать это и с помощью API.

Вы можете использовать следующий код, чтобы получить список потоков с помощью метода list< /а>:

// 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>';

Обратите внимание, что приведенный выше код является заглушкой; вы можете увидеть полный пример в методе связанного списка выше; в основном вам все равно нужно будет звонить Google_Client, Google_Service_YouTube и убедиться, что у вас есть действительный токен доступа и т. д..

Когда у вас есть идентификатор потока, который вы должны были получить с помощью описанного выше процесса; затем вы можете сделать что-то вроде следующего, чтобы использовать этот конкретный поток, который вы хотите:

// 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
    ));

Опять же, приведенный выше код является заглушкой.

Таким образом, суть в том, что когда у вас есть идентификатор потока, который вы хотите использовать, вы можете полностью удалить создание кода потока, а затем просто передать идентификатор потока, который у вас уже должен быть, в вызове метод bind и вы должны быть хорошо.

Надеюсь, это поможет кому-то другому.

person Brett    schedule 07.05.2016