Ö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:
  1. 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>