MQTT作为WebRTC信令

2018-12-05  本文已影响0人  张俊峰0613

Stun Server是开源的coTurn穿透服务器,Signal Server是开源的Apache Active MQ。

部署环境

搭建信令服务器

Signal Server用的是开源的Apache ActiveMQ,网上有很多花里胡哨的方法,这个是简单能搭建成功的过程,搭建过程

搭建穿透服务

穿透服务器用的是开源的coturn,搭建过程

SDP交换
根据MQTT协议订阅发布机制:
订阅同一个主题:(实现接收消息)
发布同一个主题:(实现发布消息)

对于每一个客户端来说唯一标示是ClientId,客户端发布消息时设置的主题也是ClientId.

1、客户端连接到ActiveMQ服务器


main

这里的ClientId,就是在ActiveMQ服务端添加的


添加ClientId

这里主要是连接到ActiveMQ的流程

/**
     * 连接到服务器
     * @param clientId
     */
    private void CreateConnect(String clientId) {
        this.clientId = clientId;

        //服务器地址
        String  uri ="tcp://";
        uri = uri + host + ":" + port;
        Log.d(TAG,"URI === " + uri + "   ClientID === " + clientId);

        MqttAndroidClient client = new MqttAndroidClient(context,uri,clientId);

        mqttConnection = new MqttConnection(clientId,host,port,client,false);

        MqttConnectOptions conOpt = new MqttConnectOptions();

        conOpt.setConnectionTimeout(30);//连接超时时间
        conOpt.setKeepAliveInterval(60);//心跳间隔时间 100 S

        client.setCallback(new MqttCallbackHandler(context,clientId));//连接后的回调
        //开始连接到服务器
        try {
            client.connect(conOpt,null,new ConnectCallBackHandler(context));
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

首先,呼叫方initCall,主要作用是创建PeerConnection对象,设备,将音视频数据封装成MediaStream添加到然后打开本地音视频PeerConnection中,显示呼叫页面。
然后呼叫方startCall,主要作用是CreateOffer,SendOffer,所以要发布Topic:呼叫方Message;
假如ClientA呼叫ClientB,首先ClientA订阅主题ClientB,然后ClientB订阅主题ClientA。

Client A给Client B发送消息时,发布主题Client_A_ID和Message。
Client B给Client A发送消息时,发布主题Client_B_ID和Message。

zjf001连接到服务器
根据前面文章,看一下基本流程

上一篇 下一篇

猜你喜欢

热点阅读