MQTT推送
概述
摩云视讯平台支持通过MQTT推送技术,实时地将视频会议过程中的各种状态变化推送给调用方。
与CometD相比,MQTT提供了几乎支持所有主流编程语言的客户端实现。
可以在 https://mqtt.org/software/ 查看所有支持的客户端。
基本概念
MQTT:ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求。
通道:MQTT中的核心概念,发布者发布消息到通道中,订阅者订阅通道来接收消息。详细见通道说明。
推送消息流程
用户使用推送服务需要先登录MQTT服务器,需要使用参数account_token
和sso_cookie
。
这里复用了平台业务API的登录逻辑,先通过AppKey
和AppSecret
获取account_token
,再使用用户名及密码登录。
详细登录步骤请参考登录认证。
得到account_token
和sso_cookie
后,sso_cookie
将作为用户名,account_token
作为密码,通过MQTT协议的登录请求,发送至平台1884端口。
收到登录成功的回调后,可以进行订阅操作,选择需要订阅的内容通道,当通道有更新内容时,会将更新消息推到客户端。
以Python为例:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
# rc为0时代表连接成功
# 0: 连接成功
# 1: 连接拒绝 - -– 协议版本错误
# 2: 连接拒绝 - -- 客户端身份验证错误
# 3: 连接拒绝 - -- 服务器不存在
# 4: 连接拒绝 - -- 用户名 / 密码错误
# 5: 连接拒绝 - -- 未授权错误
# 6-255: 连接拒绝 - -- 当前不可用
if rc == 0:
client.subscribe([("/userdomains/{user_domain_moid}/confs/+", 0)])
def on_subscribe(client, userdata, mid, granted_qos):
# granted_qos:(qos,qos,..)
# 0: 订阅成功, 最大可用QoS为0
# 1: 订阅成功,最大可用QoS为1
# 2: 订阅成功, 最大可用QoS为2
# 128: 订阅失败
print(granted_qos)
def on_message(client, userdata, msg):
print(msg.topic+' '+str(msg.payload))
if __name__ == '__main__':
client = mqtt.Client()
client.username_pw_set('{account_token}', '{sso_cookie}')
client.on_connect = on_connect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.connect("172.16.xxx.xxx", 1884, 60)
client.loop_forever()
通道说明
这里的通道与会议业务API中的通道类似,需要在前面加上订阅的用户域moid信息,如下所示:
通道 | 说明 |
---|---|
/confs/{conf_id} | 会议信息 |
/confs/{conf_id}/cascades | 级联信息 |
/confs/{conf_id}/cascades/{cascade_id}/mts/{mtid} | 终端信息 |
/confs/{conf_id}/chairman | 主席 |
/confs/{conf_id}/speaker | 发言人 |
/confs/{conf_id}/dualstream | 双流源 |
/confs/{conf_id}/vad | 语音激励 |
/confs/{conf_id}/mixs/{mix_id} | 混音 |
/confs/{conf_id}/vmps/{vmp_id} | 画面合成 |
/confs/{conf_id}/poll | 会议轮询 |
/confs/{conf_id}/recorders/{rec_id} | 录像 |
/confs/{conf_id}/mtvmps/{mt_id} | 终端自主画面合成 |
/confs/{conf_id}/hduvmps/{hdu_id} | 电视墙自主画面合成 |
/confs/{conf_id}/hdus/{hdu_id} | 会议电视墙 |
/confs/{conf_id}/inspections/{mt_id}/{mode} | 终端选看 |
/confs/{conf_id}/upload | 上传终端 |
/confs/{conf_id}/monitor/{dst_ip}/{dst_port} | 监控 |
完整推送通道信息请参考推送接口概览
订阅通道时,可以仅订阅通道本身,也可以使用通配符来订阅通道的子通道。
订阅通道本身:
subscribe /channel
订阅一级子通道(如:/channel/a
, /channel/b
):
subscribe /channel/+
订阅所有层级子通道(如:/channel/a
, /channel/a/1
, /channel/b
):
subscribe /channel/#
注意:通配符仅能在通道的最后一段中使用。
使用场景分析:
订阅某个会议的所有信息:
subscribe /userdomains/{domain_id}/confs/001112/#
订阅会议列表更新信息:
subscribe /userdomains/{domain_id}/confs/+
订阅本级终端列表:
subscribe /userdomains/{domain_id}/confs/0001112/cascades/0/mts/+
订阅所有会议信息:
subscribe /userdomains/{domain_id}/confs/#
订阅通配符通道时,服务器推送过来的消息内容中的通道是不带有通配符的具体通道。