GB28181系列四: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为物理机IP
cd BXC_SipServer
mkdir build
cd build
cmake ..
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),这里不会演示,具体操作可参考项目说明。
对于PS的封装和解封装可以使用开源库libmpeg2core,支持TS、PS封装和解封装,地址:https://github.com/BreakingY/libmpeg2core
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!