Twilio Video - опция переключения медиаустройств не работает - PullRequest
0 голосов
/ 03 октября 2018

Я использую 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 Ответ

0 голосов
/ 04 октября 2018

Евангелист разработчиков 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 с.

Это можно исправить, сопоставив публикации и вернув trackсвойство:

const tracks = Array.from(localParticipant.videoTracks.values())
                 .map(publication => publication.track);

Дайте мне знать, если это поможет.

...