流媒体服务器SMS-语音对讲(一)

1.简介

        在国标语音对讲对接中,会发现不同的厂商或不同型号的设备,对讲流程都不一样,本文主要介绍流媒体与设备之间的交互情况。

        SMS流媒体服务代码库地址:https://gitee.com/inyeme/simple-media-server

2.流媒体与设备交互的可能情况

        对讲流程中,流媒体与设备的交互场景大致可以分为几种:

  1. 作为服务端,被动等待设备来建链,并发送数据
  2. 作为服务端,被动等待设备来建链,等待设备发数据
  3. 作为服务端,被动等待设备来建链,既发送也接收数据
  4. 作为客户端,主动向设备建链,并发送数据
  5. 作为客户端,主动向设备建链,等待设备发数据
  6. 作为客户端,主动向设备建链,既发送也接收数据

3.几种常见对讲流程

3.1.单向通道

情况1:

情况2:

3.2.双向通道

情况1:

情况2:

4.SMS对讲接口

        目前SMS支持单向对讲的几种场景,对应的对讲接口如下:

void GB28181Api::initApi()
{g_mapApi.emplace("/api/v1/gb28181/recv/create", GB28181Api::createGB28181Receiver);g_mapApi.emplace("/api/v1/gb28181/send/create", GB28181Api::createGB28181Sender);g_mapApi.emplace("/api/v1/gb28181/recv/stop", GB28181Api::stopGB28181Receiver);g_mapApi.emplace("/api/v1/gb28181/send/stop", GB28181Api::stopGB28181Sender);
}

        从接口上,可以创建发送者或者接受者

void GB28181Api::createGB28181Sender(const HttpParser& parser, const UrlParser& urlParser, const function<void(HttpResponse& rsp)>& rspFunc)
{HttpResponse rsp;rsp._status = 200;json value;checkArgs(parser._body, {"active", "ssrc", "port", "socketType", "streamName", "appName", "ip"});int active = toInt(parser._body["active"]);// logInfo << "json active: " << parser._body["active"];// logInfo << "active: " << active;if (active) {int ssrc = toInt(parser._body["ssrc"]);int port = toInt(parser._body["port"]);int socketType = toInt(parser._body["socketType"]); //1:tcp,2:udp,3:bothstring streamName = parser._body["streamName"];string appName = parser._body["appName"];string ip = parser._body["ip"];auto push = make_shared<GB28181ClientPush>(ip, port, appName, streamName, ssrc, socketType);push->create();push->start();string key = ip + "_" + to_string(port) + "_" + to_string(ssrc);GB28181Client::addClient(key, push);value["port"] = push->getLocalPort();value["ip"] = push->getLocalIp();value["ssrc"] = ssrc;} else {int ssrc = toInt(parser._body["ssrc"]);int port = toInt(parser._body["port"]);int socketType = toInt(parser._body["socketType"]); //1:tcp,2:udp,3:bothstring streamName = parser._body["streamName"];string appName = parser._body["appName"];GB28181Server::instance()->startSend("0.0.0.0", port, socketType, appName, streamName, ssrc);value["port"] = port;value["ip"] = Config::instance()->get("LocalIp");value["ssrc"] = ssrc;}value["code"] = "200";value["msg"] = "success";rsp.setContent(value.dump());rspFunc(rsp);
}

        在创建发送者或接收者的时候,又可以指定是主动建链还是被动等待建链。基本满足了单向通道的对讲流程。

5.结束语

        目前SMS还在开发中,欢迎有兴趣的朋友一起开发,qq号见项目地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中延迟加载的方式有哪些

延迟加载&#xff08;Lazy loading&#xff09;是一种性能优化策略&#xff0c;它通过将资源的加载推迟到真正需要使用的时候&#xff0c;来减少页面初始加载的时间和资源消耗。以下是几种常见的延迟加载方式&#xff1a; 1. 图片延迟加载&#xff1a;将页面中的图片的src属性…

Maven pom文件profile的properties在yaml配置文件替换失效问题

Maven profile的properties在yaml配置文件替换失效问题 Maven profile的properties在yaml配置文件替换失效问题原来错误的配置修改后的配置 Maven profile的properties在yaml配置文件替换失效问题 原因&#xff1a;spring-boot项目需要使用进行分割&#xff0c;如yaml配置文件…

Golang:使用embed引入静态文件

Go 语言从 1.16 版本开始引入了一个新的标准库 embed&#xff0c;可以在二进制文件中引入静态文件 指令&#xff1a;/go:embed 通过一个简单的小实例&#xff0c;来演示将静态文件引入到golang的二进制打包产物中 项目结构 $ tree . ├── main.go └── static└── he…

max6675热电偶温度采集

思路来源 参考价格 概述 MAX6675具有冷端补偿和将来自K型热电偶的信号数字化。数据以12位分辨率输出&#xff0c;SPI™兼容&#xff0c; 只读格式。该转换器将温度分解为0.25C&#xff0c;允许读数高达1024C&#xff0c;并显示热电偶8LSB在0C至 700C 引脚连接 温度采样电路 …

中间件复习之-消息队列

消息队列在分布式架构的作用 消息队列&#xff1a;在消息的传输过程中保存消息的容器&#xff0c;生产者和消费者不直接通讯&#xff0c;依靠队列保证消息的可靠性&#xff0c;避免了系统间的相互影响。 主要作用&#xff1a; 业务解耦异步调用流量削峰 业务解耦 将模块间的…

python中正则表达式学习

文章目录 介绍基本语法常用函数捕获组和命名组非捕获组贪婪匹配和非贪婪匹配多行模式和点匹配所有模式示例总结 介绍 Python 中的正则表达式&#xff08;regular expressions, 简称 regex&#xff09;由 re 模块提供。正则表达式是一种用于匹配字符串的强大工具&#xff0c;常…

