
Alice adalah pengembang penuh tumpukan yang berpengalaman dan mampu menulis kerangka kerja proyek SAAS dalam kerangka favoritnya menggunakan php dalam seminggu. Di ujung depan ia lebih suka Vue.js.
Telegram sedang diketuk oleh pelanggan yang, dengan segala cara, perlu mengembangkan situs web, yang akan menjadi tempat pertemuan majikan dan karyawan untuk melakukan wawancara langsung. Penuh waktu - berarti saling berhadapan, kontak video langsung dalam waktu nyata dengan video dan suara.
"Kenapa tidak skype?" Anda bertanya. Kebetulan proyek-proyek serius, dan setiap startup, tidak diragukan lagi menganggap dirinya seperti itu, sedang berusaha menawarkan layanan komunikasi internal untuk berbagai alasan, termasuk:
1) Jangan berikan pengguna Anda ke komunikator pihak ketiga (skype,
hangout, dll.). Biarkan mereka dalam layanan.
2) Monitor komunikasi: riwayat panggilan, hasil wawancara.
3) Rekam panggilan (tentu saja, memberi tahu kedua pihak rekaman).
4) Jangan bergantung pada kebijakan dan pembaruan layanan pihak ketiga. Semua orang tahu cerita ini: Skype diperbarui, dan itu dimulai ...
Tugasnya terlihat sederhana. WebRTC adalah google pada topik dan sepertinya Anda dapat mengatur koneksi peer-to-peer antara dua browser, tetapi pertanyaan tetap:
1) Di mana mendapatkan server STUN / TURN
2) Apakah mungkin dilakukan tanpa mereka
3) Cara merekam panggilan WebRTC peer-to-peer
4) Apa yang akan terjadi jika Anda perlu menambahkan pihak ketiga ke panggilan, misalnya, manajer SDM atau spesialis lain dari pemberi kerja.
Ternyata hanya WebRTC dan peer-to-peer saja tidak cukup dan tidak jelas apa yang harus dilakukan dengan semua ini untuk meluncurkan fungsi video layanan yang diperlukan.
Konten artikel
Server dan API
Untuk menutup semua titik putih ini, solusi server dan arsitektur peer-server-peer digunakan. Web Call Server 5.2 WCS lebih lanjut adalah salah satu solusi server - platform pengembangan yang memungkinkan Anda untuk menambahkan fungsi video ke proyek tanpa khawatir tentang STUN / MENGHIDUPKAN dan stabilitas koneksi peer-to-peer.
Pada level tertinggi, WCS adalah bagian JavaScript API + server. API digunakan untuk mengembangkan JavaScript normal di sisi browser, dan server memproses lalu lintas video, bertindak sebagai Proksi Stateful untuk lalu lintas media.

