Acquisizione di contenuti multimediali e vincoli

La parte di WebRTC contiene informazioni su come accedere all'hardware in grado di acquisire video e audio, ad esempio videocamere e microfoni, nonché su come funzionano gli stream multimediali. Descrive inoltre i contenuti multimediali display, ovvero come un'applicazione può acquisire screenshot.

Dispositivi multimediali

Tutte le videocamere e i microfoni supportati dal browser sono accessibili e gestiti tramite l'oggetto navigator.mediaDevices. Le applicazioni possono recuperare l'elenco attuale di dispositivi connessi e anche ascoltare le modifiche, poiché molte videocamere e micro versodichi si connettono tramite USB e possono essere collegate e scollegate durante il ciclo di vita dell'applicazione. Poiché lo stato di un dispositivo multimediale può cambiare in qualsiasi momento, è consigliabile che le applicazioni si registrino alle modifiche del dispositivo per gestire correttamente le modifiche.

Limitazioni

Quando si accede ai dispositivi multimediali, è consigliabile fornire vincoli il più dettagliati possibile. Sebbene sia possibile aprire la fotocamera e il microfono predefiniti con un semplice vincolo, potrebbe fornire uno stream multimediale tutt'altro che ottimale per l'applicazione.

I vincoli specifici sono definiti in un oggetto MediaTrackConstraint, uno per l'audio e l'altro per il video. Gli attributi in questo oggetto sono di tipo ConstraintLong, ConstraintBoolean, ConstraintDouble o ConstraintDOMString. Può trattarsi di un valore specifico (ad esempio un numero, di un valore booleano o di una stringa), di un intervallo (LongRange o DoubleRange con un valore minimo e massimo) oppure di un oggetto con una definizione ideal o exact. Per un valore specifico, il browser tenterà di scegliere qualcosa di quanto più vicino possibile. Per un intervallo verrà utilizzato il valore migliore. Quando exact è specificato, verranno restituiti solo i flussi di dati che corrispondono esattamente a tale vincolo.

Vicino

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

Intervallo

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

Exact

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

Per determinare la configurazione effettiva di una determinata traccia di uno stream multimediale, possiamo chiamare MediaStreamTrack.getSettings(), che restituisce l'elemento MediaTrackSettings attualmente applicato.

È anche possibile aggiornare i vincoli di una traccia da un dispositivo multimediale aperto, chiamando il canale applyConstraints(). Ciò consente a un'applicazione di riconfigurare un dispositivo multimediale senza dover prima chiudere il flusso esistente.

Visualizza contenuti multimediali

Un'applicazione che vuole poter acquisire schermate e registrazioni deve utilizzare l'API Display Media. La funzione getDisplayMedia() (che fa parte di navigator.mediaDevices è simile a getUserMedia() e viene utilizzata per aprire i contenuti del display (o una sua parte, ad esempio una finestra). MediaStream restituito funziona come quando utilizzi getUserMedia().

I vincoli per getDisplayMedia() sono diversi da quelli utilizzati per l'input video o audio standard.

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

Il codice codice precedente indica come funzionano i vincoli speciali per la registrazione dello schermo. Tieni presente che potrebbero non essere supportati da tutti i browser che supportano il supporto display.

Stream e tracce

Un MediaStream rappresenta uno stream di contenuti multimediali, che comprende tracce (MediaStreamTrack) di audio e video. Puoi recuperare tutte le tracce da MediaStream richiamando MediaStream.getTracks(), che restituisce un array di oggetti MediaStreamTrack.

MediaStreamTrack

Un MediaStreamTrack ha una proprietà kind che è audio o video, che indica il tipo di media che rappresenta. Puoi disattivare l'audio di ogni traccia attivandone la proprietà enabled. Una traccia ha una proprietà booleana remote che indica se è stata originata da un RTCPeerConnection e proviene da un peer remoto.