GB28181系列四:GB28181实战

ops/2024/12/17 7:12:10/

        我的音视频/流媒体开源项目(github)

        GB28181系列目录

目录

一、GB28181平台

二、IPC向BXC_SipServer注册

三、GB28181播放器


        GB28181的基础理论已经介绍完毕,上篇文章也介绍了GB28181流媒体服务器ZLMediaKit,本篇文章将搭建一整套的GB28181框架,包含GB28181推流端、GB2818平台、GB28181播放器。

一、GB28181平台

        平台包括SIP信令服务器,流媒体服务器。其中流媒体服务器使用ZLMediaKit,SIP信令服务器使用开源项目BXC_SipServer,地址:https://github.com/beixiaocai/BXC_SipServer

        回忆一下GB28181信令服务器的基本工作流程:

1、IPC向GB28181平台注册--REGISTER
2、GB28181平台向IPC发起会话请求--INVITE
3、IPC向流媒体服务器发送音视频--RTP

        BXC_SipServer是基于exosip2-5.1.2实现的,关于exosip,参考我另外一篇文章:SIP系列六:SIP实战(基于eXosip实现UAC、UAS)

        BXC_SipServer项目源代码存在几个问题:

        1、dump_request和dump_response函数应该使用osip_free(s)释放osip_message_to_str分配的内存。API定义如下:

/*** Get a string representation of a osip_message_t element.* NOTE: You need to release the sip buffer returned by this API when you* are done with the buffer. ie: osip_free(dest)* @param sip The element to work on.* @param dest new allocated buffer returned.* @param message_length The length of the returned buffer.*/
int osip_message_to_str(osip_message_t *sip, char **dest, size_t *message_length);

        2、eXosip_call_send_initial_invite需要使用eXosip_lock加锁,调用完毕之后解锁eXosip_unlock

        编译运行:

1. 下载代码git clone https://gitee.com/Vanishi/BXC_SipServer.git
2. 编译修改main.cpp中IP为物理机IPcd BXC_SipServermkdir buildcd buildcmake ..make 
3. 运行./BXC_SipServer

        此外,需要把流媒体服务器运行起来,参考上一篇文章:GB28181系列三:GB28181流媒体服务器ZLMediaKit

cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &

二、IPC向BXC_SipServer注册

        运行BXC_SipServer之后就可以配置IPC摄像头向BXC_SipServer注册并向ZLMediaKit推流,在没有摄像头的情况下,可以使用BXC_SipServer作者的另外一个项目,模拟IPC,项目为BXC_gb28181Client,但这个项目是作者的一个收费项目,这里不便发不出来,购买连接:http://www.beixiaocai.com/code-detail/BXCgb28181Client

        作者主页可在BXC_SipServer项目的README.md中获取。

        修改BXC_gb28181Client中的IP为BXC_SipServer所在机器IP,并运行BXC_gb28181Client,在ZLMediaKit中查看推流的信息,如下图所示:

        app为rtp,stream = 71FB04CB,根据ZLMediaKit的播放规则,即可播放视频,例如rtsp可通过如下地址使用ffplay播放:

rtsp://ip:554/rtp/71FB04CB

三、GB28181播放器

        项目地址:https://github.com/beixiaocai/BXC_gb28181Player

        项目中用到了SDL、ffmpeg实现了一个简易播放器,接受来自ZLMediaKit的RTP数据;需要调用ZLMediaKit的HTTP API,向BXC_gb28181Player推送国标流(RTP + PS),这里不会演示,具体操作可参考项目说明。


http://www.ppmy.cn/ops/142581.html

相关文章

5G学习笔记之SNPN系列之ID和广播消息

目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN:Stand-alone Non-Public Network,独立的非公共网络,由NPN独立运营,不依赖与PLMN网络。 SNPN不支持的5GS特性: 与EPS交互 emergency services when the UE acce…

【C++】易混淆——多继承和多态,虚继承和虚函数用法示例

多继承不是多态 二者的区别如下: ①多继承 概念:指一个派生类可以同时继承多个基类的属性和方法。例如: class Base1 { public:void function1() {} };class Base2 { public:void function2() {} };class Derived : public Base1, public…

平衡二叉树

本节来学习判断一棵二叉树是否为平衡二叉树,并使用两种解决问题方法.第一种采用自顶向下的方式,效率不理想,第二种采用自下而上的方式,当发现不满足条件时终止.通过实例感受到程序设计思想对执行效率的重要影响. 问题描述: 给定一棵二叉树,判断该二叉树是否为平衡二叉树. 自顶…

VR虚拟展厅的实时互动是如何实现的?

VR虚拟展厅的实时互动是通过一系列技术和流程实现的,这些技术和流程共同确保了用户在虚拟环境中的互动体验能够及时响应和更新。 接下来,由专业从事VR虚拟展厅制作的圆桌3D云展厅平台为大家介绍一下实现VR虚拟展厅实时互动的几个关键要素: 高…

实验16 循环神经网络(3)

目录 1.数据处理 1.1.数据集下载 1.2.数据加载 1.2.1读取数据 1.2.2词表转换 1.2.3封装数据 2. 模型构建 2.1汇聚层算子 2.2模型汇总 3. 模型训练 3.1模型训练 3.2绘制准确率和损失函数图像 4. 模型评价 5. 模型预测 6. 基于Torch的单向LSTM 6.1模型修改-只返…

STUN服务器用于内网NAT的方案

在内网中部署 STUN 服务器的场景通常用于处理多层 NAT 或内网客户端之间的通信需求,尤其是在大企业或学校等复杂网络环境下。通过 STUN 服务器,可以帮助客户端设备检测和适配 NAT 转换规则,进而支持 WebRTC 或其他实时通信技术的正常运行。 …

深入探索 Flink DataStream API

Apache Flink 的 DataStream API 为处理无界数据流提供了强大而灵活的工具。以下将从五个模块详细介绍 DataStream API。 一、数据源模块 (一)数据读取方式 文件数据源: 支持多种文件格式:如文本文件(.txt&#xff0…

如何使用Nginx Proxy Manager实现反向代理与SSL支持高效管理网络服务

文章目录 前言1. 一键安装2. 本地访问3. Linux 安装cpolar4. 配置公网访问地址5. 公网远程访问6. 固定公网地址 前言 在网络管理和服务器运维中,反向代理是一个非常重要的技术。它不仅能够帮助你将内部的服务安全地暴露到外部环境,还能提供强大的负载均…