Selain JavaScript API, ada juga SDK Android dan iOS SDK, yang masing-masing diperlukan untuk mengembangkan aplikasi seluler asli untuk iOS dan Android.
Misalnya, menerbitkan aliran ke server (streaming aliran dari webcam ke server) terlihat seperti ini:
Sdk web
session.createStream({name:”stream123”}).publish();
Android SDK
publishStream = session.createStream(streamOptions) publishStream.publish();
iOS SDK
FPWCSApi2Stream *stream = [session createStream:options error:&error]; if(![stream publish:&error]) { //published without errors }
Sebagai hasilnya, Anda dapat menerapkan tidak hanya aplikasi web, tetapi juga up-up penuh untuk Google Play dan App Store dengan dukungan untuk streaming video. Tambahkan SDK seluler ke gambar tingkat atas. Ini akan menjadi seperti ini:

Aliran masuk
Server streaming, yaitu WCS, dimulai dengan aliran masuk. Untuk memberikan sesuatu, Anda harus memilikinya. Untuk mendistribusikan streaming video ke pemirsa, aliran ini perlu masuk ke server, melewati RAM-nya, dan keluar melalui kartu jaringan. Oleh karena itu, pertanyaan pertama yang akan berguna untuk ditanyakan ketika membiasakan diri dengan server media adalah: protokol dan format apa yang diterima terakhir oleh stream. Dalam hal WCS, ini adalah teknologi berikut: WebRTC, RTMP, RTSP, VOD, SIP / RTP.

Setiap protokol dapat digunakan oleh beragam klien. Misalnya, melalui WebRTC, tidak hanya aliran dari browser yang dapat masuk, tetapi juga dari server lain. Kami menampilkan kemungkinan sumber lalu lintas masuk dalam tabel.
Jika Anda menelusuri sumber lalu lintas masuk, Anda dapat menambahkan yang berikut ini:
WebRTC yang masuk
Web SDK memungkinkan Anda untuk menangkap tidak hanya kamera dan mikrofon, tetapi juga menggunakan kemampuan API browser untuk mengakses berbagi layar. Selain itu, Anda dapat menangkap elemen Canvas yang sewenang-wenang dan yang digambar untuk siaran selanjutnya adalah streaming kanvas.
Android SDK dan iOS SDK karena spesifik seluler memiliki kemampuan untuk beralih antara kamera depan dan belakang perangkat saat itu. Ini memungkinkan Anda untuk mengganti sumber selama streaming tanpa menghentikan aliran.
Aliran WebRTC yang masuk juga dapat diperoleh dari server WCS lain dengan metode: push, pull dan CDN, yang akan dibahas sedikit kemudian.

Rtmp masuk
Protokol RTMP secara luas digunakan dalam streamer OBS favorit, dan pada enkoder lain: Wirecast, Adobe Media Ensourcer, ffmpeg, dll. Dengan mengambil salah satu penyandi ini, Anda dapat menangkap arus dan mengirimkannya ke server.
Anda juga dapat mengambil aliran RTMP dari server media lain atau server WCS dari
menggunakan metode push dan pull. Dalam hal push, inisiator adalah server jarak jauh. Dalam hal tarikan, kita beralih ke yang lokal untuk menarik aliran dari yang jauh.

RTSP yang masuk
Sumber lalu lintas RTSP biasanya adalah kamera IP atau server media pihak ketiga yang mendukung protokol RTSP. Terlepas dari kenyataan bahwa ketika memulai koneksi RTSP, inisiatornya adalah WCS, lalu lintas audio dan video dalam arah dari kamera IP bergerak menuju server WCS. Oleh karena itu, kami menganggap aliran dari kamera masuk.

VOD masuk
Pada pandangan pertama, sepertinya fungsi VOD (Video On Demand) dikaitkan secara eksklusif dengan aliran keluar dan dengan pemutaran file oleh browser. Dalam kasus kami, ini agak salah. WCS dengan jujur menerjemahkan file mp4 dari sistem file ke localhost, sebagai hasilnya, aliran masuk dibuat, seolah-olah itu berasal dari sumber pihak ketiga. Lebih lanjut, jika kita membatasi satu viewer menjadi satu file mp4, kita mendapatkan VOD klasik, di mana viewer mengambil stream dan memainkannya dari awal. Jika tidak terbatas, kami mendapatkan VOD LIVE - variasi VOD, di mana pemirsa dapat memutar file yang sama sebagai streaming, menghubungkan ke titik pemutaran di mana semua yang lain saat ini berada (mode televisi siaran yang direkam sebelumnya).

SIP / RTP masuk
Untuk menerima lalu lintas RTP masuk dalam sesi SIP, Anda harus mengatur panggilan dengan gateway SIP pihak ketiga. Jika koneksi berhasil dibuat, lalu lintas audio dan / video akan pergi dari gateway SIP, yang akan dibungkus dengan aliran masuk di sisi WCS.

Aliran keluar
Setelah menerima aliran di server, Anda dapat mereplikasi aliran yang diterima ke satu atau banyak pemirsa berdasarkan permintaan. Penampil meminta streaming dari pemain atau perangkat lain. Aliran semacam itu disebut outgoing atau "aliran pemirsa", karena sesi aliran tersebut selalu dimulai di sisi pemirsa / pemain. Perangkat teknologi pemutaran mencakup protokol / format berikut: WebRTC, RTMP, RTSP, MSE, HLS
WebRTC keluar
Dalam hal ini, SDK Web, Android SDK, dan iOS SDK bertindak sebagai API untuk pemain. Contoh memainkan streaming WebRTC terlihat seperti ini:
Sdk web
session.createStream({name:”stream123”}).play();
Android SDK
playStream = session.createStream(streamOptions); playStream.play();
iOS SDK
FPWCSApi2Stream *stream = [session createStream:options error:nil]; if(![stream play:&error]) { //published without errors }
Ini sangat mirip dengan API penerbitan, dengan satu-satunya perbedaan adalah sebaliknya
stream.publish (), stream.play () dipanggil untuk pemutaran.
Seorang pemain juga bisa menjadi server WCS pihak ketiga, yang akan diperintahkan untuk mengambil aliran melalui WebRTC dari server lain menggunakan metode tarik atau untuk mengambil aliran di dalam CDN.
Rtmp keluar

Di sini akan ada terutama pemain RTMP - baik Flash Player yang terkenal, dan aplikasi desktop dan seluler yang menggunakan protokol RTMP, menerima dan memainkan aliran RTMP. Faktanya adalah meskipun Flash meninggalkan browser, Flash meninggalkan protokol RTMP, yang banyak digunakan untuk siaran video dan kurangnya dukungan asli di browser tidak mencegah penggunaan protokol yang cukup sukses ini di aplikasi klien lainnya. Diketahui bahwa RTMP banyak digunakan pada pemutar VR untuk aplikasi mobile untuk Android dan iOS.
RTSP keluar

Server WCS dapat bertindak sebagai server RTSP dan mendistribusikan aliran yang diterima melalui RTSP sebagai kamera IP biasa. Dalam hal ini, pemain harus membuat koneksi RTSP dengan server dan mengambil aliran untuk pemutaran, seolah-olah itu adalah kamera IP.
MSE keluar

Dalam hal ini, pemain meminta aliran dari server menggunakan protokol Websocket. Server menyediakan data audio dan video pada soket web. Data mencapai browser dan dikonversi menjadi potongan-potongan yang dapat dimainkan browser berkat ekstensi MSE asli yang didukung di luar kotak. Pemain akhirnya bekerja berdasarkan elemen video HTML5.
HLS keluar

Di sini, WCS bertindak sebagai server HLS atau server Web yang mendukung HLS (HTTP Live Streaming). Setelah aliran masuk muncul di server, daftar putar HLS dibuat dalam format .m3u8, yang diberikan kepada pemain sebagai tanggapan atas permintaan HTTP. Daftar putar menjelaskan segmen video mana yang harus diunduh dan ditampilkan oleh pemutar. Pemain mengunduh segmen video dan memutarnya di halaman browser, di perangkat seluler, di desktop, di dekoder Apple TV, dan di mana pun dukungan HLS diklaim.
Kotak masuk dan Kotak keluar
Total kami memiliki 5 jenis aliran masuk dan jumlah yang sama. Kami mendaftar
mereka di tabel:
Yaitu kita bisa mengarahkan stream ke server dan bisa terhubung dengannya dan memainkan pemain yang cocok untuk masalah ini. Untuk memutar aliran WebRTC, gunakan SDK Web. Untuk memutar aliran WebRTC sebagai HLS, gunakan pemain HLS, dll. Satu aliran dapat dimainkan oleh banyak penonton. Siaran satu-ke-banyak berfungsi.
Sekarang kita akan memberi tahu tindakan apa yang dapat dilakukan dengan stream.
Manipulasi Stream Masuk
Aliran keluar tempat duduk penonton tidak terlalu memanipulasi. Memang, jika pemirsa telah membuat sesi dengan server dan sudah mengambil semacam aliran, tidak ada cara untuk melakukan perubahan apa pun tanpa merusak sesi. Untuk alasan ini, semua manipulasi dan perubahan terjadi pada aliran masuk, pada titik di mana replikasi belum terjadi. Aliran yang telah mengalami perubahan kemudian diedarkan ke semua pemirsa yang terhubung.
Operasi pada stream meliputi:
- merekam
- penghapusan snapshot
- tambahkan stream ke mixer
- stream transcoding
- tambahkan tanda air
- tambahkan filter FPS
- rotasi gambar sebesar 90, 180, 270 derajat
Rekaman Aliran Masuk

Mungkin fungsi yang paling dimengerti dan sering ditemui. Memang, stream memerlukan rekaman dalam banyak kasus: webinar, pelajaran bahasa Inggris, konsultasi, dll.

Perekaman dapat dimulai dengan SDK Web atau API REST dengan permintaan khusus:
/stream/startRecording {}
Hasilnya disimpan dalam sistem file sebagai file mp4.
Penghapusan Snapshot

Tugas yang sama umum adalah untuk mengambil gambar dari aliran saat ini untuk menampilkan ikon di situs. Misalnya, Anda memiliki 50 stream dalam sistem pengawasan video, yang masing-masing memiliki sumber satu kamera IP. Menampilkan semua 50 utas pada satu halaman tidak hanya bermasalah untuk sumber daya browser, tetapi juga tidak berguna. Dalam kasus 30 FPS, total FPS dari gambar yang berubah akan menjadi 1500 frame per detik dan mata manusia tidak akan menerima frekuensi ini. Sebagai solusinya, Anda dapat mengonfigurasi pemotongan otomatis atau memakan foto berdasarkan permintaan, dalam hal ini Anda dapat menampilkan gambar di situs dengan frekuensi acak, misalnya, 1 frame dalam 10 detik. Snapshots dapat dihapus dari SDK, melalui REST API, atau diiris secara otomatis.

Server WCS mendukung metode REST berikut untuk menghapus foto:
/stream/snapshot

Menambahkan Stream ke Mixer

Gambar dari dua sumber atau lebih dapat digabungkan menjadi satu untuk ditampilkan untuk mengakhiri pemirsa. Prosedur ini disebut pencampuran. Contoh dasar: 1) Pengawasan video dari beberapa kamera di layar dalam satu gambar. 2) Konferensi video, di mana setiap pengguna menerima satu aliran untuk menghemat sumber daya, di mana sisanya dicampur. Mixer dikendalikan melalui REST API dan memiliki mode operasi MCU untuk membuat konferensi video.
Perintah REST untuk menambahkan aliran ke mixer:
/mixer/startup
Streaming transcoding

