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

news2024/11/23 12:04:06

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:both
        string 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:both
        string 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.coloradmin.cn/o/1717628.html

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

相关文章

【运维项目经历|025】企业高效邮件系统部署与运维项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的问题 问题1&#xff1a;项目周期为多长时间&#xff1f; 问题2&#xff1a;服务器部署架构方式及数量…

【EI会议|稳定检索】2024年计算机科学与信号处理国际会议(CSSP 2024)

2024年计算机科学与信号处理国际会议&#xff08;CSSP 2024&#xff09; International Conference on Computer Science and Signal Processing in 2024 【大会信息】 大会地点&#xff1a;深圳 大会官网&#xff1a;http://www.iaccssp.com 投稿邮箱&#xff1a;iaccsspsub-…

丢失的数字 ---- 位运算

题目链接 题目: 分析: 解法一: 哈希表解法二: 高斯求和解法三:位运算 异或运算根据运算的性质, 相同的两个a异或 0 以示例一为例: 数组中有0,1,3, 缺失的数字是2, 那么只要我们将数组与0,1,2,3 异或, 就会得到2 代码: class Solution {public int missingNumber(int[] num…

CS的下载+内网穿透

CS的下载 纵向渗透&#xff1a;NC 瑞士军刀菜刀是一个hyyp协议 NC是TCP NC连接后没有任何回显 先受控房 nc.exe -l -p 12345 然后攻击方 nc.exe ip port 12345 扫描端口 上传和 nc.exe 同一目录下的文件 跳板机工具和NC的实际操作以及Termite联合管理 和nc是一样的…

ArcGIS教程(04):查找最近的消防站

本节目标 创建、设置和求解最近设施点分析。在本练习中&#xff0c;将查找可对给定地址处发生的火灾做出最快响应的四个消防站。还将生成消防队员的行进路线和驾车方向。 准备视图 双击打开【Exercise04.mxd】启用 【ArcGIS Network Analyst 扩展模块】单击【自定义 > 工…

DVWA靶场搭建:Apache、MySQL、PHP、DVWA

最近为了能够较为真实地学习Web渗透的各种技术&#xff0c;就想着自己搭建一个专门用于学习的Web演练平台--DVWA“靶场”。 DVWA可以进行暴力&#xff08;破解&#xff09;、命令行注入、跨站请求伪造、文件包含、文件上传、不安全的验证码、SQL注入、SQL盲注、弱会话ID、XSS漏…

解决docker容器: bash: ping: command not found, 并制作镜像

一. 出现原因 从 dockerhub 拉下来的镜像都是最轻量级的, 不会安装各种工具, 所以使用 ping, vim 等命令, 会出现 command not found 二. 解决方式 2.1 安装工具包 进入到一个正在运行的容器内部, 执行命令: apt-get update 之后会发现, 容器正在更新软件包, 不过最终会由…

(1+X)Java程序设计高级(一)

Throwable&#xff1a;异常的基类&#xff0c;所有异常都继承自 java.lang.Throwable 类&#xff0c;Throwable 类有两个直接子类&#xff1a;Error 类和 Exception 类。Error&#xff1a;是 Java 应用程序本身无法恢复的严重错误&#xff0c;应用程序不需要捕获、处理这些严重…

运筹学_2.线性规划

这里写目录标题 2.1 线性规划模型的建立线性规划定义线性规划模型建立的步骤 2.2 线性规划的标准型线性规划的一般形式线性规划的标准型线性规划的一般形式化为标准型方法 2.3 线性规划图解法2.4 线性规划问题的解可行解最优解基、基解、基可行解、可行基线性规划解的关系最优解…

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask flyfish Word-level Language Modeling using RNN and Transformer word_language_model PyTorch 提供的 word_language_model 示例展示了如何使用循环神经网络RNN(GRU或LSTM)和 Transforme…

JVM学习-字节码指令集(四)

异常处理指令 抛出异常指令 athrow指令&#xff1a;在Java程序中显示抛出异常的操作(throw语句)都是由athrow指令来实现除了throw语句显示抛出异常情况之外&#xff0c;JVM规范还规定了许多运行时异常会在其他Java虚拟机指令检测到异常状况时自动抛出&#xff0c;在之前介绍的…

Java八股文面试全套真题

Java八股文面试全套真题 一、Redis1.1、你在最近的项目中哪些场景使用了redis呢&#xff1f;1.2、缓存穿透1.3、布隆过滤器1.4、缓存击穿1.5、缓存雪崩1.6、redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;&#xff08;双写一致性&#xff09;1.6.1、读…

期权的时间价值是什么?和期权内在价值有啥不同?

今天带你了解期权的时间价值是什么&#xff1f;和期权内在价值有啥不同&#xff1f;期权的内在价值&#xff0c;是指期权立即执行产生的经济价值。 期权的时间价值是什么&#xff1f; 期权的时间价值是期权价格的一个重要组成部分&#xff0c;也被称为期权的外在价值。它是指期…

身处加密娱乐时代,我们需要的是新技术还是新应用

撰文&#xff1a;Matti 编译&#xff1a;Yangz&#xff0c;Techub News 点击查看文章来源&#xff1a;Techub News 现实的情况会让你不禁自问&#xff0c;「我们是否需要更多的基础设施来吸引更多的用户&#xff1f;」答案是&#xff0c;相较于新应用&#xff0c;我们并不需…

【数据结构】二叉树-堆(下)-链式二叉树

个人主页~ 二叉树-堆&#xff08;上&#xff09; 栈和队列 二叉树 四、堆的代码实现Heap.hHeap.ctest.c 五、堆的应用堆排序思想进行排序 六、二叉树链式结构的实现BTree.hBTree.ctest.c 四、堆的代码实现 Heap.h #pragma once#include <stdio.h> #include <stdlib…

现在,所有人都能免费用GPT-4o了!

OpenAI今日官宣&#xff0c;ChatGPT正式向所有用户免费开放&#xff01;所有用户均可以访问定制化GPT、分析图表、询问有关照片的问题以及5月初GPT-4o添加的其他功能。 OpenAI今天在X上发布推文&#xff1a; 「所有ChatGPT免费用户现在都可以使用浏览、视觉、数据分析、文件上…

【动态规划 组合数学 放球问题】2338. 统计理想数组的数目

本文涉及知识点 动态规划汇总 组合数学汇总 【组合数学 隔板法 容斥原理】放球问题 本题同解 【动态规划】【前缀和】【分组】2338. 统计理想数组的数目 LeetCode2338. 统计理想数组的数目 给你两个整数 n 和 maxValue &#xff0c;用于描述一个 理想数组 。 对于下标从 0…

在“AI PC”中使用NPU运行 Phi-3-mini

欢迎关注我的公众号“ONE生产力”&#xff0c;获取更多AI、云计算资讯分享&#xff01; 前段时间&#xff0c;我做了一系列微软Phi-3-mini小语言模型的教程&#xff0c;很多朋友参考教程进行了实践&#xff0c;其中有一个朋友反馈说模型token推理很慢&#xff0c;没有答道我说…

做项目时,怎么运用 SWOT 分析法进行项目或决策分析?

SWOT分析法是一种常用的战略工具&#xff0c;用于评估项目或决策的优势、劣势、机会和威胁。以下是在项目或决策分析中如何运用SWOT分析法的一般步骤&#xff1a; 步骤1&#xff1a;明确分析的目标 在进行SWOT分析之前&#xff0c;首先要明确分析的目标是什么。你可能想要分析…

如何学习ai agent?

如何学习Agent&#xff0c;推荐阅读《动手做AI Agent》这本书。 推荐理由&#xff1a; 1&#xff1a;一本书能够全方位了解并探索Agent的奥秘&#xff01; &#xff08;1&#xff09;Agent的发展进程。 &#xff08;2&#xff09;可以帮我们做哪些事&#xff1a;自动办公&am…