CDN Dinamis untuk Streaming WebRTC Latensi Rendah


Setelah menganalisis kapasitas konfigurasi server standar di Digital Ocean dalam hal streaming WebRTC, kami telah memperhatikan bahwa satu server dapat mencakup hingga 2000 pemirsa. Dalam kehidupan nyata, kasus-kasus ketika satu server tidak mencukupi tidak jarang.


Anggaplah para amatir judi di Jerman menonton balapan kuda waktu nyata di Australia. Mengingat bahwa pacuan kuda tidak hanya permainan olahraga tetapi juga menyiratkan keuntungan besar dengan syarat bahwa taruhan lapangan dibuat pada waktu yang tepat, video harus disampaikan dengan latensi serendah mungkin.


Contoh lain: Perusahaan global, salah satu pemimpin pasar FCMG dengan anak perusahaan di Eropa, Rusia dan Asia Tenggara, menyelenggarakan pelatihan manajer penjualan pelatihan webinar dengan streaming langsung dari kantor pusat di Mediterania. Para penonton harus dapat melihat dan mendengar presenter secara langsung.


Contoh-contoh ini mengedepankan persyaratan yang sama: memberikan aliran media latensi rendah ke sejumlah besar pemirsa. Ini akan membutuhkan penggelaran jaringan pengiriman konten - CDN.


Perlu dicatat bahwa teknologi pengiriman aliran konvensional menggunakan HLS tidak cocok karena dapat menambah hingga 30 detik penundaan, yang sangat penting untuk acara waktu-nyata. Bayangkan bahwa kuda sudah selesai, hasilnya telah dipublikasikan di situs web, sementara para penggemar masih menonton akhir balapan. Teknologi WebRTC bebas dari kerugian ini dan dapat menjamin penundaan kurang dari 1 detik, yang dimungkinkan bahkan di seluruh benua berkat saluran komunikasi modern.


Untuk memulainya, kita akan melihat bagaimana menggunakan CDN yang paling sederhana untuk mengirimkan aliran WebRTC dan bagaimana skala itu sesudahnya.


Prinsip Cdn


Server di CDN dapat memainkan salah satu dari peran berikut:


  • Origin adalah server yang dibangun untuk mempublikasikan stream media. Ini berbagi aliran ke server lain serta pengguna.
  • Transcoder adalah server yang didedikasikan untuk stream transcoding. Ini menarik stream dari server Origin dan melewati stream transcode ke Edge. Kami akan melihat peran ini di bagian berikut.
  • Edge adalah server yang dirancang untuk berbagi aliran kepada pengguna. Ini menarik stream dari server Origin atau Transcoder dan tidak meneruskannya ke server CDN lainnya.

Server Asal memungkinkan penerbitan aliran WebRTC dan RTMP atau menangkap aliran dari sumber lain melalui RTMP, RTSP atau metode lain yang tersedia.


Pengguna dapat memutar stream dari server Edge melalui WebRTC, RTMP, RTSP, HLS.


Untuk meminimalkan latensi, diinginkan untuk mentransmisikan streaming di antara server CDN menggunakan WebRTC.


CDN statis sepenuhnya dijelaskan pada tahap konfigurasi. Bahkan, pengaturan CDN statis mirip dengan pengaturan penyeimbang beban: semua penerima tercantum dalam pengaturan server sumber arus.


Misalnya, kami memiliki satu server Asal di Frankfurt, satu Edge di New York dan satu di Singapura


Contoh CDN statis


Dalam hal ini Origin akan diatur kurang lebih seperti ini:


<loadbalancer mode="roundrobin" stream_distribution="webrtc"> <node id="1"> <ip>edge1.thestaticcdn.com</ip> <wss>443</wss> </node> <node id="2"> <ip>edge2.thestaticcdn.com</ip> <wss>443</wss> </node> </loadbalancer> 

Inilah masalah pertama dengan CDN statis: untuk memasukkan CDN jenis ini ke server Edge baru atau mengecualikan server dari CDN, diperlukan untuk mengubah pengaturan dan memulai kembali semua server Origin.


Streaming yang diterbitkan pada Asal disiarkan ke semua server Edge yang tercantum dalam pengaturan. Keputusan di mana server Edge pengguna akan terhubung juga diambil di server Origin. Inilah masalah kedua: jika ada sedikit atau tidak ada pemirsa - misalnya, di Singapura masih sore, sedangkan di New York tengah malam - aliran akan disiarkan ke Edge 1 pula. Lalu lintas sedang terbuang sia-sia, dan tidak gratis.


Dua masalah ini dapat diselesaikan dengan menggunakan Dynamic CDN.