Streaming kadang-kadang diharuskan diperas untuk beradaptasi dengan kelompok perangkat klien tertentu dengan resolusi dan bit rate. Untuk ini, transcoding digunakan. Transcoding dapat diaktifkan di sisi SDK Web, melalui REST API, atau secara otomatis melalui node Transcoding khusus di CDN. Misalnya, ketika memasukkan video 1280x720, video tersebut dapat ditranskodekan ke 640x360 untuk distribusi ke pelanggan dari wilayah geografis dengan bandwidth yang biasanya rendah. Di mana temanmu, Elon Musk?

Metode REST yang digunakan:
/transcoder/startup
Menambahkan tanda air

Diketahui bahwa konten apa pun dapat dicuri dan diubah menjadi WebRip, tidak peduli perlindungan apa yang diberikan pemain tersebut. Jika konten Anda benar-benar sangat berharga, Anda dapat memasukkan tanda air atau logo ke dalamnya yang akan sangat mempersulit penggunaan lebih lanjut dan tampilan publik. Untuk menambahkan tanda air, cukup unggah gambar PNG dan itu akan dimasukkan ke dalam aliran video dengan transcoding. Oleh karena itu, Anda harus menyiapkan beberapa core CPU di sisi server jika Anda masih memutuskan
tambahkan tanda air ke sungai. Agar tidak memutar watermark pada server dengan transcoding, lebih baik menambahkannya langsung ke encoder / streamer, yang
sering memberikan kesempatan seperti itu.
Menambahkan Filter FPS

