我的音视频/流媒体开源项目(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),这里不会演示,具体操作可参考项目说明。