Jadi saya seorang insinyur perangkat lunak yang mencoba memahami beberapa detail penting tentang bagaimana media streaming bekerja. Saya telah menghabiskan sebagian besar hari mencoba memahami berbagai codec, format wadah dan protokol streaming yang berkaitan dengan aplikasi saya. Sejauh ini, inilah pemahaman saya tentang cara kerjanya, yang bisa saja disesatkan:
- Media streaming benar-benar bermuara pada format wadah dan protokol streaming :
- Semua data audio dikodekan (melalui audio codec) ke dalam bitstream audio
- Semua data video dikodekan (sekali lagi, melalui codec) ke dalam bitstream video
- Dua aliran digabung ( multiplexing? ) Bersama-sama ke dalam wadah yang akhirnya menjadi file (seperti MP4, dll.)
- Server media khusus kemudian menyajikan wadah ini (file MP4, atau format lain) kepada klien (mungkin pemutar Video HTML5 yang berjalan di dalam browser seseorang) melalui beberapa protokol streaming standar, seperti RTSP
- Dalam kasus klien browser, saya menganggap browser itu sendiri memiliki klien RTSP yang kemudian entah bagaimana menyajikan kepada pengguna HTML5 Video Player
- Saya dapat meng-host file MP4 dari server web , seperti nginx atau httpd, tetapi karena server itu bukan server RTSP, hanya akan dapat memperlakukan permintaan untuk MP4 sebagai permintaan unduhan , dan dengan demikian, tidak dapat melakukan streaming file media
- Demikian juga, jika saya digunakan
curl
untuk mengambil file dari server nginx, karena tidakcurl
juga nginx berbicara RTSP, itu akan diperlakukan sebagai unduhan file
- Demikian juga, jika saya digunakan
- Tetapi, ketika saya meng-host file MP4 dari server media streaming (VideoLAN, Red5, Wowza, dll.), Dan saya menggunakan klien RTSP (atau klien media streaming yang didukung) untuk meminta streaming dari server itu, yang kemudian dan hanya lalu apakah streaming aktual terjadi
- Oleh karena itu meskipun "video" YouTube atau Vimeo di-host pada halaman HTML yang dilayani melalui HTTP (S) oleh server HTTP, saya berasumsi bahwa pemutar video tertanam pada halaman tersebut (yang merupakan tempat video sebenarnya diputar) sebenarnya memulai detik , koneksi selanjutnya ke server streaming, dan streaming terjadi melalui RTSP atau protokol non-HTTP lainnya
Jadi itu pemahaman saya, dan saya kira saya pertama kali bertanya bahwa jika sesuatu yang saya katakan di atas salah, silakan mulai dengan mengoreksi saya! Dengan asumsi saya kurang lebih benar:
Bagaimana cara streaming pemutar media, berjalan di dalam halaman HTML dan dilayani oleh server HTML, membangun koneksi streaming (RTSP, dll.) Dengan server media streaming (melayani permintaan RTSP)?
Jawaban:
Aplikasi Umum
RTSP saat ini tampaknya lebih banyak digunakan dengan aplikasi / antarmuka perangkat yang secara langsung live streaming (mis. Kamera IP) atau re-stream (seperti mesin) daripada untuk streaming file media yang disimpan dari lokasi fisik melalui antarmuka pemutaran web HTTP dengan antarmuka pemutar tertanam.
Tampaknya RTSP adalah protokol stateful dan menggunakan UDP lebih dari TCP saat streaming, dan itu digunakan lebih sebagai perangkat server (seperti kamera IP) yang terhubung ke jaringan TCP / IP, dan mengumpan aliran melalui UDP, dll Anda kemudian terhubung ke feed ini (server) sebagai klien di jaringan yang sama dan Anda dapat mengeluarkan permintaan RTSP untuk memanfaatkannya.
Aliran logis
Cara saya memahami aliran media streaming dalam bentuk ini adalah:
Silakan lihat bagian Streaming Technologies di bawah ini untuk perbandingan umum HTTP versus RTSP.
Selanjutnya
Di bawah 10 Alasan Mengapa Anda Seharusnya Tidak Pernah Meng-host Video Anda Sendiri Saya telah mengutip bagian-bagian yang sampai pada titik untuk membantu menjawab pertanyaan Anda dalam "umum" tanpa terlalu spesifik.
Pada dasarnya dikatakan bahwa situs web yang memiliki kontrol pemutar media tertanam akan:
sumber
Saya akan membahas di bawah ini terutama pertanyaan Anda tentang apa yang terjadi ketika video ditampilkan di browser. Subjeknya sangat luas, jadi saya hanya akan menyentuh pada item yang relevan.
HTML5 telah memperkenalkan
<VIDEO>
tag yang memecahkan masalah mengintegrasikan video yang ditampilkan ke dalam browser saat menggunakan JavaScript dan CSS.<OBJECT>
Tag sebelumnya memerlukan perangkat lunak eksternal dan tidak terintegrasi dengan halaman. Tag baru yang berlaku mengharuskan browser juga menjadi pemutar video, meskipun tidak ada standar yang diberlakukan. Hasilnya adalah fragmentasi total standar, di mana satu-satunya solusi adalah bahwa server video akan menyediakan beberapa format video dan bahwa semua sumber alternatif ini ditentukan dalam<VIDEO>
tag, dari mana browser akan memilih yang didukungnya.Contoh tag dengan banyak sumber:
The
<VIDEO>
tag sendiri adalah protokol-agnostik, sehingga dapat menggunakan protokol yang didukung oleh browser termasuk RTSP. Dukungan untuk protokol MPEG-DASH (Dynamic Adaptive Streaming over HTTP) akhir-akhir ini menjadi sangat komprehensif, sehingga akan diputar di sebagian besar perangkat dan browser asli, atau menggunakan HTML5, yang berarti tidak diperlukan plugin tambahan. Lihat bagan Kompatibilitas Perangkat dan Browser ini . Lihat juga artikel Mozilla ini untuk mempersiapkan server Anda untuk melayani MPEG-DASH. DASH bekerja melalui HTTP, jadi ini akan berfungsi selama server HTTP Anda mendukung permintaan rentang byte dan itu diatur untuk melayani file .mpd denganmimetype="application/dash+xml"
.Interaksi normal antara klien dan server terlihat mirip dengan yang berikut ini. Untuk HTML5 VIDEO, browser juga merupakan pemain, meskipun mungkin membuka koneksi baru untuk bermain.
Koneksi awal memasok metadata yang digunakan klien untuk menampilkan video. Jika protokol RTSP digunakan untuk mendapatkan metadata itu, maka koneksi RTP kemudian dibuat untuk mentransfer data video + audio. Protokol RTCP digunakan untuk mentransfer perintah tambahan ke server.
RTP, RTCP, dan RTSP semuanya beroperasi pada port yang berbeda. Biasanya ketika RTP ada di port N, RTCP ada di port N +1. Sesi RTP dapat berisi beberapa aliran untuk digabungkan di ujung penerima; misalnya, audio dan video mungkin berada di saluran yang terpisah.
Agar tidak ada yang terkunci dari konten Anda, Anda harus menyediakan codec bebas-royalti, webM atau Theora, dan video H.264, serta audio Vorbis dan MP3. (Kata mudah, sulit dilakukan.)
Inilah yang terjadi secara rinci untuk RTSP:
Klien membuat koneksi TCP ke server, biasanya pada port TCP 554, port yang terkenal untuk RTSP.
Klien kemudian akan mulai mengeluarkan serangkaian perintah header RTSP yang memiliki format yang mirip dengan HTTP, yang masing-masing diakui oleh server. Dalam perintah RTSP ini, klien akan menjelaskan ke server detail dari persyaratan sesi, seperti versi RTSP yang didukungnya, transportasi yang akan digunakan untuk aliran data, dan informasi port UDP atau TCP yang terkait. Informasi ini diteruskan menggunakan header DESCRIBE dan SETUP dan ditambah pada respons server dengan ID Sesi yang dapat digunakan klien, dan perangkat proxy sementara, untuk mengidentifikasi aliran dalam pertukaran lebih lanjut.
Setelah negosiasi parameter transportasi selesai, klien akan mengeluarkan perintah MAIN untuk menginstruksikan server untuk memulai pengiriman aliran data RTP.
Setelah klien memutuskan untuk menutup aliran, perintah TEARDOWN dikeluarkan bersama dengan Session ID yang memerintahkan server untuk menghentikan pengiriman RTP yang terkait dengan ID itu.
Bacaan lebih lanjut :
sumber
Inilah jawaban cepat dan kotor-
Ada perbedaan antara memutar video di web dan benar-benar streaming dalam waktu nyata.
Pemutaran dilakukan dengan cara pemain yang termasuk dalam halaman web (mungkin menggunakan flash, JS, atau objek video html5). Klien (browser) mengunduh pemain ini dan menjalankannya. Pemain, pada gilirannya, mengambil video dari url unduhan sederhana. Bahkan, bahkan dengan Youtube, ada program yang memungkinkan Anda untuk mengakses file video yang dihosting secara langsung dan mengunduhnya seperti halnya file apa pun. Karena sistem menggunakan tautan unduhan lama yang biasa, tidak perlu protokol streaming yang rumit seperti RTSP
Streaming waktu nyata (katakanlah, dari webcam) adalah .. well, trickier. Flash memiliki fungsi ini bawaan, tetapi seharusnya tidak digunakan lagi. Video HTML5 tidak mendukung streaming realtime, tetapi orang-orang telah dapat "mengelabui" nya dengan membuat server hosting file secara konstan mengubah file video yang ditawarkannya.
sumber