Dalam beberapa kasus, diperlukan aliran dengan FPS genap (frame per detik). Ini bisa berguna jika kita menyampaikan aliran ke sumber daya pihak ketiga seperti Youtube atau Facebook, atau kita memainkannya dengan pemutar HLS yang sensitif. Penyaringan lagi membutuhkan transcoding, jadi hitung kekuatan server Anda dan siapkan konfigurasi ditambah 2 core per stream jika operasi seperti itu direncanakan.
Putar gambar 90, 180, 270 derajat

Perangkat seluler memiliki kemampuan untuk mengubah resolusi aliran yang dipublikasikan tergantung pada sudut rotasi. Misalnya, mereka mulai melakukan streaming, memegang iPhone secara horizontal, dan kemudian berbalik ke samping. Menurut spesifikasi WebRTC, peramban streamer perangkat seluler, dan dalam hal ini iOS Safari harus memberi sinyal pergantian ke server. Server, pada gilirannya, harus mengirimkan acara ini ke semua pelanggan. Kalau tidak, itu akan berubah
sehingga streamer meletakkan ponsel di sampingnya, tetapi melihat kameranya masih tegak, sementara pemirsa ditumpuk di sisinya. Untuk bekerja dengan belokan di sisi SDK, ekstensi cvoExtension yang sesuai disertakan.
Di mana kontrol aliran masuk
Otomatis - konfigurasi biasanya diatur pada sisi server di
pengaturan.
Aliran estafet
Relai juga merupakan opsi untuk memanipulasi aliran yang masuk ke server dan terdiri dari memaksa aliran ke server pihak ketiga. Sinonim untuk menyampaikan adalah kata-kata seperti: replikasi, push, injeksi.
Relay dapat diimplementasikan menggunakan salah satu dari protokol berikut: WebRTC, RTMP, SIP / RTP. Tabel menunjukkan arah di mana aliran dapat disampaikan.
Relay WebRTC