Sekarang, kami ingin mengatur CDN tanpa me-restart semua server Origin dan tidak ingin mengirimkan stream ke server Edge tanpa ada pengguna yang terhubung. Dalam hal ini, tidak perlu menyimpan seluruh daftar server CDN di suatu tempat di pengaturan. Setiap server harus membuat daftar semacam itu secara independen. Untuk melakukan ini, ia harus mengetahui status server lain saat ini pada waktu tertentu.


Idealnya, menentukan titik masuk - server yang memulai CDN - dalam pengaturan harus cukup. Selama startup, setiap server harus mengirim permintaan ke titik entri ini dan menanggapi daftar node CDN dan aliran yang dipublikasikan. Jika titik masuk tidak dapat diakses, server harus menunggu pesan dari server lain.
Server harus mengkomunikasikan perubahan apa pun dalam statusnya ke server lain di CDN.


CDN paling sederhana: di pusat Eropa


Sekarang kita akan mencoba mengatur dan memulai CDN dinamis. Asumsikan pertama kita perlu mengirimkan stream media ke pemirsa di Eropa yang mencakup hingga 5000 pengguna. Misalkan sumber aliran juga terletak di Eropa



Kami akan menggunakan tiga server di pusat data yang berbasis di Eropa. Kami akan menggunakan instance Flashphoner WebCallServer (server video stream WebRTC) sebagai komponen perakitan CDN



Pengaturan:


  • Asal EU

 cdn_enabled=true cdn_ip=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=origin 

  • Edge 1 EU

 cdn_enabled=true cdn_ip=e-eu1.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

  • Edge 2 EU

 cdn_enabled=true cdn_ip=e-eu2.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

Pertukaran pesan antara node CDN dinamis diimplementasikan melalui Websocket, dan Secure Websocket tentu juga didukung.


Streaming di dalam CDN disiarkan melalui WebRTC. Biasanya UDP digunakan sebagai transportasi, tetapi jika perlu untuk memastikan kualitas streaming yang baik dengan saluran antara server tidak begitu baik, dimungkinkan untuk beralih ke TCP. Sayangnya, dalam kasus ini, latensi meningkat.
Mulai ulang server, buka contoh Two Way Streaming pada server o-eu1 , publikasikan siklus 10 menit ke 0 video penghitung waktu mundur



Buka contoh Player di server e-eu1 , mainkan stream



dan melakukan hal yang sama pada e-eu2



CDN berfungsi! Seperti yang dapat Anda lihat pada tangkapan layar, waktu dalam video bertepatan dengan yang kedua pada bagian penerbitan dan pada bagian tampilan berkat WebRTC dan saluran yang baik.


Dan di luar kita pergi: menghubungkan Amerika


Sekarang kita akan mengirimkan streaming kepada pemirsa di benua Amerika dengan mengingat juga penerbitannya



Kami akan mengerahkan tiga server di pusat data Amerika tanpa menutup bagian Eropa dari CDN



Pengaturan:


  • Asal kami

 cdn_enabled=true cdn_ip=o-us1.flashponer.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=origin 

  • Edge 1 AS

 cdn_enabled=true cdn_ip=e-us1.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

  • Edge 2 AS

 cdn_enabled=true cdn_ip=e-us2.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

Mulai ulang server Amerika, periksa penerbitan



dan pemutaran



Perhatikan bahwa segmen Eropa tetap berfungsi. Kami akan memeriksa apakah pengguna Amerika akan dapat melihat aliran diterbitkan dari Eropa. Menerbitkan aliran test_eu di server o-eu1



dan memainkannya di e-us1



Dan ini juga berhasil! Adapun latensi, tangkapan layar menunjukkan lagi sinkronisasi timer di video pada bagian penerbitan dan pada bagian tampilan ke yang kedua.


Perhatikan bahwa bermain di server Origin stream yang dipublikasikan di server Origin lainnya tidak dimungkinkan secara default, tetapi jika perlu, ini dapat diatur sesuai.


 cdn_origin_to_origin_route_propagation=true 

Untuk dilanjutkan


Singkatnya, kami telah menggunakan CDN sederhana dan kemudian berhasil menskalakannya ke dua benua penerbitan dan memainkan aliran WebRTC latensi rendah. Untuk tujuan ini, kami tidak mengubah parameter streaming saat pemutaran, yang cukup sering diperlukan dalam kehidupan nyata: semua pemirsa memiliki saluran yang berbeda, dan untuk menjaga kualitas streaming diperlukan, misalnya, untuk mengurangi resolusi atau bitrate. Kami akan menangani ini di bagian berikut ...



Gambar Flashphoner WebCallServer di DigitalOcean Marketplace - gambar Server Panggilan Web di DigitalOcean.


CDN untuk streaming WebRTC latensi rendah - jaringan pengiriman konten berbasis Server Web.

Source: https://habr.com/ru/post/id477304/


All Articles