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 xemMediaStream
có đang truyền trực tuyến hay không, chứ không phảiMediaStream.ended
. - Sử dụng
MediaStreamTrack.stop()
để dừng xem trực tuyến, chứ không phảiMediaStream.stop()
. - Nếu bạn cần một giá trị nhận dạng duy nhất cho
MediaStream
, hãy sử dụngMediaStream.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.
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 MediaStream
và MediaStreamTrack.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ề MediaStream
và MediaStreamTrack
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 đây và tạ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.