Ngừng sử dụng MediaStream

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

API MediaStream đại diện cho các luồng nội dung nghe nhìn được đồng bộ hoá. Ví dụ: một luồng lấy từ đầu vào của máy ảnh và micrô có các bản video và âm thanh được đồng bộ hoá. Mỗi bản nhạc được biểu thị bằng một MediaStreamTrack. (Đừng nhầm 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 hai phần bổ sung:

  • MediaStream.active
  • MediaStreamTrack.stop()

Những đối tượng 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 hay không, chứ không phải MediaStream.ended.
  • Sử dụng MediaStreamTrack.stop() để dừng xem 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 một luồng, ví dụ: FaceTime HD Camera (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 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. Đố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ầu, vì vậy, bạn có thể kiểm tra đối tượng đó trên bảng điều khiển. Gọi stream.getTracks()[0] để xem MediaStreamTrack của 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 Thu thập nội dung nghe nhìn và truyền trực tuyến W3C xem xét vấn đề xảy ra khi bạn thêm các kênh mới vào MediaStream và liệu một MediaStream trống đã kết thúc hay chưa, họ nhận ra rằng 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à "điều này đã kết thúc và sẽ không bao giờ tiếp tục". Trạng thái "Đang hoạt động" không có ngụ ý 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ư khi một kênh mới được thêm vào luồng đó. 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á thuộc tính đó.

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. vẫn 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

Hoá 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 quy cách, nhưng không ai thực sự biết label là dành cho điều gì. Chúng tôi 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 công tác W3C hỏi xung quanh nhưng không ai muốn xem, nên họ đã gỡ bỏ nội dung đó.

Để 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 nguồn của một luồng, chẳng hạn như loại camera hoặc micrô.

Bạn có thể tìm hiểu thêm thông tin về MediaStreamMediaStreamTrack từ Mạng nhà phát triển Mozilla, và HTML5 Rocks giới thiệu rất hay về getUserMedia() trong phần Ghi lại âm thanh và video.

Chúng tôi luôn 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 các lỗi liên quan đến những việc 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.