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.