Я использую подписанный 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, чтобы пользователи не могли использовать прямой доступ по ссылке для загрузки файла?