
Recherche avancée
Autres articles (26)
-
Emballe médias : à quoi cela sert ?
4 février 2011, parCe plugin vise à gérer des sites de mise en ligne de documents de tous types.
Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ; -
Les formats acceptés
28 janvier 2010, parLes commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
ffmpeg -codecs ffmpeg -formats
Les format videos acceptés en entrée
Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
Les formats vidéos de sortie possibles
Dans un premier temps on (...) -
Dépôt de média et thèmes par FTP
31 mai 2013, parL’outil MédiaSPIP traite aussi les média transférés par la voie FTP. Si vous préférez déposer par cette voie, récupérez les identifiants d’accès vers votre site MédiaSPIP et utilisez votre client FTP favori.
Vous trouverez dès le départ les dossiers suivants dans votre espace FTP : config/ : dossier de configuration du site IMG/ : dossier des média déjà traités et en ligne sur le site local/ : répertoire cache du site web themes/ : les thèmes ou les feuilles de style personnalisées tmp/ : dossier de travail (...)
Sur d’autres sites (4994)
-
How to add a token verification in url with Laravel when playing HLS videos ?
31 mars 2022, par PhilipI have been playing with Laravel and FFMPEG for few weeks but got stuck. Hope someone could help here. Thank you in advanced.


Background


I have a video website build with Laravel 9. I use FFMPEG to convert uploaded MP4 to HLS with laravel-ffmpeg package. AES encryption is applied. Then I store the converted m3u8 playlist, key and ts file in Storage path with symlinks created to public folder. I stored the path in database and call it in view file. I use plyr + hls.js to play the video. Everything is working fine.


However, I would like to further protect my videos from being played by other website. I blocked the cross domain access in Nginx but seem it only check the referrer which could be faked. I can see many video websites that their m3u8 path contains a token parameter :


https://some-domain.com/videos/index.m3u8?token=abc123456



I am trying to do the same but stuck.


These are my Laravel files


VideoController


This will convert mp4 to m3u8 , key, ts files and save to database


FFMpeg::fromDisk('videos')
 ->open($queue->path)
 ->exportForHLS()
 ->withRotatingEncryptionKey(function($filename,$content) use($queue){
 Storage::disk('videos')->put('m3u8/'.$queue->video->slug.'/'.$filename, $content);
 })
 ->setSegmentLength(10) // optional
 ->setKeyFrameInterval(48) // optional
 ->onProgress(function ($percentage, $remaining, $rate) use($queue){
 $queue->update([
 'is_processing'=>true,
 'percentage'=>$percentage,
 'remaining'=>$remaining,
 'rate'=>$rate,
 ]);
 })
 ->addFormat($resolution_720)
 ->save($m3u8_path);



blade file


This will show the m3u8 playlist path and pass to js file


@if (isset($video->play_url) && $video->play_url != '')
 <div class="col-12 mb-3 single-video">
 <video playsinline="playsinline" controls="controls" muted="muted">

 </video>
 <code class="echappe-js"><script> &#xA; var m3u8 = "{{ $video->play_url }}" &#xA; var token = &#x27;token_xxxxxxxx&#x27;&#xA; </script>


@endif



js file


This will play the video (with plyr player)


const player = new Plyr('#player');
if(typeof(m3u8) != "undefined" && m3u8 !== null){
 m3u8 = m3u8 + '?token=' + token
 console.log(m3u8,token)
 var video = document.getElementById('player');
 if(Hls.isSupported()) {
 var hls = new Hls();
 hls.loadSource(m3u8);
 hls.attachMedia(video);

 }else if (video.canPlayType('application/vnd.apple.mpegurl')) {
 video.src = m3u8;

 }

}



If I remove "token" from the above code. The video plays fine. But now I could like to check if the token valid before returning the file. I remove the symlink to prevent direct access to the file.


public_path('m3u8') => storage_path('app/videos/m3u8'),



Route


in web.php, I added few routes to check the token


Route::get('/m3u8/{slug}/{filename}.m3u8', [VideoController::class, 'get_m3u8'])->name('video.m3u8');
 Route::get('/m3u8/{slug}/{filename}.ts', [VideoController::class, 'get_ts'])->name('video.ts');
 Route::get('/m3u8/{slug}/{filename}.key', [VideoController::class, 'get_key'])->name('video.key');



Then in VideoController


public function get_m3u8(Request $request ,$slug ,$filename)
{
 if($request->token == 123){
 return response()->file(storage_path('app/videos/m3u8/'.$slug.'/'.$filename .'.m3u8'),[
 'Content-Type' => 'application/x-mpegURL',
 ]);
 }else{
 return abort('403');
 }
}



But the video cannot be played. Because when loading index.m3u8, it loads index_0_1200.m3u8 next and then load the rest of ts files which all do not contain the token. But I cannot add to token duration the conversion from mp4 to hls because in actually case the token will be dynamic such as adding timestamp.


Please advise. Thank you. My final aim is to prevent other from using the m3u8 playlist and key files to play my ts files. It will consume a lot of bandwidth.


php shell_exec() command pop out error and permission denied ffmpeg
This is the main index.php file where I run my code to generate a video thumbnail with ffmpeg but it has no lucks at all I have been searching online for a lot of solution but nothing comes out i will be very appreciate if you guys can help me out. The shell_exec() keep giving me error







<form action="index.php" method="POST" enctype="multipart/form-data">
<input type="file" /><input type="submit" value="upload" />

</form>

<?php

if(isset($_POST['submit'])){


$ffmpeg = "/Users/mac/Documents/ffmpeg/3.1.4/bin/ffmpeg";
$videoFile = $_FILES["file"]["tmp_name"];
$imageFile = "1.jpg";
$size = "320x240";
$getFromSecond = 5;
$cmd = "$ffmpeg -i $videoFile -an -ss $getFromSecond -s $size $imageFile 2>&1";

 echo shell_exec($cmd);


echo shell_exec('whoami');
if(!shell_exec($cmd)){


 echo "thumbnail created";
}else{
 echo "error creating thumbnail";
}






}

?>






php shell_exec() command pop out error and permission denied ffmpeg
This is the main index.php file where I run my code to generate a video thumbnail with ffmpeg but it has no lucks at all I have been searching online for a lot of solution but nothing comes out i will be very appreciate if you guys can help me out. The shell_exec() keep giving me error
<form action="index.php" method="POST" enctype="multipart/form-data">
<input type="file" /><input type="submit" value="upload" />
</form>
<?php
if(isset($_POST['submit'])){
$ffmpeg = "/Users/mac/Documents/ffmpeg/3.1.4/bin/ffmpeg";
$videoFile = $_FILES["file"]["tmp_name"];
$imageFile = "1.jpg";
$size = "320x240";
$getFromSecond = 5;
$cmd = "$ffmpeg -i $videoFile -an -ss $getFromSecond -s $size $imageFile 2>&1";
echo shell_exec($cmd);
echo shell_exec('whoami');
if(!shell_exec($cmd)){
echo "thumbnail created";
}else{
echo "error creating thumbnail";
}
}
?>