Phần nội dung nghe nhìn của WebRTC trình bày cách truy cập vào phần cứng có khả năng quay video và âm thanh, chẳng hạn như máy ảnh và micrô, cũng như cách hoạt động của các luồng nội dung nghe nhìn. Đồng thời, nó cũng bao gồm phương tiện hiển thị, là cách một ứng dụng có thể thực hiện giới hạn màn hình.
Thiết bị truyền thông
Tất cả máy ảnh và micrô được trình duyệt hỗ trợ đều được truy cập và quản lý thông qua đối tượng navigator.mediaDevices
. Các ứng dụng có thể truy xuất
danh sách các thiết bị đã kết nối hiện tại cũng như lắng nghe các thay đổi, vì nhiều
máy ảnh và micrô được kết nối qua USB và có thể được kết nối cũng như
ngắt kết nối trong suốt vòng đời của ứng dụng. Vì trạng thái của thiết bị truyền thông có thể thay đổi bất kỳ lúc nào, do đó, các ứng dụng nên đăng ký các thay đổi về thiết bị để xử lý thay đổi đúng cách.
Giới hạn
Khi truy cập vào thiết bị truyền thông, bạn nên cung cấp các hạn chế chi tiết nhất có thể. Mặc dù có thể mở máy ảnh và micrô mặc định bằng một hạn chế đơn giản, nhưng máy ảnh có thể phân phối luồng phương tiện truyền thông cách xa ứng dụng tối ưu nhất.
Các hạn chế cụ thể được xác định trong đối tượng MediaTrackConstraint
, một đối tượng cho
âm thanh và một cho video. Các thuộc tính trong đối tượng này thuộc loại
ConstraintLong
, ConstraintBoolean
, ConstraintDouble
hoặc
ConstraintDOMString
. Đó có thể là một giá trị cụ thể (ví dụ: một số, boolean hoặc chuỗi), một phạm vi (LongRange
hoặc DoubleRange
với giá trị tối thiểu và tối đa) hoặc một đối tượng có định nghĩa ideal
hoặc exact
. Đối với một giá trị cụ thể, trình duyệt sẽ cố gắng chọn nội dung gần nhất có thể.
Đối với một phạm vi, giá trị tốt nhất trong phạm vi đó sẽ được sử dụng. Khi exact
được xác định, chỉ những luồng phương tiện phù hợp chính xác với hạn chế đó mới được
trả về.
Gần
// Camera with a resolution as close to 640x480 as possible
{
"video": {
"width": 640,
"height": 480
}
}
Phạm vi
// Camera with a resolution in the range 640x480 to 1024x768
{
"video": {
"width": {
"min": 640,
"max": 1024
},
"height": {
"min": 480,
"max": 768
}
}
}
Chính xác
// Camera with the exact resolution of 1024x768
{
"video": {
"width": {
"exact": 1024
},
"height": {
"exact": 768
}
}
}
Để xác định cấu hình thực tế mà một luồng nội dung đa phương tiện nhất định có,
chúng ta có thể gọi MediaStreamTrack.getSettings()
và trả về
MediaTrackSettings
hiện đang áp dụng.
Bạn cũng có thể cập nhật các quy tắc ràng buộc của một bản nhạc trên thiết bị truyền thông mà chúng tôi
đã mở bằng cách gọi applyConstraints()
trên bản nhạc. Điều này cho phép
ứng dụng định cấu hình lại thiết bị truyền thông mà không phải đóng
luồng hiện tại.
Hiển thị nội dung nghe nhìn
Một ứng dụng muốn có khả năng ghi màn hình và ghi
phải sử dụng API Display Media. Hàm getDisplayMedia()
(một phần của navigator.mediaDevices
tương tự như getUserMedia()
) và được dùng cho
mục đích mở nội dung của màn hình (hoặc một phần màn hình, chẳng hạn như
cửa sổ). MediaStream
được trả về hoạt động giống như khi sử dụng
getUserMedia()
.
Các hạn chế đối với getDisplayMedia()
khác với các giới hạn dùng cho đầu vào video hoặc âm thanh thông thường.
{
video: {
cursor: 'always' | 'motion' | 'never',
displaySurface: 'application' | 'browser' | 'monitor' | 'window'
}
}
Trình cắt mã ở trên cho thấy cách hoạt động của các hạn chế đặc biệt đối với tính năng ghi màn hình. Xin lưu ý rằng những trình duyệt có hỗ trợ nội dung nghe nhìn có thể không hỗ trợ các trình duyệt này.
Luồng và bản nhạc
MediaStream
đại diện cho một luồng nội dung nghe nhìn, bao gồm các bản nhạc
(MediaStreamTrack
) âm thanh và video. Bạn có thể truy xuất tất cả các bản nhạc từ
MediaStream
bằng cách gọi MediaStream.getTracks()
, lệnh này sẽ trả về một mảng
các đối tượng
MediaStreamTrack
.
Bản nhạc đa phương tiện
MediaStreamTrack
có một thuộc tính kind
là audio
hoặc video
, cho biết loại phương tiện mà nó đại diện. Bạn có thể tắt tiếng mỗi bản nhạc bằng cách bật/tắt thuộc tính enabled
của bản nhạc đó. Bản nhạc có một thuộc tính Boolean remote
cho biết liệu bản nhạc đó có bắt nguồn từ một RTCPeerConnection
và đến từ một ứng dụng ngang hàng từ xa hay không.