ubuntu18.04编译GB28181Server

8 篇文章 1 订阅

一、简绍

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的参考

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值