I. Deployment / Architecture Block Diagram
1. single system
2. cluster system
II. Resources Used
1. sip server
https://freeswitch.com/
2. sip user agent
http://www.mirrorservice.org/pub/gnu/osip/
http://mirror.ossplanet.net/nongnu/exosip/
3. ps remux h264/h265/aac/g711
http://ffmpeg.org/
4. rtp mediastream
http://research.edm.uhasselt.be/jori/page/CS/Jrtplib.html
III. GB28181 SIP Signaling Channel
1. Install Freeswitch
https://www.cnblogs.com/dong1/p/10412847.html
2. Build libexosip2-5.1.0.tar.gz + libosip2-5.1.0.tar.gz + jrtplib3.11
https://www.cnblogs.com/dong1/p/10258344.html
IV. GB28181 RTP Media Channel
1. FreeSWITCH has 3 media handling mode
https://www.cnblogs.com/dong1/p/10693993.html
2. rtp mediastream send/recv
https://www.cnblogs.com/dong1/p/10492229.html
3. ps(h264/h265/aac/g711...) mediastream mux/remux
ffmpeg-4.1/doc/examples/remuxing.c
ffmpeg-4.1/doc/examples/transcoding.c
https://www.cnblogs.com/dong1/p/9575291.html
4. 另外也有人整理了个ps封装库,经验证是靠谱的
https://github.com/shenshuyu/es2ps
提供个测试demo,填EsFrame , 回调函数出ps
void PsMuxerCb(char* psData, unsigned long dataLen, unsigned int lastPackMark){
}
int main(int argc, char **argv) { EsFrame *frame = (EsFrame *)malloc(sizeof(EsFrame)); MuxerHandle m = create_ps_muxer(PsMuxerCb, NULL); input_es_frame(m, frame); release_ps_muxer(m); free(frame); return 0; }
5. 轻便的gb28181协议中的rtp+ps格式视频流的封装和解析
这个模块是用go语言开发的,后续服务器程序应该会全面转向go(少折腾)
https://github.com/max-min/streams
V. GB28181 Syetem Cluster
FreeSwitch Proxy + RTPProxy Media server
https://www.cnblogs.com/dong1/p/10529462.html
国标28181系统的宗旨就是统一管理内网设备。
国标28181系统服务器的级联是为了更好的管理分散的内网设备。
关于服务器级联,后一级的服务器可以接管前一级服务器下的设备(一级一级往后上报设备目录树),终端控制台可以访问任何一级服务器下的任何设备。
VI. 总结
所有的模块都是用的开源代码,而且都整理了demo贴在上面了,就差把整个系统整合起来了。
后面就懒得弄了,公司已经做了一套,暂时够用,上面这套方案是为大规模系统上线作的准备。
也有可能公安部拿出来炒了一把又觉得这套国标是个鸡肋又不用了也说不定,以前也不是没有过,没有厂商遵守的标准也就没什么意义。
目前只有深圳的某个大佬一个人用起来了,也折腾了几个月才完全弄好,他要是愿意拿出来共享,我再传上来。
虽然都是开源代码,但是整合整个系统还是需要点基础,至少要熟悉sip通信并且能定制ffmpeg和freeswitch.