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

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 kindaudio 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.