码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ubuntu18.04编译GB28181Server


    目录

    • 一、简绍
    • 二、项目依赖的第三方库
      • 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
    
    • 1
    # 进入目录源代码目录后
    mkdir build && cd build
    cmake ..
    make -j
    sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2 mxml

    项目地址:mxml
    Mini-XML是一个小型的XML解析库,你可以用来在你的应用程序中读取XML数据文件或字符串,而不需要大型的非标准库。

    2.2.1 编译mxml

    ./configure
    make -j
    sudo make install
    
    • 1
    • 2
    • 3

    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
    
    • 1
    • 2

    2.3.1 编译osip2

    ./configure
    make -j
    sudo make install
    
    • 1
    • 2
    • 3

    2.3.2 编译exosip2

    编译这个有报一个错,关于ssl的。如果报错了安装

    sudo apt install libssl1.0-dev
    
    • 1
    ./configure
    make -j
    sudo make install
    
    • 1
    • 2
    • 3

    2.4 ffmpeg

    ffmpeg我就不进行编译了,我直接使用apt install 下来的开发包

    sudo apt install libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libpostproc-dev libswscale-dev -y
    
    • 1

    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    若这样还是提示有库无法链接到的话,建议使用 “鼠标右键–>添加库–>外部库”,选择你要添加的库,Qt帮你把路径添加上来也是可以的。

    3.2 修改AppConfig.cpp

    提示:看注释

    #include "AppConfig.h"
    
    #if defined(WIN32)
    #include 
    #include 
    #include 
    #include 
    #else
    #include 
    #include 
    #include 
    //添加cstring
    #include 
    
    void Sleep(long mSeconds)
    {
        usleep(mSeconds * 1000);
    }
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3.3 修改GB28181Server.cpp

    从14行看

    #if defined(WIN32)
        #include 
        #include 
    #else
        #include 
        //添加 sys/socket.h 和 netinet/in.h
        #include 
        #include 
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注释掉下面这句,因为这句是作者修改了exosip的代码加的,我使用的是原生的,所以呢这句话我没用到

     //int udpSsocketFd = eXosip_event_getUdpSocket(eCtx, remoteIpAddr, &remotePort);
    
    • 1

    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.5 修改main.cpp

    这里有个大小写的问题

    #include "MainWindow.h"
    
    • 1

    四、小提示

    4.1 运行时找不到第三方库

    运行程序的时候出现类似以下错误:

    error while loading shared libraries: 
    libmxml.so.1: cannot open shared object file: No such file or directory
    
    • 1
    • 2

    如果你按照我的那个方式去安装第三方库,值就可以填 /usr/local/lib,如果你自定义了install 的目录(configure 指定了目录)的时候,需要自己修改一下。

    添加一个 LD_LIBRARY_PATH 值为 /usr/local/lib
    在这里插入图片描述
    添加完成后,接下来去检查一下,看下图,检查一下有灭有
    在这里插入图片描述

    4.2 中文乱码

    这个项目是在windows上开发的文本格式应该是GBK,打开项目也正常,运行程序也正常,OK
    在这里插入图片描述

    要看一下GB28181的有关参考吗?看看?
    有关GB28181的参考

  • 相关阅读:
    【动手学深度学习】CNN浅记
    解决Windows内存溢出/占满死机问题-PoolMon工具
    人大女王金融硕士项目——比努力更重要的,是要学会做对的选择
    【每日渗透笔记】后台弱口令+未授权尝试
    ASF HyP3 Python接口使用教程
    k8s架构浅析
    Numpy+PyTorch基础《python深度学习----基于pytorch》
    备战9月9日C/C++青少年等级考试(1~8级)
    第10章 MyBatisPlus实现分页检索
    Log4j2
  • 原文地址:https://blog.csdn.net/qq_38832450/article/details/127890925
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号