Ngừng sử dụng MediaStream

Nếu làm việc với getUserMedia() hoặc WebRTC, bạn có thể cần điều chỉnh mã cho Chrome 45 trở lên.

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

Có 3 MediaStream không dùng nữa trong Chrome 45:

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

Song song với đó là hai nội dung bổ sung:

  • MediaStream.active
  • MediaStreamTrack.stop()

Những thay đổi này đòi hỏi những thay đổi sau:

  • Sử dụng MediaStream.active để kiểm tra xem MediaStream có đang truyền trực tuyến hay không, chứ không phải MediaStream.ended.
  • 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 một 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 luồng, ví dụ: FaceTime HD Camera (Built-in) (05ac:8510).

Bạn có thể xem các tính năng này hoạt động như thế nào: mở simpl.info/gum trong Chrome (trên thiết bị có máy ảnh) và xem bảng điều khiển Chrome DevTools. Đối tượng MediaStream stream được truyền đến lệnh gọi lại getUserMedia() trong bản minh hoạ này nằm trong phạm vi toàn cục, vì vậy, bạn có thể kiểm tra đối tượng đó từ bảng điều khiển. Gọi 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 Chrome DevTools

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

Khi Nhóm làm việc W3C về Quay video và truyền trực tuyến xem xét vấn đề về điều gì sẽ xảy ra khi bạn thêm các kênh mới vào MediaStream và liệu MediaStream trống có kết thúc hay không, họ nhận ra rằng không có cách nào hợp lý để triển khai ended trên MediaStream (như trong trường hợp "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à "đã kết thúc và sẽ không bao giờ tiếp tục". "Đang hoạt động" không mang ý nghĩa như vậy: một luồng không hoạt động có thể trở lại hoạt động, chẳng hạn như nếu một bản nhạc mới được thêm vào luồng đó. Thay vì duy trì một thuộc tính và hàm gây nhầm lẫn, Nhóm làm việc đã quyết định xoá thuộc tính và hàm đó.

Dưới đây là ví dụ về cách sử dụng "MediaStream.active" để kiểm tra trạng thái của 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: Dù sao thì các quy trình tách thiết bị nguồn, v.v. cũng phải được thực hiện trên 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

Hóa ra không ai có thể tìm ra cách sử dụng 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 label dùng để làm gì. Cũng không rõ điều gì đã xảy ra với label khi một luồng được gửi qua RTCPeerConnection.

Nhóm làm việc W3C đã hỏi thăm và không ai muốn sử dụng tính năng này nên họ đã xoá tính năng này.

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 luồng, chẳng hạn như loại máy ảnh hoặc micrô.

Bạn có thể xem thêm thông tin về MediaStreamMediaStreamTrack trên Mạng nhà phát triển Mozilla, đồng thời HTML5 Rocks cung cấp một phần giới thiệu tuyệt vời về getUserMedia() trong phần Ghi âm và quay video.

Như mọi khi, chúng tôi rất mong nhận được ý 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 các lỗi liên quan đến việc ngừng sử dụng này (tại đâytại đây) cũng như tìm thấy thêm nội dung thảo luận và thông tin chi tiết trong phần Ý định triển khai.