目录
- 一、简绍
- 二、项目依赖的第三方库
- 2.1 jrtplib
- 2.1.1 编译JRTPLIB
- 2.2 mxml
- 2.2.1 编译mxml
- 2.3 osip2/exosip2
- 2.3.1 编译osip2
- 2.3.2 编译exosip2
- 2.4 ffmpeg
- 2.5 提示
- 三、修改GB28181Server
- 3.1 修改GB28181Server.pri
- 3.2 修改AppConfig.cpp
- 3.3 修改GB28181Server.cpp
- 3.4 修改RtpReciever.cpp
- 3.5 修改main.cpp
- 四、小提示
- 4.1 运行时找不到第三方库
- 4.2 中文乱码
一、简绍
GB28181Server是基于Qt+ffmpeg+exosip+jrtplib 实现的GB28181服务器
项目地址:GB28181Server
项目的开发者(云天之巅-音视频技术中心)只适配了Windows系统,在Linux系统上并没有过多的进行适配。
二、项目依赖的第三方库
2.1 jrtplib
项目地址:JThread(可选)
项目地址:JRTPLIB
jrtplib是一个基于C++、面向对象的RTP封装库。
2.1.1 编译JRTPLIB
需要安装cmake,需要使用JThread需要先编译,编译方式跟JRTPLIB一样的(这个项目中没有用到jthread)
sudo apt install cmake
# 进入目录源代码目录后
mkdir build && cd build
cmake ..
make -j
sudo make install
2.2 mxml
项目地址:mxml
Mini-XML是一个小型的XML解析库,你可以用来在你的应用程序中读取XML数据文件或字符串,而不需要大型的非标准库。
2.2.1 编译mxml
./configure
make -j
sudo make install
2.3 osip2/exosip2
参考:ubuntu 安装osip2/eXosip2
Osip地址:http://ftp.gnu.org/gnu/osip/
Xsip2地址: http://download.savannah.nongnu.org/releases/exosip/
wget http://ftp.gnu.org/gnu/osip/libosip2-5.2.1.tar.gz
wget http://download.savannah.nongnu.org/releases/exosip/libexosip2-5.2.1.tar.gz
2.3.1 编译osip2
./configure
make -j
sudo make install
2.3.2 编译exosip2
编译这个有报一个错,关于ssl的。如果报错了安装
sudo apt install libssl1.0-dev
./configure
make -j
sudo make install
2.4 ffmpeg
ffmpeg我就不进行编译了,我直接使用apt install 下来的开发包
sudo apt install libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libpostproc-dev libswscale-dev -y
2.5 提示
该项目的作者有提供第三库的源码,你也可以直接使用作者提供的第三方库源码进行编译。
三、修改GB28181Server
3.1 修改GB28181Server.pri
在最后面追加
unix{
INCLUDEPATH += /usr/lcoal/include
unix:!macx: LIBS += -lmxml -ljrtp -losip2 -leXosip2 -losipparser2
unix:!macx: LIBS += -lavcodec -lavdevice -lavfilter -lavformat -lpostproc -lavutil -lswresample -lswscale
}
若这样还是提示有库无法链接到的话,建议使用 “鼠标右键–>添加库–>外部库”,选择你要添加的库,Qt帮你把路径添加上来也是可以的。
3.2 修改AppConfig.cpp
提示:看注释
#include "AppConfig.h"#if defined(WIN32)
#include <winsock2.h>
#include <windows.h>
#include <direct.h>
#include <io.h>
#else
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
//添加cstring
#include <cstring>void Sleep(long mSeconds)
{usleep(mSeconds * 1000);
}
#endif
3.3 修改GB28181Server.cpp
从14行看
#if defined(WIN32)#include <winsock2.h>#include <windows.h>
#else#include <pthread.h>//添加 sys/socket.h 和 netinet/in.h#include <sys/socket.h>#include <netinet/in.h>
#endif
注释掉下面这句,因为这句是作者修改了exosip的代码加的,我使用的是原生的,所以呢这句话我没用到
//int udpSsocketFd = eXosip_event_getUdpSocket(eCtx, remoteIpAddr, &remotePort);
3.4 修改RtpReciever.cpp
修改一下jrtplib的头文件路径
#include "jrtplib3/rtpsession.h"
#include "jrtplib3/rtppacket.h"
#include "jrtplib3/rtpudpv4transmitter.h"
#include "jrtplib3/rtpipv4address.h"
#include "jrtplib3/rtpsessionparams.h"
#include "jrtplib3/rtperrors.h"
#include "jrtplib3/rtpsourcedata.h"
#include "jrtplib3/rtpmemoryobject.h"
3.5 修改main.cpp
这里有个大小写的问题
#include "MainWindow.h"
四、小提示
4.1 运行时找不到第三方库
运行程序的时候出现类似以下错误:
error while loading shared libraries:
libmxml.so.1: cannot open shared object file: No such file or directory
如果你按照我的那个方式去安装第三方库,值就可以填 /usr/local/lib,如果你自定义了install 的目录(configure 指定了目录)的时候,需要自己修改一下。
添加一个 LD_LIBRARY_PATH 值为 /usr/local/lib
添加完成后,接下来去检查一下,看下图,检查一下有灭有
4.2 中文乱码
这个项目是在windows上开发的文本格式应该是GBK,打开项目也正常,运行程序也正常,OK
要看一下GB28181的有关参考吗?看看?
有关GB28181的参考