Streaming dapat diteruskan ke server WCS lain jika karena alasan tertentu diperlukan untuk membuat aliran tersedia di server lain. Relai dilakukan melalui REST API menggunakan metode / push. Setelah menerima permintaan REST, WCS terhubung ke server yang ditentukan dan menerbitkan aliran server-server untuk itu. Setelah itu, aliran menjadi tersedia untuk diputar di komputer lain.
/pull/push
- Metode REST yang digunakan.
Relay RTMP

Seperti halnya relai WebRTC, relai RTMP ke server lain juga dimungkinkan. Perbedaannya hanya ada pada protokol relay. Relai RTMP juga dilakukan melalui / push dan memungkinkan Anda untuk mentransfer aliran ke server RTMP pihak ketiga dan ke layanan yang mendukung RTMP Ingest: Youtube, Facebook streaming, dll. Dengan demikian, aliran WebRTC dapat diteruskan ke RTMP. Dengan keberhasilan yang sama di RTMP, Anda dapat menyampaikan aliran lain yang memasuki server, misalnya, RTSP atau VOD.
Aliran video diteruskan ke server RTMP lain menggunakan panggilan REST
/push/startup
- Panggilan ISTIRAHAT digunakan.
Relay SIP / RTP

Fungsi yang jarang digunakan. Paling sering di perusahaan. Misalnya, ketika Anda perlu membuat panggilan SIP dengan server konferensi SIP eksternal dan mengalihkan aliran audio atau video ke panggilan ini sehingga penonton konferensi melihat beberapa konten video: "Silakan tonton video ini" atau "Kolega, tapi sekarang mari kita lihat aliran dengan IP kamera dari lokasi konstruksi. " Anda perlu memahami bahwa konferensi itu sendiri ada dan dikelola dalam hal ini pada VKS-server eksternal dengan dukungan SIP (Baru-baru ini kami menguji solusi dari Polycom DMA), kami hanya menghubungkan dan menyampaikan aliran yang ada ke server ini. Fungsi REST API disebut / disuntikkan dan berfungsi hanya untuk kasus ini.
Perintah REST API:
/call/inject_stream/startup
Menghubungkan server ke jaringan pemrosesan konten CDN
Satu server biasanya memiliki sumber daya yang terbatas. Karenanya, untuk siaran online besar, di mana akun pemirsa mencapai ribuan dan puluhan ribu, penskalaan diperlukan. Beberapa server WCS dapat digabungkan menjadi satu jaringan pengiriman konten CDN. Secara internal, CDN akan bekerja melalui WebRTC untuk menjaga latensi rendah selama streaming.

