metaRTC新增mqtt支持

概述

MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,metaRTC6.0新增了mqtt协议实现,不需要第三方类库,实现为纯C代码实现。

源码下载

https://github.com/metartc/metaRTC

https://gitee.com/metartc/metaRTC

yang_config.h配置文件修改

#define Yang_Enable_Datachannel 1
#define Yang_Enable_Mqtt        1
#define Yang_Enable_Json        1
#define Yang_Enable_Openh264    1

修改Yang_Enable_Mqtt为1

c/c++ create and destroy

int32_t yang_create_mqtt(YangMqtt* mqtt,YangAVInfo* avinfo,YangMqttCallback* mqttcb);

void yang_destroy_mqtt(YangMqtt* mqtt);

c/c++ simple sample

    #include <yangmqtt/YangMqtt.h>

    void yang_test_mqtt_receive(void* session,char* topic,char* msg){    
        yang_trace("\nmsg===%s",msg);
    }

    YangMqtt mqtt={0};
    YangMqttCallback callback;

    callback.session=NULL;
    callback.mqtt_receive=yang_test_mqtt_receive;

    yang_create_mqtt(&mqtt,&avinfo,&callback);

    mqtt.connect(mqtt.session,16*1024,16*1024,(char*)"192.168.0.66",1883,NULL,NULL);
    mqtt.subscribe(mqtt.session,(char*)"metaRTC");
    
    char c=0;
    int32_t count=0;
    char msg[128]={0};
    while((c=getchar())!='q'){
        if(c=='p'){
            memset(msg,0,sizeof(msg));
            sprintf(msg,"This is test %d",count++);
            yang_trace("\n publish msg %s",msg);
            mqtt.publish(mqtt.session,(char*)"metaRTC",msg,yang_strlen(msg));
        }
    }
    mqtt.close(mqtt.session);
    yang_destroy_mqtt(&mqtt);

html simple sample

<script src="js/mqtt.min.js" ></script>
<script type="text/javascript">
    var client = null;
    // called when the client connects
    function onConnect() {
    // Once a connection has been made, make a subscription and send a message.
        console.log("connect success!");
        client.subscribe("metaRTC");
    }
    // called when the client loses its connection
    function onConnectionLost(responseObject) {
        if (responseObject.errorCode !== 0) {
            console.log("onConnectionLost:"+responseObject.errorMessage);
        }
    }
    // called when a message arrives
    function onMessageArrived(message) {
        console.log("onMessageArrived:"+message.payloadString);
    }
    function yang_mqtt_connect(hostname, port,  clientId){

        if(client==null) client = new Paho.Client(hostname, port, clientId);
        // set callback handlers
        client.onConnectionLost = onConnectionLost;
        client.onMessageArrived = onMessageArrived;
        // connect the client
        client.connect({onSuccess:onConnect});
    }
    
    function makeid() {
        var text = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        for (var i = 0; i < 15; i++)
            text += possible.charAt(Math.floor(Math.random() * possible.length));
        return text; //+text;
    }

    function test(){
        yang_mqtt_connect("192.168.0.66",8083,makeid());
    }
    function test2(){
        if(client!=null) client.disconnect();
    }
    function yang_publish(){
        var message = new Paho.Message(msg1.value);
        console.log("publish msg:"+msg1.value);
        message.destinationName = "metaRTC";
        client.send(message);
    }
</script>

猜你喜欢

转载自blog.csdn.net/m0_56595685/article/details/129036871