SmargGBD(GB28181设备接入模块)如何对接wvp-gb28181-pro

技术背景

我们在对接SmartGBD(GB28181设备接入模块)的时候,除了常规的海康大华宇视等国标平台外,有些公司会选择wvp-gb28181-pro。

众所周知,WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。适用于支持浏览器无插件播放摄像头视频。 支持国标设备(摄像机、平台、NVR等)设备接入 支持非国标(onvif, rtsp, rtmp,直播设备等等)设备接入,充分利旧。 支持国标级联。多平台级联。跨网视频预览。 支持跨网网闸平台互联。

基于此,我们也编译了wvp-gb28181-pro,本地部署了他们的服务。编译安装不再赘述,wvp-gb28181-pro提供了相关的技术说明,有一定开发能力的技术人员,应该很容易搭建起来。

技术对接

一切准备就绪,我们在大牛直播SDK的SmartGBD Android的demo上,设置下wvp-gb28181-pro的平台对接参数:

   /*** GB28181 相关参数,可以修改相关参数后测试 ***/
    GBSIPAgent     gb28181_agent_             = null;
    private int    gb28181_sip_local_port_base_  = 5060;

    private String gb28181_sip_server_id_     = "41010500002000000001";
    private String gb28181_sip_domain_        =  "4101050000";
    private String gb28181_sip_server_addr_   = "192.168.0.106";
    private int    gb28181_sip_server_port_   = 8118;

    private String gb28181_sip_user_agent_filed_  = null; // "NT GB UserAgent V1.7";
    private String gb28181_sip_username_   = "41010500001310000039";
    private String gb28181_sip_password_   = "12345678";

    private int gb28181_reg_expired_           = 3600; // 注册有效期时间最小3600秒
    private int gb28181_heartbeat_interval_    = 20; // 心跳间隔GB28181默认是60, 目前调整到20秒
    private int gb28181_heartbeat_count_       = 3; // 心跳间隔3次失败,表示和服务器断开了
    private int gb28181_sip_trans_protocol_    = 0; // 0表示信令用UDP传输, 1表示信令用TCP传输

    private long gb28181_rtp_sender_handle_ = 0;
    private int  gb28181_rtp_payload_type_  = 96;
    private String gb28181_rtp_encoding_name_ = "PS";

启动GB28181:

    class ButtonGB28181AgentListener implements View.OnClickListener {
        public void onClick(View v) {
            record_executor_.cancel_tasks();

            stopRecordDownloads(true);
            stopPlaybacks(true);

            stopAudioPlayer();
            destoryRTPReceiver();

            gb_broadcast_source_id_ = null;
            gb_broadcast_target_id_ = null;
            btnGB28181AudioBroadcast.setText("GB28181语音广播");
            btnGB28181AudioBroadcast.setEnabled(false);

            stopGB28181Stream();
            destoryRTPSender();

            if (null == gb28181_agent_ ) {
                if( !initGB28181Agent() )
                    return;
            }

            if (gb28181_agent_.isRunning()) {
                gb28181_agent_.terminateAllAudioBroadcasts(true);
                gb28181_agent_.terminateAllPlays(true);// 目前测试下来,发送BYE之后,有些服务器会立即发送INVITE,是否发送BYE根据实际情况看
                gb28181_agent_.stop();
                btnGB28181Agent.setText("启动GB28181");
            }
            else {
                record_executor_.cancel_tasks();
                initPlaybacks(null);
                initRecordDownloads(null);
                if ( gb28181_agent_.start() ) {
                    btnGB28181Agent.setText("停止GB28181");
                }
            }
        }
    }

如果注册成功的话,wvp-gb28181-pro平台会显示在线:

点击“通道”,进入相应channel页面:

这里可以选择,直接播放,wvp国标平台侧会发INVITE请求过来:

    INVITE sip:34020000001380000001@192.168.0.104:5060 SIP/2.0
    Call-ID: b8787860378195821a173f98138b77fb@192.168.0.106
    CSeq: 613 INVITE
    From: <sip:41010500002000000001@4101050000>;tag=fbc9cccc34234fc3b4d78cb7035ca7a5
    To: <sip:34020000001380000001@192.168.0.104:5060>
    Via: SIP/2.0/UDP 192.168.0.106:8118;branch=z9hG4bK2349190019;rport=8118;received=192.168.0.106
    Max-Forwards: 70
    User-Agent: WVP-Pro v2.6.9.20231103
    Contact: <sip:41010500002000000001@192.168.0.106:8118>
    Subject: 34020000001380000001:0105008771,41010500002000000001:0
    Content-Type: APPLICATION/SDP
    Content-Length: 288
    
    v=0
    o=34020000001380000001 0 0 IN IP4 192.168.0.106
    s=Play
    c=IN IP4 192.168.0.106
    t=0 0
    m=video 50136 TCP/RTP/AVP 96 97 98 99
    a=recvonly
    a=rtpmap:96 PS/90000
    a=rtpmap:98 H264/90000
    a=rtpmap:97 MPEG4/90000
    a=rtpmap:99 H265/90000
    a=setup:passive
    a=connection:new
    y=0105008771

Android平台GB28181设备接入侧响应处理,然后发送打包后的ps数据即可。

wvp-gb28181-pro还支持李是视音频回放,点击页面的设备录像即可进入回放页面,选择相应的日期,国标平台侧会发文件检索请求(RecordInfo):

    MESSAGE sip:41010500001310000039@192.168.0.104:5060 SIP/2.0
    Call-ID: a1b37a6c55bf502c790df7ca66591942@192.168.0.106
    CSeq: 622 MESSAGE
    From: <sip:41010500002000000001@4101050000>;tag=5adbe8c090fd40698b58c9d77795e5c2
    To: <sip:41010500001310000039@192.168.0.104:5060>
    Via: SIP/2.0/UDP 192.168.0.106:8118;branch=z9hG4bK2970158694;rport=8118;received=192.168.0.106
    Max-Forwards: 70
    User-Agent: WVP-Pro v2.6.9.20231103
    Content-Type: Application/MANSCDP+xml
    Content-Length: 277
    
    <?xml version="1.0" encoding="GB2312"?>
    <Query>
    <CmdType>RecordInfo</CmdType>
    <SN>813631</SN>
    <DeviceID>34020000001380000001</DeviceID>
    <StartTime>2023-11-05T00:00:00</StartTime>
    <EndTime>2023-11-05T23:59:59</EndTime>
    <Secrecy> 0 </Secrecy>
    <Type>all</Type>
    </Query>

检索的文件列表如下,点击播放即可。

如果需要录像文件下载,还需要安装wvp-pro-assist插件,这里就不再尝试了。

除了常规功能外,比如视频预览、云台控制、预置位、支持订阅和通知、心跳保活外,wvp-gb28181-pro还支持实时位置订阅,遗憾的是,demo没有看到语音广播和语音对讲,由于平台是开放的,感兴趣的开发者也可以扩展支持。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】iptables命令的使用

iptables是一个非常强大的Linux防火墙工具&#xff0c;你可以使用它来控制网络流量的访问和转发。 前面已经学习了iptables的基本原理&#xff0c;四表五链的基本概念&#xff0c;也已经安装好了iptables&#xff0c;下面我们主要学习iptables命令的基本使用。 可以使用iptable…

苍穹外卖-day07

苍穹外卖-day07 课程内容 缓存菜品缓存套餐添加购物车查看购物车清空购物车 功能实现&#xff1a;缓存商品、购物车 效果图&#xff1a; 1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据…

Unity--视觉组件(Raw Image,Mask)||Unity--视觉组件(Text,Image)

1.Raw Image 2.mask “”Raw Image&#xff1a;“” Texture&#xff1a;&#xff08;纹理&#xff09; 表示要显示的图像的纹理&#xff1b; Color&#xff1a;&#xff08;颜色&#xff09; 应用于图像的颜色&#xff1b; Material&#xff1a;&#xff08;材质&#xff09…

25 _ 红黑树(上):为什么工程中都用红黑树这种二叉树?

上两节,我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn)。 不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于log2n的情况…

从白日梦到现实:推出 Elastic 的管道查询语言 ES|QL

作者&#xff1a;George Kobar, Bahubali Shetti, Mark Settle 今天&#xff0c;我们很高兴地宣布 Elastic 的新管道查询语言 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;的技术预览版&#xff0c;它可以转换、丰富和简化数据调查。 ES|QL 由新的查询引擎提供支持&am…

超详细的性能测试流程

