ubuntu 18.04下编译最新版本的KMS
KMS:kurento媒体服务,即 kurento media server
很庞大的一个WEBRTC项目,GIT库主项目:https://github.com/Kurento
基础实现,修改了gst-plugin-bad,打开了openh264的插件(依赖于openh264)
然后在其上实现了kms-core, kms-elements, kms-filters,然后实现了相应的服务KMS
官方版本一直只支持ubuntu 16.04,相应docker也是16.04
最新ubuntu编译时遇到了很多问题,相应修改/调整顺序如下:
编译命令:
dpkg-buildpackage -rfakeroot 编译链接过程:
1.编译kurento-module-creator
需要安装debhelper default-jdk maven-debian-helper junit4 libcommons-cli-java libfreemarker-java libgoogle-gson-java libhamcrest-java libmaven-assembly-plugin-java libslf4j-java libwagon-java
需要修改debian/install文件,插入一行
target/classes/FindKurentoModuleCreator.cmake /usr/share/cmake-3.10/Modules/
ubuntu 18.04 的CMAKE版本是3.10
编译完成后可以删除
2.安装kurento-module-creator
需要安装libcommons-cli-java libfreemarker-java libgoogle-gson-java libslf4j-java 3.编译kms-cmake-utils
4.安装kms-cmake-utils
5.编译kmsjsoncpp
需要取kurento下的jsoncpp库
会在打包时signfile kmsjsoncpp_1.6.2.dsc失败,使用dpkg-buildpackage -uc -us避免此错误
6.安装kmsjsoncpp
需要同时安装kmsjsoncpp-dev包
7.编译kms-jsonrpc
需要安装libboost-dev libboost-test-dev
其中的kmsjsoncpp-dev,由上一个流程编译生成
8.安装kms-jsonrpc
需要同时安装kms-jsonrpc-dev包
9.编译kms-core
编译依赖:libboost-filesystem-dev libboost-regex-dev libboost-system-dev libglibmm-2.4-dev libsigc++-2.0-dev libvpx-dev
修改debian/control中,所有gstreamer-1.5相关字符全部修改为1.0
a.CMakeLists.txt中gstreamer-1.5相关字符全部修改为1.0
generic_find(LIBNAME gstreamer-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-base-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-video-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-check-1.0 VERSION ${GST_REQUIRED})
generic_find(LIBNAME gstreamer-sdp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-pbutils-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-rtp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
b.一堆CMakeLists.txt中的1.5修改为1.0
c.修复编译问题GF::GF():
BOOST_GLOBAL_FIXTURE (GF)后需要加;号
调用了std::cerr的,需要包含#include <iostream>
d. 临时注释掉CMakelists.txt中的add_subdirectory(tests)
e. 修改debian下kms-core.install,将1.5修改成1.0
10.安装kms-core/kms-core-dev
11.编译usrsctp
usrsctplib下的CMakeLists.txt中的
include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/netinet ${PROJECT_SOURCE_DIR}/netinet6)
修改为:
include_directories(${PROJECT_SOURCE_DIR}/usrsctplib ${PROJECT_SOURCE_DIR}/usrsctplib/netinet ${PROJECT_SOURCE_DIR}/usrsctplib/netinet6)
error: ‘%s’ directive output truncated writing 73 bytes into a region of size 58 [-Werror=format-truncation=]
snprintf(msg, sizeof(msg), "OOTB, %s:%d at %s", __FILE__, __LINE__, __func__);
的修复办法,在usrsctplib的CMakeLists.txt中插入
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -D__FILENAME__='\"$(subst ${CMAKE_SOURCE_DIR}/usrsctplib/netinet/,,$(abspath $<))\"'")
在usrsctplib的CMakeLists.txt中插入
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
解决openwebrtc-gst-plugins报告usrsctp的fPIC编译问题
同时修改所有sctp_input.c/sctp_output.c/sctp_pcb.c中的__FILE__为__FILENAME__
删除programs下的datachan_serv.c,datachan.h,同时需要删除此目录下CMakeLists.txt中编译datachan_serv.c处
修改libusrsctp.install,将其中的usr/lib/*/lib*.so.*修改为usr/lib/*.so.*
修改libusrsctp-dev.install,将其中的usr/lib/*/*.so修改为usr/lib/*.a
会在打包时signfile时失败,使用dpkg-buildpackage -uc -us避免此错误 12.安装usrsctp
13.编译openwebrtc-gst-plugins
修改debian/control,将1.5修改为1.0;修改debain/openwebrtc-gst-plugins.install,将1.5修改为1.0;修改debain/openwebrtc-gst-plugins-dev.install,将1.5修改为1.0
修改debian/openwebrtc-gst-plugins-dev.install,将其中的so修改为a,1.5修改为1.0
修改debian/rules,在dh_auto_configure --上插入一行NOCONFIGURE=1 ./autogen.sh(注意对齐)
修改debian/rules,在之前插入三行
export DEB_CFLAGS_MAINT_APPEND = -fPIC
export DEB_CXXFLAGS_MAINT_APPEND = -fPIC
export DEB_LDFLAGS_MAINT_APPEND = -fPIC
修改configure.ac,将其中的1.5修改为1.0,将-lusrsctp修改为-lusrsctp -lpthread
修改gstreamer-sctp-1.5.pc.in文件名为gstreamer-sctp-1.0.pc.in
修改gstreamer-sctp-1.5-uninstalled.pc.in文件名为gstreamer-sctp-1.0-uninstalled.pc.in
修改gst-libs/gst/sctp下的Makefile.am,将其中的1_5修改为1_0
修改ext/gst/sctp下的Makefile.am,将其中的1.5修改为1.0
修改gst/videorepair,将其中的1.5修改为1.0
修改Makefile.am,将其中的1.5修改为1.0
修改gstreamer-sctp-1.0.pc.in,将其中的1.5修改为1.0
会在打包时signfile时失败,使用dpkg-buildpackage -uc -us避免此错误 14.安装openwebrtc-gst-plugins 15.编译openh264
需要编译Kurento提供的openh264,github/gitlib上是openh264-1
16.安装openh264 17.编译openh264-gst-plugins-bad-1.0
编译依赖:cdbs flite-dev gobject-introspection libasound2-dev libcdaudio-dev libdc1394-22-dev libgudev-1.0-dev libusb-1.0-0-dev libbluetooth-dev libsbc-dev gstreamer1.0-doc gstreamer1.0-plugins-base-doc gtk-doc-tools ladspa-sdk libass-dev libbs2b-dev libbz2-dev libchromaprint-dev libcurl4-gnutls-dev libdca-dev libde265-dev libdvdnav-dev libexempi-dev libexif-dev libfaad-dev libfluidsynth-dev libgirepository1.0-dev libgme-dev libgsm1-dev libiptcdata0-dev libkate-dev liblilv-dev libmjpegtools-dev libmms-dev libmodplug-dev libmpcdec-dev libofa0-dev libopenal-dev libopencv-dev libopenexr-dev libopenjp2-7-dev libopus-dev librsvg2-dev librtmp-dev libsndfile1-dev libsoundtouch-dev libspandsp-dev libsrtp0-dev libvo-aacenc-dev libvo-amrwbenc-dev libwebp-dev libwebrtc-audio-processing-dev libwildmidi-dev libx265-dev libxvidcore-dev libzbar-dev libzvbi-dev libpcap-dev libvulkan-dev libgstreamer-plugins-good1.0-dev libopenmpt-dev libsrtp2-dev
需要从ubuntu 18.04版本对应的取gst-plugins-bad1.0_1.14.1.orig.tar.xz,gst-plugins-bad1.0_1.14.1-1ubuntu1_ubuntu18.04.1.debian.tar.xz
从kurentu中的gst-plugins-bad库,取得debain目录下的openh264-gst-plugins-bad-1.0.install/
修改debain/build-deps.in,其后添加依赖openh264, libpcap-dev
修改debian/control.in,其后添加一段
Package: openh264-gst-plugins-bad-@GST_ABI@
Architecture: any
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
Depends: ${misc:Depends},
${shlibs:Depends},
gstreamer@GST_ABI@-plugins-base,
openh264,
libgstreamer-plugins-bad@GST_DEB_ABI@ (= ${binary:Version}),
Description: GStreamer plugins from openh264 18.安装openh264-gst-plugins-bad-1.0 19.编译kms-elements
编译依赖:
修改debian/control中,所有gstreamer-1.5相关字符全部修改为1.0
a.CMakeLists.txt中gstreamer-1.5相关字符全部修改为1.0
generic_find(LIBNAME gstreamer-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-base-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-video-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-app-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-check-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-sdp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-rtp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-pbutils-1.0 VERSION ${GST_REQUIRED} REQUIRED)
generic_find(LIBNAME gstreamer-sctp-1.0 REQUIRED)
b.搜索名下一堆的CMakeLists.txt中,将其中的1.5改成1.0
c.修复编译问题GF::GF():
BOOST_GLOBAL_FIXTURE (GF)后需要加;号
d.临时注释掉tests目录的编译,在CMakeLists.txt中修改
# add_subdirectory(tests) 20.安装kms-elements 21.编译kms-filters
编译依赖:libopencv-dev
修改CMakeLists.txt中,所有gstreamer-1.5相关字符全部修改为1.0,同时添加两行:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_OPENCV_IMGCODECS")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENCV_IMGCODECS")
搜索名下一堆的CMakeLists.txt中,将其中的1.5改成1.0
classifier.cpp文件中Mat frame (img);修改为Mat frame = cvarrToMat(img);
临时注释掉add_subdirectory(tests)这一行
修改debian/kms-filters.install,将其中的1.5改成1.0 22.安装kms-filters 23.编译kurento-media-server
编译依赖:libopencv-dev kms-filters-dev libboost-log-dev libboost-program-options-dev libboost-thread-dev libssl1.0-dev
修改CMakeLists.txt中,所有gstreamer-1.5相关字符全部修改为1.0
调用了std::cout的,需要包含#include <iostream>
临时注释掉tests目录的编译,在CMakeLists.txt中修改
# add_subdirectory(tests) 24.资料信息:
If tests fail, packages are not generated. To skip tests, edit the file debian/rules and change -DGENERATE_TESTS=TRUE to -DGENERATE_TESTS=FALSE -DDISABLE_TESTS=TRUE.
测试失败有更简便的修改办法了
ubuntu 18.04下编译最新版本的KMS的更多相关文章
- Ubuntu 18.04 下 emscripten SDK 的安装
Ubuntu 18.04 下 emscripten SDK 的安装http://kripken.github.io/emscripten-site/docs/getting_started/downl ...
- Ubuntu 18.04下安装Steam顶级在线游戏平台
Ubuntu 18.04下安装Steam顶级在线游戏平台 原创: 聆听世界的鱼 Linux公社 今天 Steam是由Valve公司开发的顶级在线游戏平台,是目前全球最大的综合性数字发行平台之一.它让你 ...
- Ubuntu 18.04 下配置 HAXM 加速 Android模拟器
Ubuntu 18.04 下配置 HAXM 加速 Android模拟器 最近在vmware环境下搭建ubuntu18.04开发环境,开始发现总是运行android模拟器在console提示加载如下错误 ...
- Ubuntu 16.04下编译安装Apache2.4和PHP7结合
Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...
- VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP
PJSIP是一个开源的SIP协议栈.它支持多种SIP的扩展功能,可说算是最目前流行的SIP协议栈之一了. 它实现了SIP.SDP.RTP.STUN.TURN和ICE.PJSIP作为基于SIP的一个多 ...
- 在Ubuntu 18.04 下安装mysql,没有初始密码,重设root密码
在Ubuntu 18.04 下安装mysql 不知道是由于mysql更新为新版还是.Ubuntu18.04中的特性,安装过程中没有设置密码的环节,在网络上找了半天,总算解决了!特此记录下来,以便以后查 ...
- ubuntu 18.04下Chromium设置为系统代理
前言 在ubuntu 18.04下挂上ss后firefox能直接上google了但是chromium上不去 会出现下面两种情况 # This site can't be reached xxxxxx ...
- Ubuntu 18.04 手动编译安装 ffmpeg
ffmpeg 是一个由提供对视频.音频和其他多媒体流文件进行处理功能的库和程序构成的自由软件项目,其常被用于适用于不同格式的音频和视频的录影.转换和流处理等场合.这里记录在 Ubuntu 18.04 ...
- Ubuntu 18.04 WMware 编译 AOSP android-7.1.2_r33 笔记
0 前言 问:都快2022年了,为什么还要编译 android 7.1.2 ? 答:某脱壳机特征修改或移植到其他机型(此处省略1000字...) 笔者在编译之前并没有加入专有二进制文件(后续加入了再补 ...
随机推荐
- Java基础知识-去重
java基础知识-去掉list集合中的重复元素: 思路: 首先新建一个容器resultList用来存放去重之后的元素 然后遍历sourceList集合中的元素 判断所遍历的元素是否已经存在于resul ...
- 基于oracle的sql(结构化查询语言)指令
创建表空间 create tablespace 表空间名 datafile '存储路径(c:\a\a.dbf)' size 200m autoextend on next 10m maxsize un ...
- 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp
题目描述 n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 输入 一行一个正整数 n . 输出 一行一个实数,表示期望剩下的人数, ...
- IE6,7,8支持css圆角
我们知道Webkit内核的浏览器支持-webkit-border-radius: 10px;属性(10px是圆角半径),可以直接解析出圆角;Firefox浏览器支持-moz-border-radius ...
- Codeforce 721C DP+DAG拓扑序
题意 在一个DAG上,从顶点1走到顶点n,路径上需要消费时间,求在限定时间内从1到n经过城市最多的一条路径 我的做法和题解差不多,不过最近可能看primer看多了,写得比较复杂和结构化 自己做了一些小 ...
- 2018牛客多校第一场 D.Two Graphs
题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...
- 【BZOJ 3669】 [Noi2014]魔法森林 LCT维护动态最小生成树
这道题看题意是在求一个二维最小瓶颈路,唯一可行方案就是枚举一维在这一维满足的条件下使另一维最小,那么我们就把第一维排序利用A小的边在A大的情况下仍成立来动态加边维护最小生成树. #include &l ...
- 如何写出规范的JavaScript代码
作为一名开发人员(WEB前端JavaScript开发),不规范的开发不仅使日后代码维护变的困难,同时也不利于团队的合作,通常还会带来代码安全以及执行效率上的问题.本人在开发工作中就曾与不按规范来开发的 ...
- bzoj1814 Ural 1519 Formula 1(插头dp模板题)
1814: Ural 1519 Formula 1 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 924 Solved: 351[Submit][Sta ...
- Codeforces Round #525 (Div. 2)A. Ehab and another construction problem
A. Ehab and another construction problem 题目链接:https://codeforc.es/contest/1088/problem/A 题意: 给出一个x,找 ...