Как воспроизводить содержимое hls без сохранения файла как .m3u8?

Я использую PHP-код для получения содержимого.m3u8 с подписанным URL-адресом из AWS CloudFront.

Я не могу воспроизвести внутри него файлы chunk .ts, так как вам также нужно подписать их URL.

Итак, используя PHP-код, я переписываю содержимое.m3u8

<?php
    $resourceKey = 'https://abcdefg.cloudfront.net/abcdef-1234.MOV_1000k*';
    $expires = time() + 172800;
    $customPolicy = <<<POLICY
{
    "Statement": [
        {
            "Resource": "{$resourceKey}",
            "Condition": {
                "DateLessThan": {"AWS:EpochTime": {$expires}}
            }
        }
    ]
}
POLICY;
    $signedUrl = $cloudFrontClient->getSignedUrl([
        'url' => $resourceKey,
        'policy' => $customPolicy,
        'private_key' => public_path().'/pk-ABCDEFGHIJ.pem',
        'key_pair_id' => 'ABCDEFGHIJ'
    ]);
    $signedUrl = str_replace('*', '.m3u8', $signedUrl);

    // get contents of the file and the query string
    $content = file_get_contents($signedUrl);
    parse_str(parse_url($signedUrl)['query'], $params);
    $qs = "?Policy=".$params['Policy']."&Signature=".$params['Signature']."&Key-Pair-Id=".$params['Key-Pair-Id'];

    // rewriting process
    $replaceThis = array(".m3u8", ".ts");
    $withThisValue = array(".m3u8".$qs, ".ts".$qs);
    $content = str_replace($replaceThis, $withThisValue, $content);
?>

Мне удалось подписать.ts внутри файла.m3u8. Но проблема в том, как мне преобразовать$contentк чему-то воспроизводимому в видео HTML5 с помощью VideoJS без загрузки содержимого файла с помощью file_put_contents? Я не хочу сохранять его в каталоге. Просто чтобы преобразовать его в данные blob или декодировать и воспроизвести Что-то вроде этого. Это возможно?

<!DOCTYPE html>
<html>
<head>
    <title>My Site</title>
</head>
<body>

    <video id='hls-example' class="video-js vjs-default-skin" width="640" height="480" controls>
        <source src="<?php echo $content; ?>" type="application/x-mpegURL">
        Your browser does not support the video tag.
    </video>

    <script src="https://vjs.zencdn.net/7.2.3/video.js"></script>
    <script>
        var player1 = videojs('hls-example');
    </script>
</body>
</html>

PS: Я пробовал AWS Lambda Edge. Но это не работает, когда внутри файла m3u8 много блоков.ts. Он возвращает ошибку, превышающую квоту запросов средства просмотра в 40 КБ.

0 ответов

Другие вопросы по тегам