我将twilio
v twilio-video
与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);
});
}
}
任何人都可以解释我在做什么错吗?
答案 0 :(得分: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
的数组不是{{1} } s。
您可以通过映射出版物并返回LocalVideoTrackPublication
属性来解决此问题:
track
让我知道是否有帮助。