Server dapat dikonfigurasi dalam salah satu peran berikut: Asal, Tepi, Transcoder. Server tipe asal - menerima lalu lintas dan mendistribusikannya ke node tepi Edge-server yang bertanggung jawab untuk mengirimkan aliran ke pemirsa. Jika perlu untuk menyiapkan aliran dalam beberapa resolusi, Transcoder node dimasukkan dalam skema, yang mengambil misi sumber daya yang membutuhkan transcoding stream.
Untuk meringkas
WCS 5.2 adalah server untuk mengembangkan aplikasi dengan dukungan audio dan video realtime untuk browser dan perangkat seluler. Empat API disediakan untuk pengembangan: SDK Web, iOS SDK, Android SDK, REST API. Anda dapat mempublikasikan stream video (umpan) ke server menggunakan lima protokol: WebRTC, RTMP, RTSP, VOD, SIP / RTP. Dari server, Anda dapat memainkan stream dengan pemain menggunakan lima protokol: WebRTC, RTMP, RTSP, MSE, HLS. Streaming dapat dikontrol dan dilakukan pada mereka operasi seperti: merekam, mengiris snapshot, mencampur, transcoding, menambahkan tanda air, memfilter FPS, menyiarkan video menyalakan perangkat seluler. Streaming dapat diteruskan ke server lain melalui protokol WebRTC dan RTMP, serta dialihkan ke konferensi SIP. Server dapat diintegrasikan ke dalam jaringan pengiriman konten dan diskalakan untuk memproses sejumlah stream video secara sewenang-wenang.
Apa yang harus diketahui Alice untuk bekerja dengan server
Pengembang harus dapat menggunakan Linux. Tim semacam ini di
Baris perintah seharusnya tidak menyebabkan kebingungan:
tar -xvzf wcs5.2.tar.gz
cd wcs5.2
./install.sh
tail -f flashphoner.log
ps aux | grep WebCallServer
top
JavaScript Vanilla juga harus mampu untuk mengembangkannya
Web
// session.createStream({name:'mystream'}).publish(); // session.createStream({name:'mystream'}).play();
Kemampuan untuk bekerja dengan backend juga bermanfaat.

WCS tidak hanya dapat menerima perintah kontrol melalui REST API, tetapi juga mengirim kait - pemberitahuan tentang peristiwa yang terjadi di dalamnya.
Misalnya, ketika mencoba membuat koneksi dari browser atau aplikasi seluler, WCS akan memanggil kait / sambungkan, dan ketika mencoba memainkan streaming, ia akan memanggil kait playStream. Oleh karena itu, pengembang harus tetap berada di posisi ujung belakang, yang mampu menulis baik klien REST sederhana dan server REST kecil untuk memproses kait.
Contoh REST API
/rest-api/stream/find_all
- contoh API REST untuk menghasilkan daftar aliran pada server
SISA contoh kait
https://myback-end.com/hook/connect
- Pengolahan hook / koneksi REST di sisi backend.
Linux, JavaScript, REST Client / Server adalah tiga elemen itu
cukup untuk mengembangkan layanan produksi pada platform WCS yang berfungsi
dengan streaming video.
Pengembangan aplikasi seluler membutuhkan pengetahuan tentang Java dan Objective-C
untuk Android dan iOS masing-masing.
Instalasi dan peluncuran
Ada tiga cara untuk meluncurkan WCS dengan cepat hari ini:
1) Instal di Centos7 atau Ubuntu 16.x LTS atau Ubuntu 18.x LTS Anda, dan
dll. dipandu oleh artikel dari dokumentasi .
atau
2) Ambil gambar yang sudah jadi di Amazon EC2 .
atau yang lainnya
3) Ambil gambar server yang sudah jadi di DigitalOcean .
Dan mulailah pengembangan proyek yang menarik dengan fitur streaming video.
Artikel ulasan ternyata sangat banyak. Terima kasih untuk itu
baca kesabaran.
Selamat streaming!
Referensi
WCS 5.2 - Server WebRTC
Instalasi dan peluncuran
Instal dan jalankan WCS
Luncurkan gambar prebuilt di Amazon AWS
DigitalOcean
SDK
Web SDK
Android SDK
iOS SDK
WebRTC CDN
Web Call Server 5.2