Bonjour,

Je souhaiterais pouvoir protéger mes vidéos en ne donnant pas d'accès direct.
Pour cela, je met mes vidéos dans un répertoire non accessible directement via le web, et j'ai créé un fichier PHP pour envoyer les dîtes vidéos.

Cela marche très bien pour le téléchargement des vidéos, néanmoins ça ne marche pas quand je veux afficher mes vidéos directement sur mon site (excepté pour firefox).

Voici mon code PHP de téléchargement des vidéos:

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
 
session_start();
 
require_once("lang.php");
require_once("template.class.php");
require_once("daos/class.php");
require_once("daos/userdao.php");
require_once("daos/mediadao.php");
require_once("services/nomenclatureservice.php");
require_once("services/referencementservice.php");
require_once("services/userservice.php");
require_once("displayers/commondisplayers.php");
require_once("displayers/mediadisplayers.php");
require_once("displayers/menudisplayers.php");
 
if((!empty($_SESSION['userID'])) && ($_SESSION['ajaxplorer'] == 'O')){
 
	$media = GetMedia($_GET['id']);
	$user = GetUser($media->utiId);
	$biblioplace = "/var/ftp/bibliotheque/".$media->id."/";
	$info = pathinfo($media->filepath.$media->filename);
 
	if($media->convert == "O" && isset($_GET['p'])){
		if($_GET['p'] == 1 && file_exists($biblioplace.$info['filename'].".mp4")){
			$fichier = $biblioplace.$info['filename'].".mp4";
 
			header("Content-Type: video/mp4");
		}
		else if($_GET['p'] == 2 && file_exists($biblioplace.$info['filename'].".webm")){
			$fichier = $biblioplace.$info['filename'].".webm";
 
			header("Content-Type: video/webm");
		}
		else{
			$fichier = $media->filepath.$media->filename;
 
			header("Content-disposition: attachment; filename=".basename($fichier)); 
			header("Content-Type: application/force-download"); 
		}
	}
	else{
		$fichier = $media->filepath.$media->filename;
 
		header("Content-disposition: attachment; filename=".basename($fichier)); 
		header("Content-Type: application/force-download"); 
	}
 
	header("Content-Transfer-Encoding: binary"); 
	header("Content-Length: ".filesize($fichier)); 
	header("Pragma: no-cache"); 
	header("Expires: 0"); 
	readfile($fichier);
}
else{
	DisplayHeader($GLOBALS['globals_errorlib']);
	DisplayGlobalError($GLOBALS['globals_errormessage']);
	DisplayFooter();
}
 
?>


Et voici le code HTML5:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<video id="myvideo" class="video-js vjs-default-skin" controls preload="none" width="640" height="360" data-setup="{}">
<source src="downloadvideo.php?id=105&p=1" type="video/mp4" />
<source src="downloadvideo.php?id=105&p=2" type="video/webm" />
</video><br />
<a href="downloadvideo.php?id=105">T&eacute;l&eacute;charger la vid&eacute;o</a>
Je précise que j'utilise la librairie videojs pour la compatibilité avec les anciens IE.
Sous IE 9, ça passe automatiquement en flash (et ça ne marche pas quand même). Sous chrome, ça ne marche pas du tout.
Il n'y a que sous firefox où je vois ma vidéo.