MySQL之创建高性能的索引(八)

创建高性能的索引 覆盖索引 通常大家都会根据查询的WHERE条件来创建合适的索引&#xff0c;不过这只是索引优化的一个方面。设计优秀的索引应该考虑到整个查询&#xff0c;而不单单是WHERE条件部分。索引确实是一种查找数据的高效方式&#xff0c;但是MySQL也可以使用索引来直…

向量数据库引领 AI 创新——Zilliz 亮相 2024 亚马逊云科技中国峰会

2024年5月29日&#xff0c;亚马逊云科技中国峰会在上海召开&#xff0c;此次峰会聚集了来自全球各地的科技领袖、行业专家和创新企业&#xff0c;探讨云计算、大数据、人工智能等前沿技术的发展趋势和应用场景。作为领先的向量数据库技术公司&#xff0c;Zilliz 在本次峰会上展…

【漏洞复现】电信网关配置管理系统 rewrite.php 文件上传漏洞

0x01 产品简介 中国电信集团有限公司(英文名称"China Telecom”、简称“"中国电信”)成立于2000年9月&#xff0c;是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员…

在线IP检测如何做?代理IP需要检查什么?

当我们的数字足迹无处不在&#xff0c;隐私保护显得愈发重要。而代理IP就像是我们的隐身斗篷&#xff0c;让我们在各项网络业务中更加顺畅。 我们常常看到别人购买了代理IP服务后&#xff0c;通在线检测网站检查IP&#xff0c;相当于一个”售前检验““售后质检”的作用。但是…

2024-5-31 石群电路-19

2024-5-31&#xff0c;星期五&#xff0c;10:53&#xff0c;天气&#xff1a;阴雨&#xff0c;心情&#xff1a;晴。今天就要回学校啦&#xff0c;当大家看到这篇推文的时候我已经要收拾收拾去赶返校的火车啦&#xff0c;和女朋友短暂分别&#xff0c;不过小别胜新婚吗&#xf…

css动画效果(边框流光闪烁阴影效果)

1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa7odDQYuaatklJUMc5anU10PWLAt14rNnNUD6oHJG9U63fc0yibiapuDViatVk62ma3K63oqQ3U1VtMQ/640?wx_fmtgif&fromappmsg&wxfrom13 CSS边框流光闪烁阴影动画效果是一种令人印象深刻的技术&#xff0c;它通过动态的光…

笔记-docker基于ubuntu22.04安装Jitsi Meet

背景 利用JitsiMeet打造一个可以在线会议的环境&#xff0c;根据躺的坑&#xff0c;做个记录 参考 JitsMeet部署安装说明 开始操作 环境 docker run -it --name ubuntu22.04 ubuntu:22.04 /bin/bash问题 1、安装 openjdk-11 apt install openjdk-11-jdk配置环境变量&…

es初始化

一.初始化es public void initES() {/*LOGGER.info("host" host);LOGGER.info("port" port);LOGGER.info("scheme" scheme);LOGGER.info("userName" userName);LOGGER.info("password" password);*/// 客户端连接创建…

自媒体必用的50 个最佳 ChatGPT 社交媒体帖子提示prompt通用模板教程

在这个信息爆炸的时代&#xff0c;社交媒体已经成为我们生活中不可或缺的一部分。无论是品牌宣传、个人展示&#xff0c;还是日常交流&#xff0c;我们都离不开它。然而&#xff0c;要在众多信息中脱颖而出&#xff0c;吸引大家的关注并不容易。这时候&#xff0c;ChatGPT这样的…

uniapp的tooltip功能放到表单laber

在uniapp中&#xff0c;tooltip功能通常是通过view组件的hover-class属性来实现的&#xff0c;而不是直接放在form的label上。hover-class属性可以定义当元素处于hover状态时的样式类&#xff0c;通过这个属性&#xff0c;可以实现一个类似tooltip的效果。 以下是一个简单的例…

代码随想录35期Day56-Java

Day56题目 LeetCode647回文子串的数量 核心思想:使用数组dp[i][j]表示s从i到j是否是回文串 class Solution {public int countSubstrings(String s) {// dp[i][j] 表示s从i到j是不是回文串boolean[][] dp new boolean[s.length()][s.length()];for(int i 0 ; i < s.len…

跨境经营的艺术:中资企业海外市场售后服务创新与挑战

出海&#xff0c;已不再是企业的“备胎”&#xff0c;而是必须面对的“大考”&#xff01;在这个全球化的大潮中&#xff0c;有的企业乘风破浪&#xff0c;勇攀高峰&#xff0c;也有的企业在异国他乡遭遇了“水土不服”。 面对“要么出海&#xff0c;要么出局”的抉择&#xff…

JavaScript笔记一-初识JavaScript

1、JavaScript的起源 JavaScript诞生于1995年&#xff0c;它的出现主要是用于处理网页中的前端验证。所谓的前端验证&#xff0c;就是指检查用户输入的内容是否符合一定的规则。比如&#xff1a;用户名的长度&#xff0c;密码的长度&#xff0c;邮箱的格式等。 2、JavaScript…

一分钟学习数据安全——自主管理身份SSI基本概念

之前我们已经介绍过数字身份的几种模式。其中&#xff0c;分布式数字身份模式逐渐普及演进的结果就是自主管理身份&#xff08;SSI&#xff0c;Self-Sovereign Identity&#xff09;。当一个人能够完全拥有和控制其数字身份&#xff0c;而无需依赖中心化机构&#xff0c;这就是…