Batasan dan pengambilan media

Bagian media WebRTC mencakup cara mengakses hardware yang mampu menangkap video dan audio, seperti kamera dan mikrofon, serta cara media melakukan streaming Anda. Ini juga mencakup media tampilan, yang merupakan cara aplikasi melakukan pengambilan gambar.

Perangkat media

Semua kamera dan mikrofon yang didukung oleh browser dapat diakses dan dikelola melalui objek navigator.mediaDevices. Aplikasi dapat mengambil daftar perangkat terhubung saat ini dan juga mendengarkan perubahan, karena banyak kamera dan mikrohpone terhubung melalui USB dan dapat dihubungkan dan terputus selama siklus hidup aplikasi. Karena status media dapat berubah setiap saat, disarankan agar aplikasi mendaftar untuk perubahan perangkat untuk menangani perubahan dengan benar.

Batasan

Saat mengakses perangkat media, sebaiknya berikan informasi batasan sebanyak mungkin. Meskipun memungkinkan untuk membuka kamera {i>default<i} dan dengan batasan sederhana, alat ini mungkin memberikan streaming media yang jauh dari yang paling optimal untuk aplikasi.

Batasan spesifik ditentukan dalam objek MediaTrackConstraint, satu untuk audio dan satu untuk video. Atribut dalam objek ini berjenis ConstraintLong, ConstraintBoolean, ConstraintDouble, atau ConstraintDOMString. Ini bisa berupa nilai tertentu (mis., angka, boolean atau string), rentang (LongRange atau DoubleRange dengan nilai minimum dan nilai maksimum) atau objek dengan definisi ideal atau exact. Untuk nilai tertentu, {i>browser<i} akan mencoba memilih sesuatu yang sedekat mungkin. Untuk rentang, nilai terbaik dalam rentang tersebut akan digunakan. Jika exact adalah ditentukan, hanya streaming media yang sama persis dengan batasan tersebut yang akan dikembalikan.

Near

// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

Rentang

// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

Persis

// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

Untuk menentukan konfigurasi sebenarnya yang dimiliki oleh {i>track<i} {i>media<i}, kita dapat memanggil MediaStreamTrack.getSettings() yang menampilkan MediaTrackSettings saat ini diterapkan.

Anda juga dapat memperbarui batasan trek dari perangkat media yang telah dibuka, dengan memanggil applyConstraints() pada trek. Hal ini memungkinkan mengonfigurasi ulang perangkat media tanpa harus menutup feed yang sudah ada.

Tampilkan media

Sebuah aplikasi yang ingin melakukan pengambilan dan perekaman layar harus menggunakan Display Media API. Fungsi getDisplayMedia() (yang merupakan bagian dari navigator.mediaDevices mirip dengan getUserMedia() dan digunakan untuk tujuan membuka konten tampilan (atau sebagian, seperti jendela). MediaStream yang ditampilkan berfungsi sama seperti saat menggunakan getUserMedia().

Batasan untuk getDisplayMedia() berbeda dengan batasan yang digunakan untuk reguler input video atau audio.

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

Snipet kode di atas menunjukkan bagaimana batasan khusus untuk perekaman layar berhasil. Perhatikan bahwa ini mungkin tidak didukung oleh semua browser yang memiliki dukungan media.

Streaming dan lagu

MediaStream mewakili streaming konten media, yang terdiri dari trek (MediaStreamTrack) audio dan video. Anda dapat mengambil semua lintasan dari MediaStream dengan memanggil MediaStream.getTracks(), yang menampilkan array Objek MediaStreamTrack.

MediaStreamTrack

MediaStreamTrack memiliki properti kind yang berupa audio atau video, menunjukkan jenis media yang diwakilinya. Setiap trek dapat dibisukan dengan mengalihkan properti enabled miliknya. Trek memiliki properti Boolean remote yang menunjukkan jika berasal dari RTCPeerConnection dan berasal dari peer jarak jauh.