Как встраивать Live-чат Youtube с постоянным URL-адресом?

URL-адрес встроенного канала для канала:

https://www.youtube.com/embed/live_stream?channel=CHANNEL_ID

и он работает, но если я хочу встроить рядом с ним, прямой чат YouTube для текущей потоковой передачи URL, который я использую для встраивания, это:

https://www.youtube.com/live_chat?v=VIDEOID&embed_domain=DOMAINURL 

Проблема заключается в следующем: для каждого нового потока в реальном времени изменяется ID видео. Так что встроенный код уже недействителен, и чат не отображается для следующей потоковой передачи. Я хочу, чтобы постоянный URL-адрес в реальном времени был действительным для всех моих потоковых потоков YouTube без изменения идентификатора видео вручную каждый раз. Как разрешить? Возможно, с помощью script в PHP или javascript, которые читают текущий URL-адрес YouTube и заменяют идентификатор видео в URL-адресе чата? спасибо

Ответ 1

Вы можете получить идентификатор видео с помощью PHP следующим образом:

<?php

try {
    $videoId = getLiveVideoID('CHANNEL_ID');

    // Output the Chat URL
    echo "The Chat URL is https://www.youtube.com/live_chat?v=".$videoId;
} catch(Exception $e) {
    // Echo the generated error
    echo "ERROR: ".$e->getMessage();
}

// The method which finds the video ID
function getLiveVideoID($channelId)
{
    $videoId = null;

    // Fetch the livestream page
    if($data = file_get_contents('https://www.youtube.com/embed/live_stream?channel='.$channelId))
    {
        // Find the video ID in there
        if(preg_match('/\'VIDEO_ID\': \"(.*?)\"/', $data, $matches))
            $videoId = $matches[1];
        else
            throw new Exception('Couldn\'t find video ID');
    }
    else
        throw new Exception('Couldn\'t fetch data');

    return $videoId;
}

Ответ 2

Вы можете использовать YouTube Live Streaming API, чтобы получить идентификатор и использовать данные Live Stream для любых ваших нужд.

Действительно, один из вариантов использования:

  • Связать видеопотоки и трансляции.

В на этой странице у вас есть пример PHP о том, как "Получить канальные видеопотоки". В этом коде $streamItem является LiveStream, который содержит идентификатор прямого потока, и вы можете использовать это.

В соответствующей заметке API также позволяет вам работать с LiveBroadcasts, который содержит ссылку snippet.liveChatId, чтобы связать ее LiveChatMessages. Последний позволит вам работать с сообщениями в любом формате, который вы хотите. Возможно, это лучше всего соответствовало бы вашим потребностям. На предыдущей странице с примерами кодов также есть хороший пример того, как "Получить трансляцию каналов".

Я мог бы скопировать коды здесь, но я думаю, что лучший рабочий пример хорошо документирован по ссылке API:)