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.