所以我连接到一个房间,这个房间可能已经有现有的参与者分享他们的视频。但是,当我尝试遍历所有参与者并添加他们各自的视频时……它不起作用。出于某种原因,即使参与者计数不是0。我如何获取房间中所有现有参与者的视频轨道并渲染它们?
所以基本上这是工作流程:
这是我的didConnect()委托代码,当一个人进入房间时触发。addVideoTrack函数为任何新参与者呈现视频,因此它工作正常,但我想为以前存在的参与者执行此操作。
func didConnect(to room: TVIRoom) {
connectedParticipants = room.participants
for participant in connectedParticipants {
for videoTrack in participant.videoTracks {
addVideoTrack(videoTrack:videoTrack)
}
}
changeRoomLabel(messageText: "Room: \(room.name)")
}
Twilio开发者布道者在这里。
当您连接到房间并找到参与者时,您可能还没有连接到他们的媒体流。相反,您应该实现TVI参与者代表
。正如您在Twilio Video快速入门应用程序(它只处理一个外部参与者,但是一个很好的例子)中看到的,当连接到房间时,将控制器设置为参与者的委托:
func didConnect(to room: TVIRoom) {
if (room.participants.count > 0) {
self.participant = room.participants[0]
self.participant?.delegate = self
}
}
然后,该示例实现了TVI参与者代表
参与者:addedVideoTrack
以在将视频添加到参与者后呈现视频:
extension ViewController : TVIParticipantDelegate {
func participant(_ participant: TVIParticipant, addedVideoTrack videoTrack: TVIVideoTrack) {
logMessage(messageText: "Participant \(participant.identity) added video track")
if (self.participant == participant) {
setupRemoteVideoView()
videoTrack.addRenderer(self.remoteView!)
}
}
}
和这里的其他委托方法。
如果有帮助,请告诉我。