一、性能测试概念 我们经常看到的性能测试概念&#xff0c;有人或称之为性能策略&#xff0c;或称之为性能方法&#xff0c;或称之为性能场景分类&#xff0c;大概可以看到性能测试、负载测试、压力测试、强度测试等一堆专有名词的解释。 针对这些概念&#xff0c;我不知道你…

【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码

目录 1. 监督学习 (Supervised Learning): 2. 无监督学习 (Unsupervised Learning): 3. 强化学习 (Reinforcement Learning): 4. 半监督学习 (Semi-Supervised Learning): 5. 自监督学习 (Self-Supervised Learning): 6. 迁移学习 (Transfer Learning): 7 机器学习范式应…

第十三章《搞懂算法:神经网络是怎么回事》笔记

目前神经网络技术受到追捧&#xff0c;一方面是由于数据传感设备、数据通信技术和数据存储技术 的成熟与完善&#xff0c;使得低成本采集和存储海量数据得以成为现实;另一方面则是由于计算能力的大幅提升&#xff0c;如图形处理器(Graphics Processing Unit&#xff0c;GPU)在神…

【Linux】Centos7 shell实现MySQL5.7 tar 一键安装

&#x1f984; 个人主页——&#x1f390;个人主页 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; 感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01;&…

upload-labs12-21关

第十二关 提示及源码 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_file $_FILES…

KEIL MDK 调试 无法 查看 外设 信息 原因及解决方法

MDK5.38版本有bug : 不能把STM32F4的官方SVD文件转换成SFR&#xff0c;而MDK5.38a版本没有此问题。

前端通过导入editor.md库实现markdown功能

小王学习录 今日摘录前言jquery下载editor下载editor和jquery的导入初始化editor总结 今日摘录 满招损&#xff0c;谦受益 前言 要想通过editor.md实现markdown的功能&#xff0c;需要经过如下四步&#xff1a; 下载editor.md到本地将本地editor导入到前端代码中编写少量代…

Leetcode—103.二叉树的锯齿形层序遍历【中等】

2023每日刷题&#xff08;二十六&#xff09; Leetcode—103.二叉树的锯齿形层序遍历 BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of ar…

【原创课设】java+swing+mysql药店管理系统设计与实现

摘要&#xff1a; 药店管理系统对于药店运营具有重大的意义。首先&#xff0c;它可以提高药店的运营效率&#xff0c;减少人工操作成本&#xff0c;通过信息化的管理方式&#xff0c;可以提高药店的服务质量和管理水平&#xff0c;增强药店的市场竞争力。用户可以登录系统直接…

Raft分布式一致性算法

拜占庭将军 假设多位拜占庭将军中没有叛军&#xff0c;信使的信息可靠但有可能被暗杀的情况下&#xff0c;将军们如何达成是否要进攻的一致性决定&#xff1f;解决问题的思路是&#xff0c;从多位处于平等地位的将军中选举出一位大将军&#xff0c;所有作战指令由大将军发出。…

伪造referer [极客大挑战 2019]Http1

打开题目 没有发现什么&#xff0c;我们查看源代码 在这里我们发现了提示 访问一下页面得到 提示说不能来自于https://Sycsecret.buuoj.cn&#xff0c;我们尝试访问一下这个url 发现访问不了 我们bp抓包一下 伪造个referer头 referer:https://Sycsecret.buuoj.cn 发包过去…

经典的测试开发面试题

1、你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根绝需求说明书&#xff0c;产品说明、设计文档等&…

邻接表储存图实现广度优先遍历(C++)

目录 基本要求&#xff1a; 邻接表的结构体&#xff1a; 图的邻接表创建&#xff1a; 图的广度优先遍历&#xff08;BFS&#xff09;&#xff1a; 邻接表的打印输出&#xff1a; 完整代码&#xff1a; 测试数据&#xff1a; 结果运行&#xff1a; 通过给出的图的顶点和…

Jmeter之Bean shell使用详解

一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精…

Android---内存泄漏的优化

内存泄漏是一个隐形炸弹&#xff0c;其本身并不会造成程序异常&#xff0c;但是随着量的增长会导致其他各种并发症&#xff1a;OOM&#xff0c;UI 卡顿等。 为什么要将 Activity 单独做预防&#xff1f; 因为 Activity 承担了与用户交互的职责&#xff0c;因此内部需要持有大…