在centos7.6编译kurento
一、前期准备
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相关推荐
- 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 ...
- centos7下编译安装qemu5.0+spice-server最新版
本人基于centos7环境编译安装qemu5.0+spice-server最新版的过程记录,希望对读者有些帮助: #安装gcc 7 sudo yum install centos-release-sc ...
- CentOS7下编译安装libmodbus库
CentOS7下编译安装libmodbus库 下载libdmodbus源代码 编译安装lidmodbus 测试 参考资料 下载libdmodbus源代码 libmodbus官网下载页面如下图所示: 可 ...
- 在win10和centos7上编译synergy
在win10和centos7上编译synergy Synergy功能简介 同一局域网中多台机器共享一套键盘鼠标,支持Windows.Linux.MAC设备,鼠标键盘物理连接的机器做服务器端,其他机器做 ...
- 如何在CentOS7上编译WELD
如何在CentOS7上编译WELD 准备工作 安装RUST 安装LLVM 编译WELD 准备工作 在docker上用centos7镜像运行容器: docker pull 获取镜像: docker pu ...
- CentOS7上编译多版本PHP并同时运行及systemd设置
为什么80%的码农都做不了架构师?>>> CentOS7最大改变是systemd代替过去的systemV服务,于是配置服务的方式改变了,用systemctl替代过去的servi ...
- 在centos7上编译安装nginx
题前,先放一个有图有真相的博客链接:https://www.cnblogs.com/zhang-shijie/p/5294162.html 虽然别人说的很详细,但还是记录一下 1.VMWare Wor ...
- centos7二进制安装php,Centos7下编译安装配置Nginx+PHP+MySql环境
序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...
- 在CentOS7上编译GreenPlum5.3.0
Step.1 为yum添加国内镜像源 下载阿里镜像源 $ cd /etc/yum.repos.d $ sudo wget -nc http://mirrors.aliyun.com/repo/Cent ...
最新文章
- python编程语言是什么-编程语言分类及python所属类型
- phpstrom连接服务器上传文件
- 第二章 单变量线性回归-机器学习老师板书-斯坦福吴恩达教授
- spark 性能优化
- sql 如何设置行级锁_SQL Server中的行级安全性简介
- 在MVC3中怎么实现分类列表?
- JavaScript ECMAScript版本介绍
- 【避坑指南】GD32 KEIL中SW Device没有识别芯片,jlink下载不进去的问题
- Windows10 隐藏更新小工具
- 小米8 解BL锁教程 申请BootLoader解锁教程
- Google搜索命令语法
- 通俗理解路由器和交换机的区别?
- ThinkPad X230 后没有了Break 以及 Pause键,网工们囧了?
- Chromium 文件下载
- 未找到任何音频输出设备的解决方法
- python表达式_Python的表达式写法
- golang个人整理知识点
- elasticsearch定时删除过期索引index
- matlab 4轴机器人建模,SCARA机器人运动学分析及MATLAB建模仿真.pdf
- SQL-包含中文字、英文、数字字符
热门文章
- IDEA报错:Error:The supplied javaHome seems to be invalid. I cannot find the java executable. Tried loc
- texworks编码问题
- 英文名字中的first name与last name
- ios获取网络请求失败相关数据
- *为什么电脑会死机定格的问题大全*【免费xp系统下载】
- 使用python模拟登录
- java版史莱姆区块_我的世界史莱姆傀儡
- 高通平台Camera调试移植入门
- 如何改图片像素大小?照片怎么改大小?
- 非涉密计算机网检平台,非涉密计算机检查记录表-保密处.pdf