Twilio Video - опция переключения медиаустройств не работает
Я использую twilio
с twilio-video
v beta-2
в расчете на главную ветку этого репо https://github.com/twilio/video-quickstart-js
Я должен отобразить выбранный носитель и вставить в него устройства, но когда я пытаюсь обновить VideoDevice, я получил ошибку
updateVideoDevice error TypeError: track must be a LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack
at Object.INVALID_TYPE (index.js:30952)
at Object.validateLocalTrack (index.js:31469)
at LocalParticipant.unpublishTrack (index.js:17047)
at index.js:17096
at Array.reduce (<anonymous>)
at LocalParticipant.unpublishTracks (index.js:17095)
at index.js:36056
мой updateVideoDevice
функция заключается в следующем
function updateVideoDevice(event) {
const select = event.target;
const localParticipant = room.localParticipant;
if (select.value !== '') {
Video.createLocalVideoTrack({
deviceId: { exact: select.value }
}).then(function(localVideoTrack) {
const tracks = Array.from(localParticipant.videoTracks.values());
localParticipant.unpublishTracks(tracks);
log(localParticipant.identity + " removed track: " + tracks[0].kind);
detachTracks(tracks);
localParticipant.publishTrack(localVideoTrack);
log(localParticipant.identity + " added track: " + localVideoTrack.kind);
const previewContainer = document.getElementById('local-media');
attachTracks([localVideoTrack], previewContainer);
})
.catch(error => {
console.error('updateVideoDevice error' ,error);
});
}
}
Кто-нибудь может объяснить, что я делаю не так?
1 ответ
Twilio разработчик евангелист здесь.
Это выглядит как прорывное изменение между Twilio Video JS v1 и v2. В v2 документации звоню localParticipant.videoTracks
возвращает Map
из <Track.SID, LocalVideoTrackPublication>
, призвание .values()
на этой карте возвращается итератор LocalVideoTrackPublication
s, который затем превращается в массив с помощью Array.from
,
Проблема в том, что вы передаете этот массив LocalVideoTrackPublication
с localParticipant.unpublishTracks(tracks);
что вызывает ошибку, потому что unpublishTracks
ожидает массив LocalTrack
не LocalVideoTrackPublication
s.
Вы можете исправить это, сопоставляя публикации и возвращая track
имущество:
const tracks = Array.from(localParticipant.videoTracks.values())
.map(publication => publication.track);
Дайте мне знать, если это поможет.