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编译时遇到了很多问题,相应修改/调整顺序如下:

  1. 编译命令:
  2. dpkg-buildpackage -rfakeroot
  3.  
  4. 编译链接过程:
  5. 1.编译kurento-module-creator
  6. 需要安装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
  7. 需要修改debian/install文件,插入一行
  8. target/classes/FindKurentoModuleCreator.cmake /usr/share/cmake-3.10/Modules/
  9. ubuntu 18.04 CMAKE版本是3.10
  10. 编译完成后可以删除
  11. 2.安装kurento-module-creator
  12. 需要安装libcommons-cli-java libfreemarker-java libgoogle-gson-java libslf4j-java
  13.  
  14. 3.编译kms-cmake-utils
  15. 4.安装kms-cmake-utils
  16. 5.编译kmsjsoncpp
  17. 需要取kurento下的jsoncpp
  18. 会在打包时signfile kmsjsoncpp_1.6.2.dsc失败,使用dpkg-buildpackage -uc -us避免此错误
  19. 6.安装kmsjsoncpp
  20. 需要同时安装kmsjsoncpp-dev
  21. 7.编译kms-jsonrpc
  22. 需要安装libboost-dev libboost-test-dev
  23. 其中的kmsjsoncpp-dev,由上一个流程编译生成
  24. 8.安装kms-jsonrpc
  25. 需要同时安装kms-jsonrpc-dev
  26. 9.编译kms-core
  27. 编译依赖:libboost-filesystem-dev libboost-regex-dev libboost-system-dev libglibmm-2.4-dev libsigc++-2.0-dev libvpx-dev
  28. 修改debian/control中,所有gstreamer-1.5相关字符全部修改为1.0
  29. a.CMakeLists.txtgstreamer-1.5相关字符全部修改为1.0
  30. generic_find(LIBNAME gstreamer-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  31. generic_find(LIBNAME gstreamer-base-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  32. generic_find(LIBNAME gstreamer-video-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  33. generic_find(LIBNAME gstreamer-check-1.0 VERSION ${GST_REQUIRED})
  34. generic_find(LIBNAME gstreamer-sdp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  35. generic_find(LIBNAME gstreamer-pbutils-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  36. generic_find(LIBNAME gstreamer-rtp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  37. b.一堆CMakeLists.txt中的1.5修改为1.0
  38. c.修复编译问题GF::GF():
  39. BOOST_GLOBAL_FIXTURE (GF)后需要加;号
  40. 调用了std::cerr的,需要包含#include <iostream>
  41. d. 临时注释掉CMakelists.txt中的add_subdirectory(tests)
  42. e. 修改debiankms-core.install,将1.5修改成1.0
  43. 10.安装kms-core/kms-core-dev
  44. 11.编译usrsctp
  45. usrsctplib下的CMakeLists.txt中的
  46. include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/netinet ${PROJECT_SOURCE_DIR}/netinet6)
  47. 修改为:
  48. include_directories(${PROJECT_SOURCE_DIR}/usrsctplib ${PROJECT_SOURCE_DIR}/usrsctplib/netinet ${PROJECT_SOURCE_DIR}/usrsctplib/netinet6)
  49. error: ‘%s directive output truncated writing 73 bytes into a region of size 58 [-Werror=format-truncation=]
  50. snprintf(msg, sizeof(msg), "OOTB, %s:%d at %s", __FILE__, __LINE__, __func__);
  51. 的修复办法,在usrsctplibCMakeLists.txt中插入
  52. set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -D__FILENAME__='\"$(subst ${CMAKE_SOURCE_DIR}/usrsctplib/netinet/,,$(abspath $<))\"'")
  53. usrsctplibCMakeLists.txt中插入
  54. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  55. 解决openwebrtc-gst-plugins报告usrsctpfPIC编译问题
  56. 同时修改所有sctp_input.c/sctp_output.c/sctp_pcb.c中的__FILE____FILENAME__
  57. 删除programs下的datachan_serv.cdatachan.h,同时需要删除此目录下CMakeLists.txt中编译datachan_serv.c
  58. 修改libusrsctp.install,将其中的usr/lib/*/lib*.so.*修改为usr/lib/*.so.*
  59. 修改libusrsctp-dev.install,将其中的usr/lib/*/*.so修改为usr/lib/*.a
  60. 会在打包时signfile时失败,使用dpkg-buildpackage -uc -us避免此错误
  61.  
  62. 12.安装usrsctp
  63. 13.编译openwebrtc-gst-plugins
  64. 修改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
  65. 修改debian/openwebrtc-gst-plugins-dev.install,将其中的so修改为a,1.5修改为1.0
  66. 修改debian/rules,在dh_auto_configure --上插入一行NOCONFIGURE=1 ./autogen.sh(注意对齐)
  67. 修改debian/rules,在之前插入三行
  68. export DEB_CFLAGS_MAINT_APPEND = -fPIC
  69. export DEB_CXXFLAGS_MAINT_APPEND = -fPIC
  70. export DEB_LDFLAGS_MAINT_APPEND = -fPIC
  71. 修改configure.ac,将其中的1.5修改为1.0,将-lusrsctp修改为-lusrsctp -lpthread
  72. 修改gstreamer-sctp-1.5.pc.in文件名为gstreamer-sctp-1.0.pc.in
  73. 修改gstreamer-sctp-1.5-uninstalled.pc.in文件名为gstreamer-sctp-1.0-uninstalled.pc.in
  74. 修改gst-libs/gst/sctp下的Makefile.am,将其中的1_5修改为1_0
  75. 修改ext/gst/sctp下的Makefile.am,将其中的1.5修改为1.0
  76. 修改gst/videorepair,将其中的1.5修改为1.0
  77. 修改Makefile.am,将其中的1.5修改为1.0
  78. 修改gstreamer-sctp-1.0.pc.in,将其中的1.5修改为1.0
  79. 会在打包时signfile时失败,使用dpkg-buildpackage -uc -us避免此错误
  80.  
  81. 14.安装openwebrtc-gst-plugins
  82.  
  83. 15.编译openh264
  84. 需要编译Kurento提供的openh264,github/gitlib上是openh264-1
  85. 16.安装openh264
  86.  
  87. 17.编译openh264-gst-plugins-bad-1.0
  88. 编译依赖: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
  89. 需要从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
  90. 从kurentu中的gst-plugins-bad库,取得debain目录下的openh264-gst-plugins-bad-1.0.install/
  91. 修改debain/build-deps.in,其后添加依赖openh264, libpcap-dev
  92. 修改debian/control.in,其后添加一段
  93. Package: openh264-gst-plugins-bad-@GST_ABI@
  94. Architecture: any
  95. Multi-Arch: same
  96. Pre-Depends: ${misc:Pre-Depends}
  97. Depends: ${misc:Depends},
  98. ${shlibs:Depends},
  99. gstreamer@GST_ABI@-plugins-base,
  100. openh264,
  101. libgstreamer-plugins-bad@GST_DEB_ABI@ (= ${binary:Version}),
  102. Description: GStreamer plugins from openh264
  103.  
  104. 18.安装openh264-gst-plugins-bad-1.0
  105.  
  106. 19.编译kms-elements
  107. 编译依赖:
  108. 修改debian/control中,所有gstreamer-1.5相关字符全部修改为1.0
  109. a.CMakeLists.txt中gstreamer-1.5相关字符全部修改为1.0
  110. generic_find(LIBNAME gstreamer-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  111. generic_find(LIBNAME gstreamer-base-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  112. generic_find(LIBNAME gstreamer-video-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  113. generic_find(LIBNAME gstreamer-app-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  114. generic_find(LIBNAME gstreamer-check-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  115. generic_find(LIBNAME gstreamer-sdp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  116. generic_find(LIBNAME gstreamer-rtp-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  117. generic_find(LIBNAME gstreamer-pbutils-1.0 VERSION ${GST_REQUIRED} REQUIRED)
  118. generic_find(LIBNAME gstreamer-sctp-1.0 REQUIRED)
  119. b.搜索名下一堆的CMakeLists.txt中,将其中的1.5改成1.0
  120. c.修复编译问题GF::GF():
  121. BOOST_GLOBAL_FIXTURE (GF)后需要加;号
  122. d.临时注释掉tests目录的编译,在CMakeLists.txt中修改
  123. # add_subdirectory(tests)
  124.  
  125. 20.安装kms-elements
  126.  
  127. 21.编译kms-filters
  128. 编译依赖:libopencv-dev
  129. 修改CMakeLists.txt中,所有gstreamer-1.5相关字符全部修改为1.0,同时添加两行:
  130. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_OPENCV_IMGCODECS")
  131. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENCV_IMGCODECS")
  132. 搜索名下一堆的CMakeLists.txt中,将其中的1.5改成1.0
  133. classifier.cpp文件中Mat frame (img);修改为Mat frame = cvarrToMat(img);
  134. 临时注释掉add_subdirectory(tests)这一行
  135. 修改debian/kms-filters.install,将其中的1.5改成1.0
  136.  
  137. 22.安装kms-filters
  138.  
  139. 23.编译kurento-media-server
  140. 编译依赖:libopencv-dev kms-filters-dev libboost-log-dev libboost-program-options-dev libboost-thread-dev libssl1.0-dev
  141. 修改CMakeLists.txt中,所有gstreamer-1.5相关字符全部修改为1.0
  142. 调用了std::cout的,需要包含#include <iostream>
  143. 临时注释掉tests目录的编译,在CMakeLists.txt中修改
  144. # add_subdirectory(tests)
  145.  
  146. 24.资料信息:
  147. 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.
  148. 测试失败有更简便的修改办法了

  

ubuntu 18.04下编译最新版本的KMS的更多相关文章

  1. Ubuntu 18.04 下 emscripten SDK 的安装

    Ubuntu 18.04 下 emscripten SDK 的安装http://kripken.github.io/emscripten-site/docs/getting_started/downl ...

  2. Ubuntu 18.04下安装Steam顶级在线游戏平台

    Ubuntu 18.04下安装Steam顶级在线游戏平台 原创: 聆听世界的鱼 Linux公社 今天 Steam是由Valve公司开发的顶级在线游戏平台,是目前全球最大的综合性数字发行平台之一.它让你 ...

  3. Ubuntu 18.04 下配置 HAXM 加速 Android模拟器

    Ubuntu 18.04 下配置 HAXM 加速 Android模拟器 最近在vmware环境下搭建ubuntu18.04开发环境,开始发现总是运行android模拟器在console提示加载如下错误 ...

  4. Ubuntu 16.04下编译安装Apache2.4和PHP7结合

    Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...

  5. VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP

    PJSIP是一个开源的SIP协议栈.它支持多种SIP的扩展功能,可说算是最目前流行的SIP协议栈之一了.  它实现了SIP.SDP.RTP.STUN.TURN和ICE.PJSIP作为基于SIP的一个多 ...

  6. 在Ubuntu 18.04 下安装mysql,没有初始密码,重设root密码

    在Ubuntu 18.04 下安装mysql 不知道是由于mysql更新为新版还是.Ubuntu18.04中的特性,安装过程中没有设置密码的环节,在网络上找了半天,总算解决了!特此记录下来,以便以后查 ...

  7. ubuntu 18.04下Chromium设置为系统代理

    前言 在ubuntu 18.04下挂上ss后firefox能直接上google了但是chromium上不去 会出现下面两种情况 # This site can't be reached xxxxxx ...

  8. Ubuntu 18.04 手动编译安装 ffmpeg

    ffmpeg 是一个由提供对视频.音频和其他多媒体流文件进行处理功能的库和程序构成的自由软件项目,其常被用于适用于不同格式的音频和视频的录影.转换和流处理等场合.这里记录在 Ubuntu 18.04 ...

  9. Ubuntu 18.04 WMware 编译 AOSP android-7.1.2_r33 笔记

    0 前言 问:都快2022年了,为什么还要编译 android 7.1.2 ? 答:某脱壳机特征修改或移植到其他机型(此处省略1000字...) 笔者在编译之前并没有加入专有二进制文件(后续加入了再补 ...

随机推荐

  1. 算法(10)Subarray Sum Equals K

    题目:在数组中找到一个子数组,让子数组的和是k. 思路:先发发牢骚,这两天做题是卡到不行哇,前一个题折腾了三天,这个题上午又被卡住,一气之下,中午睡觉,下午去了趟公司,竟然把namespace和cgr ...

  2. Redis集群操作手册

    一.原始集群(6节点 3主3从): (1)启动集群: [root@bhz004 ~]# /usr/local/redis/bin/redis-server /usr/local/redis-clust ...

  3. Luogu3952 NOIP2017时间复杂度

    搞一个栈模拟即可.对比一下和一年前考场上的代码233 //2018.11.8 #include<iostream> #include<cstdio> #include<c ...

  4. bootstrap-table 增加序号列(支持分页)

    columns: [ { checkbox: true }, { title: '序号', align: 'center', halign: 'center', formatter: function ...

  5. OJ 列表

    维护一个 OJ 列表.(这件事似乎没啥意义?) AtCoder hihoCoder Codeforces DMOJ CodeChef CS Academy HackerRank HackerEarth ...

  6. URAL1696 Salary for Robots

    题目戳这里. 最长下降子序列单调队列求法. \(f_{i,j,k}\)表示考虑前\(i\)个数,\(g_1 = j,g_2 = k\)的方案数.转移: \[f_{i,j,k} = \sum_{p = ...

  7. oracleLinux7上安装oracle11g r2(脚本简单配置环境)

    一 环境脚本简单配置 #!/bin/bashmv /etc/yum.repos.d/* /tmpmv iso.repo /etc/yum.repos.d/tar zxvf a.tar.gzmv 7Se ...

  8. selenium 获取某个元素的html

    <table> <tbody id="tb-37327761306"> <tr class="sep-row"><td ...

  9. 关于控制下拉框select只读的js控制

    文本框有readonly属性,直接设置:下拉框没有readonly属性,也不能通过其他属性进行只读的设置,下拉框只有disabled属性,但是这个属性设成true之后,值就获取不到了: 我在网上搜了一 ...

  10. Chocolatey 使用

    最近空了下来不干点什么就感觉脑袋热,可是出过的问题挖过的坑还是要自己去解决. 一直网络不好安装choco一直都是报错,今天又建立了chocolatey 在windows上来用,网络问题解决了,类似于m ...