【问题标题】:Twilio Video - switch media devices option not workingTwilio Video - 切换媒体设备选项不起作用
【发布时间】:2019-03-08 14:20:51
【问题描述】:

我正在使用 twiliotwilio-video v beta-2 指望这个 repo 的主分支https://github.com/twilio/video-quickstart-js
我必须显示选择的媒体并将设备推入其中,但是当我尝试 updateVideoDevice 时出现错误

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);
    });
}
}

谁能解释我做错了什么?

【问题讨论】:

    标签: twilio twilio-functions twilio-video


    【解决方案1】:

    这里是 Twilio 开发者宣传员。

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

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

    您可以通过映射出版物并返回 track 属性来解决此问题:

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

    如果有帮助,请告诉我。

    【讨论】:

    • 谢谢,这确实有效,但仅适用于 ios safari 浏览器。它在android上根本不起作用,在chrome或firefox上不起作用,开关分离并附加同一个相机的新轨道?!
    • 这听起来像是一个不同的问题。您是否可以进行更多调试,然后提出新问题?
    • 错误是,NotReadableError: could not start a video source
    • 您是否也在我的 GitHub 存储库上提出过关于此的问题?也许我们可以在那里做呢?
    猜你喜欢
    • 2013-02-22
    • 2014-07-05
    • 2016-11-28
    • 2019-02-15
    • 2014-11-06
    • 2013-12-18
    • 2016-08-11
    • 2020-10-03
    • 2015-01-09
    相关资源
    最近更新 更多