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 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 truyền 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 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.
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 MediaStream
và MediaStreamTrack.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ề MediaStream
và MediaStreamTrack
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 đây và tạ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.