Öncelikli olarak şunu belirtmeden geçemeyeceğim, acemiler videoyu indiremez, fakat profesyonellerden kaçış yok.
Reçeteniz ve kullanma kılavuzu aşağıdadır.
HLS (HTTP Live Streaming) kullanarak videolarınızı parçalar halinde sunabilir ve indirilmeyi zorlaştırabilirsiniz. HLS kullanmak için aşağıdaki adımları izleyebilirsiniz: 1. Gerekli Araçları ve Ortamı Hazırlayın
HLS formatına dönüştürmek için
FFmpeg kullanabilirsiniz. FFmpeg, açık kaynaklı ve güçlü bir multimedya aracıdır.
2. Videoları HLS Formatına Dönüştürün
HLS için MP4 videonuzu .m3u8 dosyası ve segment parçalarına (.ts dosyaları) bölmeniz gerekir.
Örnek FFmpeg Komutu:
ffmpeg -i input.mp4 -hls_time 10 -hls_playlist_type vod -hls_segment_filename "segment_%03d.ts" output.m3u8
- -hls_time 10: Segmentlerin her biri 10 saniye olacak.
- -hls_playlist_type vod: Video isteğe bağlı bir oynatma listesi olacak.
- -hls_segment_filename: Segment dosyalarının adlandırma formatı.
- output.m3u8: HLS oynatma listesi dosyası.
Sonuç olarak:
- output.m3u8: Ana oynatma listesi.
- segment_000.ts, segment_001.ts, vb.: Video segmentleri.
3. FFmpeg ile Rastgele İsimler Oluşturmak
FFmpeg, varsayılan olarak segmentlere düzenli bir isim (örneğin, segment_000.ts, segment_001.ts) verir. Ancak bu isimleri rastgele hale getirmek için segment isimlerini
dış bir araçla değiştirebilir veya FFmpeg sonrası bir işlem uygulayabilirsiniz.
Yöntem 1: FFmpeg ve Dinamik PHP Betiği
Segment dosyaları oluşturduktan sonra PHP ile isimleri rastgele hale getirebilirsiniz.
<?php
// Segment dosyalarını oku
$segments = glob('segment_*.ts');
// Rastgele dosya isimleri oluştur ve eski dosyaları yeniden adlandır
$map = [];
foreach ($segments as $segment) {
$newName = bin2hex(random_bytes(8)) . '.ts'; // Rastgele isim
rename($segment, $newName);
$map[$segment] = $newName;
}
// Playlist dosyasını düzenle
$playlist = file_get_contents('output.m3u8');
foreach ($map as $oldName => $newName) {
$playlist = str_replace($oldName, $newName, $playlist);
}
file_put_contents('output.m3u8', $playlist);
?>2. Segmentlere Rastgele Erişim ve Güvenlik
Elde edilen rastgele segment isimleri, kullanıcıların dosyaları kolayca tahmin etmesini zorlaştırır. Ancak yine de güvenlik için:
- Segmentler için Token Kontrolü: Segment dosyalarına erişimi yalnızca doğrulanmış kullanıcılarla sınırlayın. Örneğin:
<?php
session_start();
if (!isset($_SESSION['user'])) {
die("Erişim izni yok.");
}
$file = $_GET['file'];
$path = "/path/to/videos/hls/" . basename($file);
if (file_exists($path)) {
header('Content-Type: video/mp2t');
readfile($path);
} else {
die("Dosya bulunamadı.");
}
?>Playlist ve Segmentleri Dinamik Olarak Sunma: HLS playlist (.m3u8) dosyasını sunarken PHP kullanarak segment isimlerini dinamik olarak değiştirin.
HLS.js ile Örnek HTML ve JavaScript Kod: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HLS.js Örnek Video Oynatma</title>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <!-- HLS.js kütüphanesi -->
</head>
<body>
<h1>HLS Video Oynatma Örneği</h1>
<video id="video-player" controls autoplay width="640" height="360" style="border: 1px solid #000;">
<!-- HLS.js desteklemeyen tarayıcılar için fallback -->
Tarayıcınız video oynatmayı desteklemiyor.
</video>
<script>
// Video elementini seç
const video = document.getElementById('video-player');
// HLS video kaynağını belirtin
const videoSource = '/path/to/output.m3u8'; // HLS .m3u8 dosyasının yolu
// HLS.js ile tarayıcı desteğini kontrol et
if (Hls.isSupported()) {
const hls = new Hls(); // HLS.js nesnesi oluştur
hls.loadSource(videoSource); // HLS playlist dosyasını yükle
hls.attachMedia(video); // Video elementine bağla
hls.on(Hls.Events.MANIFEST_PARSED, () => {
console.log("HLS Manifest yüklendi, video oynatılıyor.");
video.play(); // Video otomatik başlatma
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
// Safari gibi HLS desteği olan tarayıcılar
video.src = videoSource;
video.addEventListener('loadedmetadata', () => {
video.play(); // Video otomatik başlatma
});
} else {
console.error("Bu tarayıcı HLS formatını desteklemiyor.");
alert("Maalesef tarayıcınız HLS videolarını oynatmayı desteklemiyor.");
}
</script>
</body>
</html>