3


我以这种方式设置了一个 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();

接下来,用户单击Start Share以激活SharemeetingSession.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,
isContent: false,
isLocal: true,
boundAttendeeId: <guid>

tileId: 1,
active: true,
isContent: false,
isLocal: true:
boundAttendeeId: null

tileId: 1,
active: false,
isContent: false,
isLocal: true:
boundAttendeeId: null

tileId: 2,
active: false,
isContent: false,
isLocal: false,
boundAttendeeId: null

tileId: 2,
active: false,
isContent: true,
isLocal: false,
boundAttendeeId: <guid>#content

tileId: 2,
active: true,
isConent: true,
isLocal: false,
boundAttendeeId: <guid>

tileId: 2,
active: false,
isContent: false,
isLocal: false,
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,
active: false,
isContent: false,
isLocal: false,
boundAttendeeId: null

tileId: 2,
active: false,
isContent: true,
isLocal: false,
boundAttendeeId: <guid>#content



如您所知,这会将我的 screenShare 绑定到#screen-share-tilevideo-tile-2

如何防止这种情况?
我还缺少另一个布尔值吗?

现在它在文档中说isContent将代表屏幕共享或用户共享的内容(如视频),那么 tileId 2 是如何拥有所有这些不同设置的呢?是否正确标记了 tileId?

我尝试了许多不同的 if 块变体,并在中设置状态startContentShareFromScreenCapture(<state>)无济于事。
AWS 提供的资源是片段,实际上没有太多关于它应该如何工作的描述。https://aws.github.io/amazon-chime-sdk-js/index.html

任何帮助是极大的赞赏!我已经为此苦苦挣扎了两个星期。

4

2 回答 2

2

我会很快回答我自己的问题,因为我知道越来越多的人一直在寻找答案。

是:“我还缺少另一个布尔值吗?” 这就是我的问题的答案,但我想我会尝试帮助任何像我一样在 JS SDK 中苦苦挣扎的人。

我最好的建议是查看文档....但是

要了解任何文档,您必须了解观察者。这是了解他们的系统如何工作的关键。audioVideoObserver 究竟做了什么……?

然后注意还有其他的观察者。这些观察者做什么……?

诚然,有些观察者似乎重叠,这可能会让人感到困惑,但请查看示例并注意他们将哪个观察者用于什么功能。

然后了解那些观察者在循环中运行。您必须弄清楚的最后一件事是在每个循环中检查哪些值。请注意,模式是相同的。

希望对某人有所帮助。

于 2020-11-21T06:23:09.037 回答
0

你能分享你的 HTML,这将有助于更好地理解吗?另外,试试这个:

if (!tileState.boundAttendeeId) {
      return;
}
于 2021-07-30T08:41:08.103 回答