Trang chủ » Mã hóa » Cách truyền phát âm thanh bị cắt bằng API MediaSource

    Cách truyền phát âm thanh bị cắt bằng API MediaSource

    Với API MediaSource, bạn có thể tạo và cấu hình các luồng phương tiện ngay trong trình duyệt. Nó cho phép bạn thực hiện một loạt các hoạt động trên dữ liệu truyền thông được tổ chức bởi các thẻ HTML liên quan đến phương tiện truyền thông như hoặc là . Chẳng hạn, bạn có thể trộn các luồng khác nhau, tạo phương tiện chồng chéo, phương tiện tải lười biếng, và chỉnh sửa số liệu truyền thông chẳng hạn như thay đổi âm lượng hoặc tần số.

    Trong bài đăng này, chúng tôi sẽ xem cụ thể làm thế nào để truyền phát mẫu âm thanh (một tệp MP3 bị cắt ngắn) với API MediaSource ngay trong trình duyệt để nhạc trước chương trình để khán giả của bạn. Chúng tôi sẽ đề cập đến làm thế nào để phát hiện hỗ trợ cho API, làm thế nào để kết nối phần tử phương tiện HTML với API, làm thế nào để lấy phương tiện truyền thông thông qua Ajax và cuối cùng là làm thế nào để truyền phát nó.

    Nếu bạn muốn xem trước những gì chúng tôi dự định, hãy xem mã nguồn trên Github, hoặc kiểm tra trang demo.

    Bước 1. Tạo HTML

    Để tạo HTML, thêm một gắn thẻ điều khiển thuộc tính đến trang của bạn. Để tương thích ngược, cũng thêm một thông báo lỗi mặc định cho người dùng có trình duyệt không hỗ trợ tính năng này. Chúng tôi sẽ sử dụng JavaScript để bật / tắt thông báo này.

      

    Bước 2. Phát hiện hỗ trợ trình duyệt

    Trong JavaScript, tạo một cố gắng bắt khối đó sẽ ném lỗi nếu API MediaSource không được hỗ trợ bởi trình duyệt của người dùng, hoặc, với các từ khác nếu Nguồn truyền thông (chìa khóa) không tồn tại bên trong cửa sổ vật.

     thử if (! 'MediaSource' trong cửa sổ) ném ReferenceError mới ('Không có thuộc tính MediaSource trong đối tượng cửa sổ.') Catch (e) console.log (e);  

    Bước 3. Phát hiện hỗ trợ MIME

    Sau khi kiểm tra hỗ trợ, cũng kiểm tra hỗ trợ loại MIME. Nếu loại MIME của phương tiện bạn muốn truyền phát không được trình duyệt hỗ trợ, cảnh báo người dùngném lỗi.

    var mime = 'audio / mpeg'; if (! MediaSource.isTypeSupported (mime)) alert ('Không thể phát phương tiện. Phương tiện loại MIME' + mime + 'không được hỗ trợ.'); throw ('Media of type' + mime + 'không được hỗ trợ.');  

    Lưu ý rằng đoạn mã trên cần phải là đặt bên trong thử khối, trước bắt lấy chặn (để tham khảo, thực hiện theo cách đánh số dòng hoặc kiểm tra tệp JS cuối cùng trên Github).

    Bước 4. Liên kết gắn thẻ API MediaSource

    Tạo một cái mới Nguồn truyền thông đối tượng, và chỉ định nó là nguồn của nhãn bằng cách sử dụng URL.createObjectURL () phương pháp.

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

    Bước 5. Thêm một NguồnBuffer chủ đề Nguồn truyền thông

    Khi một yếu tố truyền thông HTML truy cập một nguồn phương tiện truyền thông và sẵn sàng tạo nên NguồnBuffer các đối tượng, API MediaSource bắn một nguồn biến cố .

    Các NguồnBuffer vật giữ một mẩu phương tiện truyền thông cuối cùng được giải mã, xử lý và chơi. Một đơn Nguồn truyền thông đối tượng có thể có nhiều NguồnBuffer các đối tượng.

    Bên trong xử lý sự kiện của nguồn biến cố, thêm một NguồnBuffer chủ đề Nguồn truyền thông với addSourceBuffer () phương pháp.

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

    Bước 6. Lấy phương tiện truyền thông

    Bây giờ bạn có một NguồnBuffer phản đối, đã đến lúc lấy tập tin MP3. Trong ví dụ của chúng tôi, chúng tôi sẽ làm như vậy bằng sử dụng yêu cầu AJAX.

    Sử dụng máy quét mảng như Đáp ứng, mà biểu thị dữ liệu nhị phân. Khi phản hồi được tải thành công, nối nó vào NguồnBuffer với appendBuffer () phương pháp.

     phương tiện truyền thông ; xhr.onload = function () thử switch (this.status) case 200: sourceBuffer.appendBuffer (this.response); break; case 404: throw 'File Not Found'; default: throw 'Không thể tìm nạp tệp '; bắt (e) console.error (e);; xhr.send ();); 

    Bước 7. Cho biết kết thúc luồng

    Khi API kết thúc việc nối thêm dữ liệu vào NguồnBuffer một sự kiện được gọi là cập nhật bị sa thải. Trong một bộ xử lý sự kiện, gọi cho endOfStream () phương pháp Nguồn truyền thông đến chỉ ra rằng luồng đã kết thúc.

     phương tiện truyền thông ; xhr.onload = function () hãy thử ); break; case 404: throw 'File Not Found'; default: throw 'Không thể tìm nạp tệp'; Catch (e) console.error (e);; xhr.send ();) ; 

    Bước 8. Cắt bớt tệp phương tiện

    Các NguồnBuffer đối tượng có hai tính chất gọi là appendWindowStartappendWindowEnd đại diện cho thời gian bắt đầu và kết thúc của dữ liệu truyền thông bạn muốn lọc Mã đánh dấu bên dưới lọc bốn giây đầu tiên của MP3.

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

    Bản giới thiệu

    Và đó là tất cả, của chúng tôi mẫu âm thanh được truyền phát ngay từ trang web. Cho mã nguồn, hãy nhìn vào chúng tôi Github repo và để biết kết quả cuối cùng, hãy xem trang demo.

    Hỗ trợ trình duyệt

    Khi viết bài này, Nguồn truyền thông API được hỗ trợ chính thức trong tất cả các trình duyệt chính. Nhưng thử nghiệm cho thấy rằng triển khai là lỗi trong Firefox, và trình duyệt Webkit vẫn gặp sự cố với appendWindowStart bất động sản.

    Vì API MediaSource là vẫn đang trong giai đoạn thử nghiệm, truy cập vào các chức năng chỉnh sửa cao hơn có thể bị hạn chế nhưng truyền phát cơ bản tính năng là thứ bạn có thể sử dụng ngay.