一、前期准备

1.1、升级boost库,我升级的版本1.65.0,解决后面编译找不到宏定义错误,boost库需要手动编译,网上一大坨。

1.2、安装按各种依赖库,通过yum安装即可,libevent、libevent-devel、gettext-devel、libsigc++20、libsigc++20-devel、glibmm24-devel、glibmm24、libvpx-devel、libvpx、libvpx-utils。如果已经安装则忽略

1.3、gstreamer,kurento依赖gstreamer,所以需要手动编译这个库,具体参考如下篇章

二、gstreamer编译

2.1、编译gobject-introspection

gstreamer依赖了gobject-introspection,centos默认安装不支持PyUnicodeUCS4_DecodeUTF8,需要手动编译

=================================错误信息=======================================make[4]: Entering directory `/root/kurento/deps/gstreamer/gst'GEN      Gst-1.0.gir
Traceback (most recent call last):File "/usr/bin/g-ir-scanner", line 53, in <module>from giscanner.scannermain import scanner_mainFile "/usr/lib64/gobject-introspection/giscanner/scannermain.py", line 35, in <module>from giscanner.dumper import compile_introspection_binaryFile "/usr/lib64/gobject-introspection/giscanner/dumper.py", line 28, in <module>from .gdumpparser import IntrospectionBinaryFile "/usr/lib64/gobject-introspection/giscanner/gdumpparser.py", line 31, in <module>from .transformer import TransformerExceptionFile "/usr/lib64/gobject-introspection/giscanner/transformer.py", line 28, in <module>from .girparser import GIRParserFile "/usr/lib64/gobject-introspection/giscanner/girparser.py", line 26, in <module>from .girwriter import COMPATIBLE_GIR_VERSIONFile "/usr/lib64/gobject-introspection/giscanner/girwriter.py", line 25, in <module>from .xmlwriter import XMLWriterFile "/usr/lib64/gobject-introspection/giscanner/xmlwriter.py", line 36, in <module>from giscanner._giscanner import collect_attributes
ImportError: /usr/lib64/gobject-introspection/giscanner/_giscanner.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8
make[4]: *** [Gst-1.0.gir] Error 1
make[4]: Leaving directory `/root/kurento/deps/gstreamer/gst'====================================解决方案====================================
git clone https://gitlab.gnome.org/GNOME/gobject-introspection.git
git checkout 1.56.1 -b  1.56.1
./configure --with-python=/usr/local/python2.7.15/bin --prefix=/usr/local/gobject-introspection
make && make install

2、gstreamer组件

比较多,但是还是比较好编译的,将下面的组件都编译一下就可以,必须先编译gstreamer。

2.1、声明环境变量

需要指定gobject-introspection路径,因此需要声明

export PKG_CONFIG_PATH=/usr/local/gobject-introspection/lib/pkgconfig/:$PKG_CONFIG_PATH

2.2、编译gstreamer

我这里使用的版本1.14.0,因为kurento最低要求是1.14.0

gstreamer、gst-plugins-base、gst-plugins-bad、 gst-plugins-good 、gst-plugins-ugly、gst-rtsp-server、gst-editing-services、gst-libav
 我是按照这个顺序编译的,当然可以只编译出gstreamer,后面缺少什么依赖在回过头编译也是可以的,注意必须要声明export。

三、编译

我编译的kurento是当前最新稳定版本,6.16.0,编译顺序,kurento-module-creator -> kms-cmake-utils -> kms-jsonrpc -> kms-core -> kurento-media-server

3.1、编译kurento-module-creator

这个是一个java工程,用到了maven,编译结束后执行cp命令,拷贝到相应目录中,注意,我这里的cmake是2.8版本,根据各自环境进行变更

