GB28181系列四:GB28181实战

        我的音视频/流媒体开源项目(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为物理机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

 

posted @   BreakingY  阅读(48)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示