Laman » Pengekodan » Bagaimana Audio Terkini Stream Menggunakan MediaSource API

    Bagaimana Audio Terkini Stream Menggunakan MediaSource API

    Dengan MediaSource API, awak boleh menjana dan mengkonfigurasi aliran media betul dalam pelayar. Ia membolehkan anda untuk melakukan pelbagai operasi pada data media yang dipegang oleh tag HTML berkaitan media seperti atau . Sebagai contoh, anda boleh campurkan aliran yang berbeza, mewujudkan media yang bertindih, media beban malas, dan edit metrik media seperti menukar volum atau kekerapan.

    Dalam siaran ini, kami akan secara khusus melihat bagaimana arahkan sampel audio (fail MP3 dipenggal) dengan MediaSource API betul dalam penyemak imbas untuk muzik pra-tayangan kepada penonton anda. Kami akan menolong bagaimana mengesan sokongan API, bagaimana untuk sambungkan elemen media HTML kepada API, bagaimana untuk ambil media melalui Ajax, dan akhirnya bagaimana aliran itu.

    Sekiranya anda ingin melihat terlebih dahulu apa yang kami perlukan, lihatlah kod sumber pada Github, atau periksa halaman demo.

    Langkah 1. Buat HTML

    Untuk membuat HTML, tambah satu tag dengan a kawalan atribut ke halaman anda. Untuk keserasian ke belakang, juga tambah mesej ralat lalai untuk pengguna yang penyemak imbasnya tidak menyokong ciri tersebut. Kami akan menggunakan JavaScript untuk menghidupkan / mematikan mesej ini.

      

    Langkah 2. Mengesan sokongan penyemak imbas

    Dalam JavaScript, buat a cuba tangkap blok yang akan membuang kesilapan jika MediaSource API tidak disokong oleh penyemak imbas pengguna, atau, dengan kata lain jika MediaSource (kunci) tidak wujud di dalam tingkap objek.

     cuba jika (! 'MediaSource' di tetingkap) membuang RujukanPenghantaran baru ('Tidak ada sifat MediaSource dalam objek tetingkap.') tangkapan (e) console.log (e);  

    Langkah 3. Nilaikan sokongan MIME

    Selepas cek sokongan, semak juga sokongan jenis MIME. Jika jenis media MIME yang anda mahu strim tidak disokong oleh penyemak imbas, maklumkan pengguna dan membuang kesilapan.

    var mime = 'audio / mpeg'; jika (! MediaSource.isTypeSupported (mime)) alert ('Tidak dapat memainkan media Media jenis MIME' + mime + 'tidak disokong.'); buang ('Media jenis' + mime + 'tidak disokong.');  

    Ambil perhatian bahawa coretan kod di atas perlu diletakkan di dalam cuba blok, sebelum itu tangkapan blok (untuk rujukan, ikut penomboran baris atau semak fail JS terakhir pada Github).

    Langkah 4. Pautan tanda kepada API MediaSource

    Buat yang baru MediaSource objek, dan tetapkan ia sebagai sumber tag dengan menggunakan URL.createObjectURL () kaedah.

     var audio = document.querySelector ('audio'), mediaSource = new MediaSource (); audio.src = URL.createObjectURL (mediaSource); 

    Langkah 5. Tambah a SourceBuffer objek kepada MediaSource

    Apabila elemen media HTML mengakses sumber media dan bersedia untuk buat SourceBuffer objek, API MediaSource kebakaran a sumber terbuka acara .

    The SourceBuffer objek memegang sebilangan besar media yang akhirnya diuraikan, diproses dan dimainkan. Satu tunggal MediaSource objek boleh mempunyai pelbagai SourceBuffer objek.

    Di dalam acara pengendali acara sumber terbuka acara, tambahkan SourceBuffer objek kepada MediaSource dengan addSourceBuffer () kaedah.

     mediaSource.addEventListener ('sourceopen', function () var sourceBuffer = this.addSourceBuffer (mime);); 

    Langkah 6. Ambil media

    Sekarang anda mempunyai a SourceBuffer objek, sudah tiba masanya ambil fail MP3. Dalam contoh kami, kami akan berbuat demikian menggunakan permintaan AJAX.

    Guna arraybuffer sebagai responsType, yang mana menandakan data binari. Apabila respons berjaya diambil, tambahnya SourceBuffer dengan appendBuffer () kaedah.

     mediaSource.addEventListener ('sourceopen', function () var sourceBuffer = this.addSourceBuffer (mime); var xhr = new XMLHttpRequest; xhr.open ('GET', 'sample.mp3'); xhr.responseType = 'arraybuffer' ; xhr.onload = function () try switch (this.status) case 200: sourceBuffer.appendBuffer (this.response); break 404: throw 'File Not Found'; default: throw 'Fail to fetch fail '; tangkapan (e) console.error (e);; xhr.send ();); 

    Langkah 7. Tunjukkan akhir aliran

    Apabila API telah selesai menambahkan data kepada SourceBuffer a acara dipanggil updatend dipecat. Di dalam pengendali acara, panggil endOfStream () kaedah MediaSource kepada nyatakan bahawa strim telah berakhir.

     mediaSource.addEventListener ('sourceopen', function () var sourceBuffer = this.addSourceBuffer (mime); var xhr = new XMLHttpRequest; xhr.open ('GET', 'sample.mp3'); xhr.responseType = 'arraybuffer' ; xhr.onload = function () try switch (this.status) case 200: sourceBuffer.appendBuffer (this.response); sourceBuffer.addEventListener ('updateend', function (_) mediaSource.endOfStream (); ); fail 404: buang 'Fail Not Found'; lalai: buang 'Gagal ambil fail'; tangkapan (e) console.error (e);; xhr.send (); ; 

    Langkah 8. Puncilah fail media

    The SourceBuffer objek mempunyai dua sifat dipanggil appendWindowStart dan appendWindowEnd mewakili tarikh mula dan tamat masa data media anda mahu menapis. Kod yang diketengahkan di bawah menapis empat saat pertama MP3.

     mediaSource.addEventListener ('sourceopen', function () var sourceBuffer = this.addSourceBuffer (mime); sourceBuffer.appendWindowEnd = 4.0; ...); 

    Demo

    Dan itu semua, kami sampel audio disiarkan betul dari laman web. Untuk kod sumber, lihatlah kami Repo github dan untuk keputusan akhir, periksa halaman demo.

    Sokongan penyemak imbas

    Sebagai penulisan jawatan ini, MediaSource API disokong secara rasmi di semua pelayar utama. Tetapi ujian menunjukkan bahawa pelaksanaannya adalah kereta api di Firefox, dan penyemak imbas Webkit masih mempunyai masalah dengannya appendWindowStart harta.

    Sebagai API MediaSource adalah masih dalam peringkat eksperimennya, akses kepada fungsi penyuntingan yang lebih tinggi mungkin terhad tetapi penstriman asas ciri adalah sesuatu yang anda boleh gunakan segera.