[root@63d5c0084f5b kurento-module-creator]# ls
debian  LICENSE  NOTICE  pom.xml  README.md  scripts  src
[root@63d5c0084f5b kurento-module-creator]# mvn clean install
-bash: mvn: command not found
[root@63d5c0084f5b kurento-module-creator]# . ~/.bash_profile
[root@63d5c0084f5b kurento-module-creator]# mvn clean install
[INFO] Scanning for projects...
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-file/1.0/wagon-file-1.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-file/1.0/wagon-file-1.0.pom (1.4 kB at 891 B/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-providers/1.0/wagon-providers-1.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-providers/1.0/wagon-providers-1.0.pom (2.1 kB at 5.0 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon/1.0/wagon-1.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon/1.0/wagon-1.0.pom (9.8 kB at 23 kB/s)
........
........
........
==========================================编译结束后===================================
cp ./target/kurento-module-creator-jar-with-dependencies.jar /usr/bin
cp ./scripts/kurento-module-creator /usr/bin
cp ./target/classes/FindKurentoModuleCreator.cmake /usr/local/share/cmake-2.8/Modules/

3.2、kms-cmake-utils编译

编译没有遇到错误,如下是执行的命令

git clone https://github.com/Kurento/kms-cmake-utils.git
git checkout 6.16.0 -b 6.16.0
mkdir build
cd build/
cmake ..
make
make install

3.3、kms-jsonrpc

3.3.1、jsoncpp

kms-jsonrpc依赖了jsoncpp,这里jsoncpp是Kurento仓库内的

git clone https://github.com/Kurento/jsoncpp.git
git checkout 1.6.4 -b 1.6.4修改CMakeLists.txt,增加-fPIC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fPIC -Wall -Wextra -pedantic")编译并安装
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/usr/local/gobject-introspection/lib/pkgconfig/:$PKG_CONFIG_PATH
cmake -DCMAKE_MODULE_PATH=/usr/local/share/cmake-2.8/Modules/ ..
make && make install

3.4、kms-core

kms-core是核心模块,编译出这个就成功了一大半了

3.4.1、更新组件

yum install http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm
yum update --nogpgcheck automake

由于centos默认的gcc版本比较低,不支持c++14,不想自己升级gcc了,所以直接修改cmake文件,将gnu++14修改成gnu++11

修改cmake文件, 将gnu++14 -->  gnu++11/usr/local/share/cmake-2.8/Modules/CommonBuildFlags.cmake
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -pthread ${DPKG_CXXFLAGS}")

由于kurento里面gstreamer版本是1.5,但是在centos编译出来的gstreamer,无论是什么版本都是以1.0结尾,所以我们需要将CMakeList.txt中   gstreamer-1.5 ---> 全部修改成  gstreamer-1.0。后面编译过程中如果出现了1.5就改成1.0,肯定没有用问题。

编译kms-core解决gstreamer-1.5 not found/root/kurento/kms-core/CMakeLists.txt

3.4.2、进行编译

当编译的时候,缺少什么第三方依赖,就安装就好,这里主要是gstreamer的依赖。将gstreamer-1.5  修改成 gstream-1.0

git clone https://github.com/Kurento/kms-core.git
git checkout 6.16.0 -b 6.16.0mkdir build && cd build
cmake -DCMAKE_MODULE_PATH=/usr/local/share/cmake-2.8/Modules/ -DCMAKE_VERBOSE_MAKEFILE=ON \
-DVPX_INCLUDE_DIRS=/root/kurento/kms-core/src/gst-plugins/vp8parse \
-DVPX_LIBRARIES=/root/kurento/kms-core/src/gst-plugins/vp8parse ..
make && make install

如果编译错误,应该就是缺少第三方库,缺什么就编译什么,肯定没有问题的。

3.5、kurento-media-server编译

3.5.1、编译websocket

kurento-media-server依赖了websocket,所以需要编译一下,我这里边使用最新稳定版本0.8.2

git clone https://github.com/zaphoyd/websocketpp.git
git checkout 0.8.2
进行编译安装
mkdir build && cd buildcmake -DCMAKE_INSTALL_PREFIX=/usr ..
make && make install

如果websocket使用的0.7.0,则不需要修改CMakeLists.txt

修改kurento-media-server 文件
vi ../server/transport/websocket/CMakeLists.txt
将版本0.7.0 修改成0.8.2

3.5.2、编译kurento-media-server

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/usr/local/gobject-introspection/lib/pkgconfig/:$PKG_CONFIG_PATHgit clone https://github.com/worker24h/kurento-media-server.git
git checkout 6.16.0 -b 6.16.0
mkdir builid && cd build
cmake -DCMAKE_MODULE_PATH=/usr/local/share/cmake-2.8/Modules/ \
-DCMAKE_C_FLAGS="-I /usr/include/gstreamer-1.0/ -I /usr/include/glib-2.0/ \
-I /usr/lib64/glib-2.0/include/" -DCMAKE_CXX_FLAGS="-I /usr/include/gstreamer-1.0/ \
-I /usr/include/glib-2.0/ -I /usr/lib64/glib-2.0/include/"  ..
make && make install

在编译到最后,出现一个连接错误,这个是缺少符号表,应该是缺少某个库,经过排查发现没有连接gstpbutils,如果应该按照前面gstreamer所有组件都安装了,那么系统中肯定会有,最简单的方式,就是手动编译,把库添加进去即可。

[ 60%] Building CXX object server/CMakeFiles/kurento-media-server.dir/ResourceManager.cpp.o
[ 66%] Building CXX object server/CMakeFiles/kurento-media-server.dir/RequestCache.cpp.o
[ 73%] Building CXX object server/CMakeFiles/kurento-media-server.dir/CacheEntry.cpp.o
[ 80%] Building CXX object server/CMakeFiles/kurento-media-server.dir/logging.cpp.o
[ 86%] Building CXX object server/CMakeFiles/kurento-media-server.dir/modules.cpp.o
[ 93%] Building CXX object server/CMakeFiles/kurento-media-server.dir/loadConfig.cpp.o
[100%] Building CXX object server/CMakeFiles/kurento-media-server.dir/death_handler.cpp.o
Linking CXX executable kurento-media-server
/usr/local/lib64/libkmscoreimpl.so: undefined reference to `gst_video_event_is_force_key_unit'
/usr/local/lib64/libkmsgstcommons.so: undefined reference to `gst_encoding_video_profile_new'
/usr/local/lib64/libkmscoreimpl.so: undefined reference to `gst_video_event_new_upstream_force_key_unit'
/usr/local/lib64/libkmsgstcommons.so: undefined reference to `gst_encoding_container_profile_add_profile'
/usr/local/lib64/libkmsgstcommons.so: undefined reference to `gst_encoding_audio_profile_new'
/usr/local/lib64/libkmsgstcommons.so: undefined reference to `gst_encoding_container_profile_new'
collect2: error: ld returned 1 exit status
make[2]: *** [server/kurento-media-server] Error 1
make[1]: *** [server/CMakeFiles/kurento-media-server.dir/all] Error 2
make: *** [all] Error 2
[root@63d5c0084f5b build]#
==================解决方案=====================
这个错误显然是没有找到符号表,通过分析编译的时候没有找到gstpbutils库,因为这是最后一步,所以我们可以手动编译,添加上依赖库-lgstpbutils-1.0命令如下:cd /root/kurento/kurento-media-server/build/server/usr/bin/c++   -I /usr/include/gstreamer-1.0/ -I /usr/include/glib-2.0/ -I /usr/lib64/glib-2.0/include/ \
-std=gnu++11 -Wall -pthread  -Wno-old-style-cast -Wno-error=deprecated -DGST_DISABLE_DEPRECATED -DHAVE_CONFIG_H   \
-pie CMakeFiles/kurento-media-server.dir/main.cpp.o \
CMakeFiles/kurento-media-server.dir/version.cpp.o CMakeFiles/kurento-media-server.dir/ServerMethods.cpp.o \
CMakeFiles/kurento-media-server.dir/ResourceManager.cpp.o CMakeFiles/kurento-media-server.dir/RequestCache.cpp.o \
CMakeFiles/kurento-media-server.dir/CacheEntry.cpp.o CMakeFiles/kurento-media-server.dir/logging.cpp.o \
CMakeFiles/kurento-media-server.dir/modules.cpp.o CMakeFiles/kurento-media-server.dir/loadConfig.cpp.o \
CMakeFiles/kurento-media-server.dir/death_handler.cpp.o  -o kurento-media-server \
-rdynamic -lboost_filesystem -lboost_regex -lboost_system -lboost_thread \
-lboost_program_options -lboost_unit_test_framework -lboost_log transport/libtransport.a \
-ldl transport/websocket/libwebsocketTransport.a -lssl -lcrypto -lgstreamer-1.0 -lgobject-2.0 \
-lglib-2.0 /usr/local/lib64/libkmscoreimpl.so /usr/local/lib64/libkmsgstcommons.so \
-lgstsdp-1.0 /usr/local/lib64/libjsonrpc.so -lkmsjsoncpp -lsigc-2.0 -lgstpbutils-1.0 \
-lglibmm-2.4 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 /usr/local/lib64/libkmscoreimpl.so \
/usr/local/lib64/libkmsgstcommons.so -lgstsdp-1.0 /usr/local/lib64/libjsonrpc.so -lkmsjsoncpp \
-lsigc-2.0 -lglibmm-2.4 -lboost_filesystem -lboost_regex -lboost_system -lboost_thread \
-Wl,-rpath,/usr/local/lib64

四、总结

kurento的编译,虽然要编译的组件比较多,但是整体来说不是很难,有一些坑已经填好,避免大家再走弯路。

在centos7.6编译kurento相关推荐

  1. php-7.2.13的安装,Centos7.2编译安装php-7.0.13

    Centos7.2编译安装php-7.0.13 1- 安装依赖 yum install wget autoconf libjpeg libjpeg-devel libpng libpng-devel ...

  2. centos7下编译安装qemu5.0+spice-server最新版

    本人基于centos7环境编译安装qemu5.0+spice-server最新版的过程记录,希望对读者有些帮助: #安装gcc 7 sudo yum install centos-release-sc ...

  3. CentOS7下编译安装libmodbus库

    CentOS7下编译安装libmodbus库 下载libdmodbus源代码 编译安装lidmodbus 测试 参考资料 下载libdmodbus源代码 libmodbus官网下载页面如下图所示: 可 ...

  4. 在win10和centos7上编译synergy

    在win10和centos7上编译synergy Synergy功能简介 同一局域网中多台机器共享一套键盘鼠标,支持Windows.Linux.MAC设备,鼠标键盘物理连接的机器做服务器端,其他机器做 ...

  5. 如何在CentOS7上编译WELD

    如何在CentOS7上编译WELD 准备工作 安装RUST 安装LLVM 编译WELD 准备工作 在docker上用centos7镜像运行容器: docker pull 获取镜像: docker pu ...

  6. CentOS7上编译多版本PHP并同时运行及systemd设置

    为什么80%的码农都做不了架构师?>>>    CentOS7最大改变是systemd代替过去的systemV服务,于是配置服务的方式改变了,用systemctl替代过去的servi ...

  7. 在centos7上编译安装nginx

    题前,先放一个有图有真相的博客链接:https://www.cnblogs.com/zhang-shijie/p/5294162.html 虽然别人说的很详细,但还是记录一下 1.VMWare Wor ...

  8. centos7二进制安装php,Centos7下编译安装配置Nginx+PHP+MySql环境

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

  9. 在CentOS7上编译GreenPlum5.3.0

    Step.1 为yum添加国内镜像源 下载阿里镜像源 $ cd /etc/yum.repos.d $ sudo wget -nc http://mirrors.aliyun.com/repo/Cent ...

最新文章

  1. python编程语言是什么-编程语言分类及python所属类型
  2. phpstrom连接服务器上传文件
  3. 第二章 单变量线性回归-机器学习老师板书-斯坦福吴恩达教授
  4. spark 性能优化
  5. sql 如何设置行级锁_SQL Server中的行级安全性简介
  6. 在MVC3中怎么实现分类列表?
  7. JavaScript ECMAScript版本介绍
  8. 【避坑指南】GD32 KEIL中SW Device没有识别芯片,jlink下载不进去的问题
  9. Windows10 隐藏更新小工具
  10. 小米8 解BL锁教程 申请BootLoader解锁教程
  11. Google搜索命令语法
  12. 通俗理解路由器和交换机的区别?
  13. ThinkPad X230 后没有了Break 以及 Pause键,网工们囧了?
  14. Chromium 文件下载
  15. 未找到任何音频输出设备的解决方法
  16. python表达式_Python的表达式写法
  17. golang个人整理知识点
  18. elasticsearch定时删除过期索引index
  19. matlab 4轴机器人建模,SCARA机器人运动学分析及MATLAB建模仿真.pdf
  20. SQL-包含中文字、英文、数字字符

热门文章

  1. IDEA报错:Error:The supplied javaHome seems to be invalid. I cannot find the java executable. Tried loc
  2. texworks编码问题
  3. 英文名字中的first name与last name
  4. ios获取网络请求失败相关数据
  5. *为什么电脑会死机定格的问题大全*【免费xp系统下载】
  6. 使用python模拟登录
  7. java版史莱姆区块_我的世界史莱姆傀儡
  8. 高通平台Camera调试移植入门
  9. 如何改图片像素大小?照片怎么改大小?
  10. 非涉密计算机网检平台,非涉密计算机检查记录表-保密处.pdf