Nie wiem, dlaczego tak wielu ludzi daje złą radę, ale tak można to zrobić. To, że jest "grana" po stronie klienta, nie oznacza, że będzie ona zapisana po stronie klienta - trzeba by użyć oprogramowania, które może nagrywać strumień w trakcie jego odtwarzania. Oprogramowanie do przechwytywania ekranu lub coś podobnego.
W każdym razie, aby to zrobić, musisz użyć .htaccess, aby przekierować żądania plików do pliku php, który dynamicznie wyświetli lokalizację pliku i zaciemni adres URL.
Potrzebne będą następujące w kodzie html
<html>
<body>
<script type="text/javascript" src="flowplayer-3.2.12.min.js">
</script>
<script type="text/javascript">
// <![CDATA[
window.onload = function() {
$f("player", "flowplayer-3.2.16.swf", {
plugins: {
secure: {
url: "flowplayer.securestreaming-3.2.8.swf",
timestampUrl: "sectimestamp.php"
}
},
clip: {
baseUrl: "secure", // Im using a folder called "secure" you can call it whatever you want
url: "trailer.flv",
urlResolvers: "secure",
scaling: "fit",
onStart: function (clip) {
document.getElementById("info").innerHTML = clip.baseUrl + "/" + clip.url;
}
}
});
};
// ]]>
</script>
<div id="player"></div>
</body>
</html>
sectimestamp.php ma tylko tej linii w nim:
<?php
echo time();
?>
Następnie trzeba napisać plik .htaccess w następujący sposób i miejsce w swoim "bezpiecznym" folderze lub wszędzie tam, gdzie przechowywane są filmy:
RewriteEngine on
RewriteRule ^(.*)/(.*)/(.*)$ video.php?h=$1&t=$2&v=$3
RewriteRule ^$ - [F]
RewriteRule ^[^/]+\.(flv|mp4)$ - [F]
Kolejny krok to jo ur plik video.php który jest w tym samym katalogu, co plik .htaccess (można go umieścić gdzie indziej po prostu dostosować url w .htaccess
<?php
$hash = $_GET['h'];
$streamname = $_GET['v'];
$timestamp = $_GET['t'];
$current = time();
$token = 'kljaslidilhal9023402'; // I recommend a dynamic token to be generated using something like mt_rand() function
$checkhash = md5($token . '/' . $streamname . $timestamp);
if (($current - $timestamp) <= 2 && ($checkhash == $hash)) {
$fsize = filesize($streamname);
header('Content-Disposition: attachment; filename="' . $streamname . '"');
if (strrchr($streamname, '.') == '.mp4') {
header('Content-Type: video/mp4');
} else {
header('Content-Type: video/x-flv');
}
header('Content-Length: ' . $fsize);
session_cache_limiter('nocache');
header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
$file = fopen($streamname, 'rb');
print(fread($file, $fsize));
fclose($file);
exit;
} else {
header('Location: /secure');
}
?>
To jest część walidacji gdzie znacznik jest porównywane do strumienia upewnij się, że nie trwa dłużej niż 2 sekundy - w przeciwnym razie musisz odświeżyć stronę i poprosić o nowy token.
Teraz wszystko, co to robi, to próba dostępu do strony url.com/secure/trailer.flv, której nie będziesz w stanie uzyskać dzięki .htaccess (menedżerowie pobierania również nie będą działać). Możesz jednak przesyłać strumieniowo tę lokalizację, korzystając z informacji o php na url.com/video.html, a źródło w pliku FLV będzie wyglądało jak url.com/md5hashtimestamp/md5hashstreamname/md5hashtimestamp/trailer.flv. Tak więc bardzo trudno zgrać strumień z pliku Flash bezpośrednio, ponieważ ten URL nie kończy się; nie można odwiedzić witryny bezpośrednio pod adresem url.com/secure/trailer.flv dzięki .htaccess; i ostatecznie jedyną opcją jest przechwytywanie ekranu/oprogramowanie, które rejestruje podczas przesyłania strumieniowego.
To nie jest w 100% bezpieczne, ale utrudnia to użytkownikowi końcowemu - a najlepsze jest to, że jest ono bezpłatne:
porno? przepraszam, musiałem zapytać :-) –
Jeśli mogą przesłać strumieniowo na swój komputer, to można zapisać strumień w taki czy inny sposób. Wtedy mogą być dystrybuowane tak, jak im się podoba. DRM ma ogromną historię porażki. – Raoul
Co powiedział pan Duke, jeśli gra się po stronie klienta, można go zapisać po stronie klienta. Nie da się tego obejść.Jednak możesz to zabezpieczyć, aby tylko członkowie mieli dostęp do filmów w pierwszej kolejności, czy to jest twoje pytanie? A może mógłbyś napisać własnego gracza, który odrzuciłby wideo w pamięci, a zatem mógł być odtwarzany tylko w twoim odtwarzaczu (chyba, że ktoś go przechwycił, oczywiście, lub odwrotnie zaprojektował twój klucz kryptograficzny). –