Chụp và ràng buộc phương tiện

Phần nội dung nghe nhìn của WebRTC đề cập đến cách truy cập vào phần cứng có khả năng ghi lại video và âm thanh, chẳng hạn như máy ảnh và micrô, cũng như cách hoạt động của luồng nội dung nghe nhìn. API này cũng bao gồm cả nội dung nghe nhìn hiển thị, tức là cách một ứng dụng có thể chụp màn hình.

Thiết bị phát nội dung nghe nhìn

Tất cả máy ảnh và micrô mà 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 hiện tại gồm các thiết bị đã kết nối và cũng có thể theo dõi các thay đổi, vì nhiều camera và micrô kết nối qua USB và có thể kết nối cũng như ngắt kết nối trong vòng đời của ứng dụng. Vì trạng thái của thiết bị đa phương tiện có thể thay đổi bất cứ lúc nào, nên các ứng dụng nên đăng ký các thay đổi về thiết bị để xử lý các thay đổi một cách thích hợp.

Giới hạn

Khi truy cập vào các thiết bị nghe nhìn, bạn nên cung cấp các ràng buộc chi tiết nhất có thể. Mặc dù có thể mở camera và micrô mặc định bằng một ràng buộc đơn giản, nhưng điều này có thể mang đến một luồng nội dung nghe nhìn không tối ưu cho ứng dụng.

Các ràng buộc cụ thể được xác định trong một đối tượng MediaTrackConstraint, một 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. Đây có thể là một giá trị cụ thể (ví dụ: số, boolean hoặc chuỗi), một dải giá trị (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 một giá trị gần nhất có thể. Đối với một dải giá trị, giá trị tốt nhất trong dải đó sẽ được sử dụng. Khi exact được chỉ định, chỉ những luồng nội dung nghe nhìn hoàn toàn khớp với điều kiện ràng buộc đó 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ế của một bản nhạc nhất định trong luồng nội dung nghe nhìn, chúng ta có thể gọi MediaStreamTrack.getSettings(). Lệnh gọi này sẽ trả về MediaTrackSettings hiện đang được áp dụng.

Bạn cũng có thể cập nhật các điều kiện hạn chế của một bản nhạc từ thiết bị nghe nhìn mà bạn đã mở bằng cách gọi applyConstraints() trên bản nhạc đó. Điều này cho phép một ứng dụng định cấu hình lại thiết bị nghe nhìn mà không cần phải đóng luồng hiện có trước.

Hiển thị nội dung nghe nhìn

Ứng dụng muốn có thể chụp và ghi màn hình phải sử dụng Display Media API. Hàm getDisplayMedia() (là 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 của nội dung đó, chẳng hạn như một cửa sổ). MediaStream được trả về hoạt động giống như khi dùng getUserMedia().

Các điều kiện ràng buộc đối với getDisplayMedia() khác với các điều kiện ràng buộc được 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'
    }
}

Đoạn mã ở trên cho thấy cách hoạt động của các ràng buộc đặc biệt đối với tính năng ghi màn hình. Xin lưu ý rằng không phải trình duyệt nào có hỗ trợ displayMedia cũng hỗ trợ các tham số này.

Luồng và kênh

MediaStream biểu thị 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(). Thao tác này sẽ trả về một mảng các đối tượng MediaStreamTrack.

MediaStreamTrack

MediaStreamTrack có thuộc tính kindaudio hoặc video, cho biết loại nội dung nghe nhìn mà thuộc tính này đại diện. Bạn có thể tắt từng phụ đề bằng cách bật/tắt thuộc tính enabled của phụ đề đó. Một bản nhạc có thuộc tính Boolean remote cho biết liệu bản nhạc đó có được lấy nguồn từ RTCPeerConnection và đến từ một thiết bị ngang hàng từ xa hay không.