Ngừng sử dụng MediaStream

Nếu sử dụng getUserMedia() hoặc WebRTC, có thể bạn cần điều chỉnh mã dành cho Chrome 45 trở lên.

MediaStream API biểu thị luồng nội dung nghe nhìn được đồng bộ hoá. Ví dụ: một luồng được lấy từ máy ảnh và đầu vào micrô có các bản video và âm thanh được đồng bộ hoá. Mỗi bản nhạc là được biểu thị bằng MediaStreamTrack. (Đừng nhầm lẫn với phần tử <track>!)

Có 3 trường hợp ngừng sử dụng MediaStream trong Chrome 45:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

Song song với đó là 2 bổ sung:

  • MediaStream.active
  • MediaStreamTrack.stop()

Những chiến dịch này yêu cầu những thay đổi sau:

  • Sử dụng MediaStream.active để kiểm tra xem MediaStream có đang truyền trực tuyến không, chứ không phải MediaStream.ended.
  • Hãy sử dụng MediaStreamTrack.stop() để dừng truyền trực tuyến, chứ không phải MediaStream.stop().
  • Nếu bạn cần giá trị nhận dạng duy nhất cho MediaStream, hãy sử dụng MediaStream.id thay vì MediaStream.label. MediaStreamTrack.label cung cấp tên mà con người có thể đọc được cho thiết bị nguồn của một luồng, ví dụ: Máy ảnh FaceTime HD (Tích hợp) (05ac:8510).

Bạn có thể xem các ví dụ này trong thực tế: mở simpl.info/gum trong Chrome (trên một thiết bị có máy ảnh) và xem bảng điều khiển Công cụ của Chrome cho nhà phát triển. Chiến lược phát hành đĩa đơn Đối tượng MediaStream stream được truyền đến lệnh gọi lại getUserMedia() trong bản minh hoạ nằm trong phạm vi toàn cầu, nên bạn có thể kiểm tra bản minh hoạ này từ bảng điều khiển. Gọi điện stream.getTracks()[0] để xem MediaStreamTrack cho luồng này.

Ảnh chụp màn hình cho thấy MediaStream và MediaStreamTrack trong bảng điều khiển Công cụ của Chrome cho nhà phát triển

Stop(), đã kết thúc và đang hoạt động

Khi Nhóm công tác Ghi lại nội dung nghe nhìn và phát trực tuyến W3C đã xem xét vấn đề xảy ra khi bạn thêm bản nhạc mới vào MediaStream, và liệu một MediaStream trống có kết thúc hay không, họ nhận ra rằng có không có cách hợp lý nào để triển khai ended trên MediaStream (như trong "sẽ không bao giờ bắt đầu lại"). Trong các phần khác của HTML5 "đã kết thúc" có nghĩa là 'việc này đã kết thúc và sẽ không bao giờ tiếp tục". "Đang hoạt động" không có ngụ ý nào như vậy: một luồng không hoạt động có thể hoạt động trở lại, chẳng hạn như nếu một kênh mới được thêm vào đó. Thay vì duy trì một thuộc tính và chức năng khó hiểu, Nhóm công tác quyết định xoá hoạt động đó.

Dưới đây là ví dụ về cách sử dụng "MediaStream.active" để kiểm tra trạng thái của một luồng:

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

Việc xoá stop() khỏi MediaStream không xoá bất kỳ chức năng thực nào: các quy trình tách thiết bị nguồn, v.v. phải được thực hiện trên vẫn là MediaStreamTrack. Thay vào đó, hãy sử dụng stop() trên MediaStreamTrack:

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

nhãn

Hoá ra là không ai có thể tìm ra cách sử dụng cho thuộc tính này!

MediaStream.label đã được thêm vào phiên bản đầu tiên của thông số kỹ thuật, nhưng không ai thực sự biết mục đích của label. Chúng tôi cũng không rõ điều gì đã xảy ra với label khi một lượt phát trực tiếp đã được gửi qua RTCPeerConnection.

Nhóm công tác W3C đã hỏi thăm và không ai muốn sử dụng dịch vụ này, vì vậy họ đã gỡ bỏ.

Xin nhắc lại: MediaStream.id cung cấp giá trị nhận dạng duy nhất cho MediaStreamMediaStreamTrack.label cung cấp tên của nguồn của một luồng, chẳng hạn như loại máy ảnh hoặc micrô.

Có thêm thông tin về MediaStreamMediaStreamTrack từ Mạng nhà phát triển Mozilla và HTML5 Rocks cung cấp phần giới thiệu tuyệt vời về getUserMedia() trong Ghi lại âm thanh và Video.

Hơn bao giờ hết, chúng tôi trân trọng ý kiến phản hồi của bạn về những thay đổi đối với Chrome. Bạn có thể theo dõi lỗi liên quan đến những điểm ngừng sử dụng này (tại đâytại đây), cũng như tìm thêm nội dung thảo luận và thông tin chi tiết trong phần Ý định triển khai.