问题描述
我以这种方式设置了一个AWS Chime会议,其中包含5个视频图块(video-tile-0至video-tile-4):
会议建立后,观察者回调audioVideoDidStart
被启动,这时我绑定了#local-video-tile
var localTileId = meetingSession.audioVideo.startLocalVideoTile();
meetingSession.audioVideo.bindVideoElement(localTileId,videoElement);
$(videoElement).show();
接下来,用户点击开始共享以激活meetingSession.audioVideo.startContentShareFromScreenCapture();
共享开始后,将调用观察者回调videoTileDidUpdate
。
这就是我的问题。我有2个视频图块应被占用。
videoTileDidUpdate = tile =>
然后遍历tileId为1和tileId为2的图块。
但是每个tileId都会循环4次。每次,即使每个图块具有相同的tileId,其设置也不同。
tileId: 1,active: false,isContent: false,isLocal: true,boundAttendeeId: null
tileId: 1,active: true,boundAttendeeId: <guid>
tileId: 1,isLocal: true:
boundAttendeeId: null
tileId: 1,isLocal: true:
boundAttendeeId: null
tileId: 2,isLocal: false,boundAttendeeId: null
tileId: 2,isContent: true,boundAttendeeId: <guid>#content
tileId: 2,isConent: true,boundAttendeeId: <guid>
tileId: 2,boundAttendeeId: null
通过使用tile对象中提供的标志,我消除了循环中的许多内容。
videoTileDidUpdate: tile => {
if (tile.active || tile.localTile) return;
if (tile.isContent && tile.boundAttendeeId) {
var contentVideoEl = document.getElementById("screen-share-tile");
meetingSession.audioVideo.bindVideoElement(tile.tileId,contentVideoEl);
} else if (tile.boundAttendeeId || tile.isContent || tile.localTile) {
return;
}
else
{
var videoElement = attendeeVideoElements[tile.tileId - 1];
meetingSession.audioVideo.bindVideoElement(tile.tileId,videoElement);
}
}
//Which Now outputs:
tileId: 2,boundAttendeeId: <guid>#content
如您所知,这会将我的screenShare绑定到#screen-share-tile
和video-tile-2
我该如何预防?
我还缺少另一个布尔值吗?
现在,它在文档中说isContent
将代表屏幕共享或用户共享的内容(如视频),那么tileId 2如何具有所有这些不同的设置?是否正确标记tileId?
我尝试了if块的许多不同变体,并将startContentShareFromScreenCapture(<state>)
中的状态设置为无效。
AWS提供的资源是摘要,关于其中的任何内容实际上没有多少描述。 https://aws.github.io/amazon-chime-sdk-js/index.html
任何帮助是极大的赞赏!我已经为此苦苦挣扎了两个星期。
解决方法
我会很快回答自己的问题,因为我知道越来越多的人正在寻找答案。
是:“我是否缺少另一个布尔值?”那是我的问题的答案,但是我想我会尽力像我一样帮助任何在JS SDK上苦苦挣扎的人。
我最好的建议是查看文档。...但是
要了解任何文档,您必须了解观察者。
这是了解他们的系统如何工作的关键。
audioVideoObeserver到底能做什么...?
然后注意,还有其他观察者。这些观察者对什么...?
诚然,有些观察似乎重叠,可能会引起混淆,但是请仔细查看示例,并注意它们用于什么功能的观察者。
然后理解那些观察者是循环运行的。 您需要弄清的最后一件事是在每个循环中检查哪些值。请注意,模式是相同的。
希望对别人有帮助。
,你能分享你的 HTML,这将有助于更好地理解吗? 另外,试试这个:
if (!tileState.boundAttendeeId) {
return;
}