与 Angular 进行 Twilio 视频 + 文字聊天

Twilio Video + Text Chat with Angular

我正在使用 Twilio 视频聊天处理医生咨询应用程序。

以下内容正在应用程序中运行:

  1. returns令牌的节点服务器
  2. Android 作为客户端的应用程序
  3. Angular 医生网络应用程序

音频和视频工作正常,但我想在应用程序之间交换文本消息,以便显示连接或断开连接通知。

这是我的 Angular 连接代码:

/**
 * @description Connect to a room
 * @param accessToken 
 * @param options 
 */
connectToRoom(accessToken: string, options): void {
    connect(accessToken, options).then(room => {
        this.roomObj = room;

        if (!this.previewing && options['video']) {
            this.initializeLocalConnection();
        }

        this.roomParticipants = room.participants;

        room.participants.forEach(participant => {
            this.attachParticipantTracks(participant);
        });

        room.on('participantDisconnected', (participant) => {
            this.participantDisconnected(participant);
        });

        room.on('participantConnected', (participant) => {
            this.initializeRemoteConnection(room, participant);
        });

        // When a Participant adds a Track, attach it to the DOM.
        room.on('trackPublished', (track, participant) => {
            this.attachTracks([track]);
        });

        // When a Participant removes a Track, detach it from the DOM.
        room.on('trackRemoved', (track, participant) => {
            this.detachTracks([track]);
        });

        room.once('disconnected', room => {
            this.disconnectRoom(room);
        });
    }, (error) => {
        alert(error.message);
    });
}

我用这段代码调用这个函数:

this.dataTrack = new LocalDataTrack();

this.connectToRoom(this.access_token, {
            name: this.room_name,
            //tracks: [this.dataTrack],
            audio: true,
            video: { height: 720, frameRate: 24, width: 1280 },
            bandwidthProfile: {
                video: {
                    mode: 'collaboration',
                    renderDimensions: {
                        high: { height: 1080, width: 1980 },
                        standard: { height: 720, width: 1280 },
                        low: { height: 176, width: 144 }
                    }
                }
            },
        });

我读到我需要为此使用数据轨道。为了接收消息,我添加了以下事件:

participant.on('trackAdded', track => {
  console.log(`Participant "${participant.identity}" added ${track.kind} Track ${track.sid}`);
  if (track.kind === 'data') {
    track.on('message', data => {
      console.log(data);
    });
  }
});

但是如果我尝试从代码中删除以下注释,音频和视频将停止工作。代码没有错误。

//tracks: [this.dataTrack],

这里是 Twilio 开发人员布道者。

当您添加行 tracks: [this.dataTrack] 时,您告诉 Twilio Video 这些是您想要包含的唯一轨道,并且会覆盖 SDK 请求相机和麦克风许可。

您可以在这里做两件事。要么自己请求视频和音频轨道,使用 navigator.mediaDevices.getUserMedia 并将轨道也传递到数组中。

或者,您也可以等到房间连上后再发布数据轨迹。

connectToRoom(accessToken: string, options): void {
    connect(accessToken, options).then(room => {
        this.roomObj = room;

        this.roomObj.publishTrack(this.dataTrack);

        // etc

    })
}