Halo semuanya. Lusinan panggilan berbeda dibuka setiap hari dalam dukungan kami, mulai dari pertanyaan sederhana "membantu mengatur kluster" hingga sangat kompleks "aliran tidak bekerja, aliran kadang-kadang terhenti", tetapi ada pertanyaan yang membuat mata berkedut dan setiap karyawan perusahaan dapat menjawab secara detail.
Dan karena pertanyaan tidak berhenti, yang berarti Anda bisa menjawabnya di sini.
Mengapa video ditunda?
Kami sudah memiliki dua artikel di blog (
satu ,
dua ) tentang topik ini, bacalah jika Anda bekerja dengan video, dan di sini saya akan memberikan jawaban singkat dan komprehensif:
Streaming internet modern adalah
protokol HLS . Terkadang DASH, tetapi ini tidak penting, karena keduanya tersegmentasi.
Bagaimana cara kerjanya? Streaming video "dipotong" menjadi file kecil (biasanya 2-8 detik, tergantung pada dinamika konten), 3-10 segmen tersebut diakumulasikan dan dijelaskan oleh daftar putar khusus, yang secara otomatis diperbarui ketika segmen lama dihapus dan yang baru ditambahkan. Sangat sederhana. Lebih banyak segmen - penundaan yang lebih lama, durasi yang lebih lama dari setiap segmen - penundaan yang lebih lama. 10-20 detik adalah normal.
Mengapa ini dibutuhkan? Mengapa menyimpan begitu banyak video di memori server video? Segmentasi memungkinkan pemain untuk tidak bereaksi terhadap ketidakstabilan koneksi Internet, tidak mengganggu video saat beralih dari jaringan Wi-Fi ke koneksi seluler. Jika video belum disiapkan sebelumnya dan dikemas ke dalam file terpisah, maka pada gangguan sekecil apa pun atau kekurangan bandwidth, kami akan memiliki artefak video di layar, dan segmentasi memberi pemain sekitar 4-20 detik untuk memulihkan koneksi pemain dan memuat data baru.
Apa yang harus dilakukan jika Anda membutuhkan video tanpa penundaan? Pilih protokol yang berbeda jika Anda bermaksud mengatur obrolan web, mengontrol helikopter melalui Internet, menonton kamera IP-video. Berikut adalah contohnya: WebRTC, MSE-LD, RTMP.
Bagaimana cara melindungi video? Rekatkan hanya di situs Anda
Tugasnya sangat sederhana - video di situs harus dilindungi agar tidak dimasukkan ke situs lain, tidak ada yang mau membayar untuk lalu lintas orang lain, lalu lintas video mahal. Dan videonya bisa bersifat pribadi dan tidak boleh melampaui akun pribadi Anda.
Saya selalu punya satu jawaban untuk semua permintaan seperti itu - Anda
perlu mengonfigurasi Securelink di situs Anda. Perlindungan konten tidak dimungkinkan secara sepihak - situs itu sendiri harus menghasilkan tautan, Anda tidak bisa hanya mengambil dan menyisipkan tautan statis ke situs.
Securelink adalah teknologi perlindungan tautan yang lama dan sangat efektif. Banyak habruchiteli tahu tentang modul khusus untuk Nginx - ngx_http_secure_link_module. Kami tidak menggunakan Nginx, tetapi ada implementasi yang sama dan tidak kurang efisien, satu-satunya perbedaan adalah dalam urutan parameter.
Bagaimana cara kerjanya? Situs ini menghasilkan tautan
satu kali yang unik berdasarkan data pengguna. Dan apa yang diketahui server web tentang klien? Itu benar, ini adalah alamat IP, Agen-Pengguna, Cookie, URL yang diminta. Jika klien diotorisasi, maka dalam variabel sesi Anda bisa mendapatkan informasi lain, misalnya, ID klien unik dalam database layanan, atau, misalnya, masa berlaku berlangganan.
Kami mengumpulkan parameter dalam satu baris dan hash dengan algoritma favorit Anda, misalnya, SHA1. Ternyata satu set karakter yang tidak berguna. Misalnya, hash dari string "127.0.0.1Habr" adalah: 70ebe94671dd21bd65f4a00dfd988adc83fe6bda.
Baris ini akan ditransmisikan ke streamer video dan tugasnya adalah untuk memverifikasi validitas tautan, yang dihasilkan oleh situs Anda, bukan "busuk" dan tidak diteruskan ke pihak ketiga. Tidak ada umpan balik dari situs, sehingga streamer video harus menghasilkan hash menggunakan data yang sama dengan yang digunakan situs web. Video streamer juga mengetahui alamat IP klien, konten yang diminta, tetapi tidak bisa mengetahui ID pengguna atau masa pakai tautan. Anda harus mentransfer data ini langsung ke tautan dan menggunakan kunci rahasia sehingga siapa pun tidak dapat membuat tautan untuk diri mereka sendiri.
Kami mengambil garis "127.0.0.1Habr1540327100SECRET" dan mendapatkan SHA1 99fe961672c52aa3033b98b545ec2cdec93bf515, dan sekarang kami membentuk tautan bentuk:
example.com/Habr/index.m3u8?token=99fe961672c52aa3033b98b545ec2cdec93bf515-1540327100example.com adalah server video Anda, Habr adalah video yang diminta, index.m3u8 adalah nama standar untuk daftar putar HLS, token nilai adalah string dari server web yang kami buat.
Streamer video dengan mudah mengekstrak dari data ini segala yang diperlukan untuk memperoleh hash yang sama: alamat IP dibaca dari variabel server web, konten yang diminta dari URL, masa pakai dari parameter token, satu-satunya yang kurang adalah kunci rahasia, itu harus daftar di file konfigurasi dan rahasiakan.
Anda tidak akan dapat mengirim tautan seperti itu ke teman atau membukanya di browser lain - ada alamat IP dalam formula hashing, dan Anda tidak akan berhasil mengganti masa pakai - maka hash tidak akan cocok.
Perangkap
Saya benar-benar ingin menggambarkannya dalam dua paragraf, tetapi singkatnya tidak berhasil. Ini adalah masalah pertama - tidak semua orang siap untuk menyelidiki rincian seperti itu, karena jauh lebih mudah untuk memasukkan tautan statis. Kami
memiliki contoh yang sudah jadi di situs kami, jadi seharusnya tidak ada masalah.
Sering terjadi bahwa situs dan server web tidak menentukan alamat IP klien dengan benar, ini normal jika jaringan CDN digunakan, misalnya, CloudFlare. Dalam hal ini, Anda perlu mengambil alamat IP dari header yang benar, Anda mungkin perlu bantuan dari penyedia CDN. Sebagai contoh, CloudFlare memiliki CF-Connecting-IP.
Waktu yang salah. Waktu yang salah pada salah satu server, dikombinasikan dengan upaya untuk meminimalkan masa pakai tautan, sering menyebabkan tautan rusak. Itu juga terjadi bahwa pengguna membiarkan tab terbuka selama beberapa jam, dan kemudian tidak dapat memutar video karena waktu hidup yang singkat.
3-24 jam seumur hidup tautan - ini normal, mereka tetap dilindungi dan ada cara untuk membatasi jumlah tampilan secara bersamaan.
Alih-alih total
Beri tahu kami di komentar cara menyiasati mekanisme perlindungan tautan ini?