Jika saya tidak memerlukan video adaptif, dapatkah saya melakukannya tanpa segmentasi? Misalnya, bisakah saya membuka koneksi WebSocket dan mengirimkan file video, klien akan memutarnya segera setelah bagian baru diterima. Apakah ada kekurangan dalam pendekatan seperti itu?

1
Кирилл Волков 19 November 2020, 12:12

1 menjawab

Jawaban Terbaik

Ini bahkan lebih mudah dari itu. Anda dapat melakukan jenis streaming ini tanpa Soket Web dan menggunakan HTTP biasa. Sisi klien adalah sesuatu seperti:

<video src="https://stream-server.example.com/stream"></video>

Kemudian, apa pun yang Anda gunakan di sisi server hanya perlu menghasilkan aliran dengan informasi inisialisasi yang sesuai, diikuti oleh di mana pun Anda berada di aliran langsung. Peramban akan memulai pemutaran sesegera mungkin, dan semuanya baik-baik saja.

Ini adalah streaming progresif HTTP normal. Ini digunakan sepanjang waktu dengan audio, yang dalam banyak kasus tidak memerlukan bitrate adaptif, dan dapat menyinkronkan sendiri dengan mudah (MP3, ADTS, dll.). Anda dapat menggunakannya dengan video juga jika Anda tidak memerlukan kecepatan bit adaptif, dan dapat mengirim data inisialisasi dan memotong aliran di tempat yang tepat. (Jika Anda tidak yakin bagaimana melakukannya, gunakan editor hex dan spesifikasi untuk format wadah apa pun yang Anda gunakan. Saya menemukan WebM/Matroska sangat mudah digunakan, dan telah melakukan streaming dengan cara ini beberapa paket EBML NPM untuk server Node.js.)

Ada beberapa hal yang perlu diingat:

  • Server bertanggung jawab untuk merakit aliran, jadi Anda tidak akan dapat menggunakan CDN berbasis file/gumpalan standar. Untuk banyak kasus penggunaan, ini tidak relevan, jadi Anda harus memutuskan apakah itu penting bagi Anda.
  • Jika aliran terhenti, browser akan menunggu paket-paket itu tiba, atau dalam kasus ekstrem mungkin akan menyambung kembali. Anda harus dapat menangani logika rekoneksi tersebut dengan melacak offset byte yang telah Anda kirim ke klien. Klien akan membuat permintaan HTTP jarak jauh untuk melanjutkan di tempat terakhir, dan Anda harus dapat menanganinya. (Atau, perbaiki dengan beberapa baris JavaScript untuk mengatur ulang semuanya jika terjadi kesalahan.)
  • Sisi baiknya, ini adalah cara streaming berkualitas tinggi dan sangat sederhana!

Juga, lihat penggunaan Icecast untuk server Anda. Saya dulu mengirim video melaluinya dengan cara ini ... belum mencoba selama bertahun-tahun, tetapi saya membayangkan itu masih berfungsi. Jika tidak, server Node.js sederhana dapat melakukannya.

2
Brad 19 November 2020, 16:01