概述
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>