Как безопасно воспроизводить потоковый файл .m3u8 с AWS S3 с помощью CloudFront? - PullRequest
4 голосов
/ 28 мая 2020

Я использую подписанный URL CloudFront для отображения изображений и видео с S3 в целях защиты.

Он хорошо работает с изображениями и другими видео, кроме файла .m3u8.

Я использовал AWS PHP SDK, а вот мой код.

<?php
    // Instantiate the CloudFront client with your AWS credentials
    $cloudFrontClient    =  new CloudFrontClient(array(
        'region'        => env('AWS_DEFAULT_REGION'),
        'version'       => 'latest',
        'http'          => [ 'verify' => false ],
        'credentials'   => array(
            'key'       => env('AWS_ACCESS_KEY_ID'),
            'secret'    => env('AWS_SECRET_ACCESS_KEY'),
        )
    ));

    // Create a signed URL for the resource
    $resourceKey      =  'https://abcdefg.cloudfront.net/test/file_1000k.m3u8';
    $expires          =  time() + 3600;
    $signedUrl        =  $cloudFrontClient->getSignedUrl([
        'url'         => $resourceKey,
        'expires'     => $expires,
        'private_key' => public_path().'/pk-ABCD123.pem',
        'key_pair_id' => 'ABCD123ABCD123ABCD123'
    ]);
?>
<video id='hls-example' class="video-js vjs-default-skin" width="640" height="480" controls>
    <source src="<?php echo $signedUrl; ?>" 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 src="<?php echo asset('public/assets/js/videojs-contrib-hls.min.js'); ?>"></script>
<script>
    var player = videojs('hls-example');
    player.play();
</script>

Если я не ошибаюсь, он не воспроизводится, потому что нам также нужно подписывать сегментированные файлы (.ts) внутри файла .m3u8 .

Как мы можем его динамически изменять?

Есть ли способ безопасного воспроизведения файла .m3u8, чтобы пользователи не могли использовать прямой доступ по ссылке для загрузки файла?

1 Ответ

0 голосов
/ 04 июня 2020

URL-адреса, подписанные CloudFront, отлично работают, когда это только один файл, но, как вы уже обнаружили, это проблема, когда у вас несколько ресурсов.

По этой причине рекомендуется использовать подписанный CloudFront cookies .

При этом вам нужно подписать только один раз, чтобы разрешить все ресурсы из указанного c распространения CloudFront и не беспокоиться о процессе подписания при каждой загрузке страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...