Phương thức captureStream()
cho phép bạn chụp MediaStream
từ phần tử <canvas>
, <audio>
hoặc <video>
.
Điều này cho phép ghi lại luồng video hoặc âm thanh từ bất kỳ phần tử nào trong số này, phát trực tiếp qua WebRTC hoặc kết hợp với các hiệu ứng hoặc MediaStream
khác trong <canvas>
. Nói cách khác, captureStream()
cho phép MediaStream
truyền nội dung đa phương tiện qua lại giữa các phần tử canvas, âm thanh hoặc video — hoặc đến RTCPeerConnection
hoặc MediaRecorder
.
Trong bản minh hoạ sau (có trong mẫu WebRTC), MediaStream
được chụp từ phần tử canvas ở bên trái được truyền trực tuyến qua kết nối ngang hàng WebRTC đến phần tử video ở bên phải:
(Bạn có thể xem các đường liên kết đến các ví dụ khác về canvas và video ở bên dưới.)
Mã captureStream()
rất đơn giản.
Đối với <canvas>
:
var canvas = document.querySelector('canvas');
var video = document.querySelector('video');
// Optional frames per second argument.
var stream = canvas.captureStream(25);
// Set the source of the <video> element to be the stream from the <canvas>.
video.srcObject = stream;
Đối với <video>
:
var leftVideo = document.getElementById('leftVideo');
var rightVideo = document.getElementById('rightVideo');
leftVideo.onplay = function() {
// Set the source of one <video> element to be a stream from another.
var stream = leftVideo.captureStream();
rightVideo.srcObject = stream;
};
Nhưng tại sao?
Phương thức captureStream()
cho phép bạn ghi hoặc phát trực tiếp từ canvas và các phần tử nội dung nghe nhìn:
- Ghi lại và phát trực tiếp quá trình chơi trò chơi từ
<canvas>
- Quay video bằng máy ảnh, sau đó thêm nội dung hoặc hiệu ứng khác
- Tạo hiệu ứng hình trong hình từ nhiều video thông qua
<canvas>
- Kết hợp video và hình ảnh (từ tệp hoặc máy ảnh hoặc cả hai) trong
<canvas>
- Video phát trực tiếp từ tệp
- Sử dụng tin nhắn video hoặc tin nhắn thoại đã ghi cho thư thoại hoặc thư video
Về cơ bản, captureStream()
cho phép JavaScript tạo và "chèn nội dung" vào MediaStream.
Dòng chữ nhỏ
Việc cố gắng sử dụng
captureStream()
với một phần tử nội dung nghe nhìn triển khai tính năng bảo vệ nội dung thông qua Tiện ích nội dung nghe nhìn đã mã hoá sẽ gửi một ngoại lệ.Khi chụp từ
<canvas>
, tốc độ khung hình tối đa được đặt khi gọicaptureStream()
. Ví dụ:canvas.captureStream(10)
có nghĩa là canvas sẽ xuất ra từ 0 đến 10 khung hình/giây. Không có gì được ghi lại khi không có nội dung nào được vẽ trên<canvas>
và 10 khung hình/giây được ghi lại ngay cả khi<canvas>
được vẽ ở tốc độ 30 khung hình/giây. Có một lỗi có thêm nội dung thảo luận được gửi về thông số kỹ thuậtcaptureStream
.Kích thước của video
captureStream()
khớp với<canvas>
mà video đó được gọi.
Bản thu thử
Canvas
- Truyền từ phần tử canvas đến phần tử video
- Truyền trực tuyến từ một phần tử canvas đến một kết nối ngang hàng
Video
- Truyền từ phần tử video đến phần tử video
- Phát trực tuyến từ một phần tử video đến một kết nối ngang hàng
Hỗ trợ
- Canvas
captureStream()
: Firefox 43 trở lên; Chrome 50 trở lên với chrome://flags/#enable-experimental-web-platform-features được bật hoặc Chrome 52 trở lên theo mặc định. - Video và âm thanh
captureStream()
: Firefox 47; Chrome 52 trở lên với chrome://flags/#enable-experimental-web-platform-features được bật hoặc Chrome 53 trở lên theo mặc định.