首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个视频交换媒体设备选项不起作用

两个视频交换媒体设备选项不起作用
EN

Stack Overflow用户
提问于 2018-10-03 10:59:45
回答 1查看 1.5K关注 0票数 1

我使用的是twiliotwilio-video v beta-2,它依赖于回购https://github.com/twilio/video-quickstart-js的主分支。

我需要显示选择媒体并将设备插入其中,但是当我尝试updateVideoDevice时,我得到了一个错误

代码语言:javascript
复制
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函数如下所示

代码语言:javascript
复制
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);
    });
}
}

有人能解释我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-04 06:25:54

两位开发人员在这里传道。

这看起来是Twilio v1和v2之间的一个重大变化。在v2文档中,调用localParticipant.videoTracks返回Map of <Track.SID, LocalVideoTrackPublication>。在该映射上调用.values()将返回LocalVideoTrackPublications的迭代器,然后使用Array.from将其转换为数组。

问题是,然后将LocalVideoTrackPublication的数组传递给localParticipant.unpublishTracks(tracks);,这会导致错误,因为unpublishTracks需要LocalTrack的数组,而不是LocalVideoTrackPublication的。

您可以通过在发布上映射并返回track属性来修复这个问题:

代码语言:javascript
复制
const tracks = Array.from(localParticipant.videoTracks.values())
                 .map(publication => publication.track);

如果这有帮助的话请告诉我。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52625577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档