渲染现有参与者的视频轨迹

时间:2017-07-03 13:27:46

标签: swift xcode twilio twilio-api

所以我连接到一个房间,可能已经有现有参与者分享他们的视频。但是,当我尝试遍历所有参与者并添加他们各自的视频时...它不起作用。出于某种原因,即使参与者计数不为0。 如何获取房间中所有现有参与者的视频曲目并进行渲染?

基本上这就是工作流程:

  1. 用户1和2进入会议室并分享他们的视频
  2. 用户3进入房间,并希望在屏幕上显示现有参与者的视频(例如,在他之前登录的用户1和2) 我怎么做? )
  3. 这是我的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)")
    }
    

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

当您连接到房间并找到参与者时,您可能尚未连接到他们的媒体流。相反,您应该实现TVIParticipantDelegate。正如您在Twilio Video quickstart application中看到的那样(只处理一个外部参与者,但这是一个很好的例子),当连接到一个房间时,将控制器设置为参与者的代表:

func didConnect(to room: TVIRoom) {
    if (room.participants.count > 0) {
        self.participant = room.participants[0]
        self.participant?.delegate = self
    }
}

然后,该示例实现TVIParticipantDelegate participant: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!)
        }
    }
}

And the other delegate methods here

让我知道这是否有帮助。