Acquisizione di contenuti multimediali e vincoli

La parte multimediale di WebRTC spiega come accedere all'hardware in grado di acquisire video e audio, ad esempio videocamere e microfoni, nonché il modo in cui i contenuti multimediali al lavoro. Tratta anche gli elementi multimediali display, ovvero le funzionalità di un'applicazione relative allo schermo acquisire immagini.

Dispositivi multimediali

Tutte le videocamere e tutti i microfoni supportati dal browser sono accessibili e gestite tramite l'oggetto navigator.mediaDevices. Le applicazioni possono recuperare l'elenco corrente dei dispositivi connessi e di ascoltare i cambiamenti, dato che videocamere e microphon si collegano tramite USB e possono essere collegati è disconnesso durante il ciclo di vita dell'applicazione. Poiché lo stato di un mezzo dispositivo può cambiare in qualsiasi momento, è consigliabile che le applicazioni vengano registrate modifiche ai dispositivi per gestirle correttamente.

Vincoli

Quando si accede ai dispositivi multimediali, è buona norma fornire informazioni i vincoli possibili. Sebbene sia possibile aprire la videocamera predefinita un microfono con un semplice vincolo, potrebbe trasmettere uno stream multimediale lontano da quello ottimale per l'applicazione.

I vincoli specifici sono definiti in un oggetto MediaTrackConstraint, uno per e un'altra per i video. Gli attributi in questo oggetto sono di tipo ConstraintLong, ConstraintBoolean, ConstraintDouble o ConstraintDOMString. Può trattarsi di un valore specifico (ad es. un numero, booleano o stringa), un intervallo (LongRange o DoubleRange con un numero minimo e valore massimo) oppure un oggetto con una definizione di ideal o exact. Per un specifico, il browser tenterà di scegliere un valore il più simile possibile. Per un intervallo, verrà utilizzato il valore migliore dell'intervallo. Quando il valore di exact è specificato, solo gli stream multimediali che corrispondono esattamente a quel vincolo saranno restituito.

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
        }
    }
}

Esatto

// 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 MediaTrackSettings attualmente applicato.

È anche possibile aggiornare i vincoli di una traccia da un dispositivo multimediale aperti richiamando applyConstraints() sul canale. Ciò consente a un riconfigurare un dispositivo multimediale senza dover prima chiudere stream esistente.

Contenuti multimediali display

Un'applicazione che vuole eseguire l'acquisizione schermo e la registrazione devono utilizzare l'API Display Media. La funzione getDisplayMedia() (che fa parte di navigator.mediaDevices è simile a getUserMedia() e viene utilizzato per lo scopo di aprire i contenuti del display (o di una parte, come finestra di dialogo). Il valore MediaStream restituito funziona come quando utilizzi getUserMedia().

I vincoli per getDisplayMedia() sono diversi da quelli utilizzati per le regole input video o audio.

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

Il riepilogo del codice riportato sopra mostra come i vincoli speciali per la registrazione dello schermo funziona. Tieni presente che potrebbero non essere supportati da tutti i browser con display il supporto dei media.

Stream e tracce

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

MediaStreamTrack

Un MediaStreamTrack ha una proprietà kind di tipo audio o video, per indicare il tipo di contenuti media che rappresenta. L'audio di ogni traccia può essere disattivato attivando/disattivando la relativa proprietà enabled. Una traccia ha una proprietà booleana remote che indica se proviene da un RTCPeerConnection e proviene da un peer remoto.