Kurento6.16.0源码构建+Jetbrains CLION运行

839 阅读3分钟

kms源码构建+Jetbrains IDE运行

1、打开官方源码编译教程

执行以下操作:

(1)安装基础依赖
sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
    build-essential \
    ca-certificates \
    cmake \
    git \
    gnupg
(2)添加 Kurento 存储库
# Import the Kurento repository signing key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83

# Get Ubuntu version definitions
source /etc/upstream-release/lsb-release 2>/dev/null || source /etc/lsb-release

# Add the repository to Apt
sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF
# Kurento Media Server - Nightly packages
deb [arch=amd64] http://ubuntu.openvidu.io/dev $DISTRIB_CODENAME kms6
EOF

sudo apt-get update
(3)安装构建依赖
sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
    kurento-media-server-dev
(4)下载源码
git clone https://github.com/Kurento/kms-omni-build.git
cd kms-omni-build
// 下面两条有可能不能一次性下载完子模块,可以多执行几次。
// 如果还是无法下载下来,进入github下载源码,替换到对应的子模块目录
git submodule update --init --recursive
git submodule update --remote

// 设置版本
REF=6.16.0
git checkout "$REF" || true
git submodule foreach "git checkout $REF || true"

(5)编译运行
export MAKEFLAGS="-j$(nproc)"
./bin/kms-build-run.sh

结果: image.png 此时我们还可以看到项目路径下生成了build好的目录build-Debug。

2、用clion运行

用clion打开项目,kms启动需要配置参数,所以用clion也需要配置参数。我们可以参考bin/kms-build-run.sh,查看,发现:

COMMAND="$COMMAND kurento-media-server/server/kurento-media-server \
    --conf-file='$PWD/config/kurento.conf.json' \
    --modules-config-path='$PWD/config' \
    --modules-path='$PWD:/usr/lib/x86_64-linux-gnu/kurento/modules' \
    --gst-plugin-path='$PWD:/usr/lib/x86_64-linux-gnu/gstreamer-1.5' \
"

在clion中配置同样的启动参数,把$PWD换成kms build完的路径,如图:

image.png

Apply之后run 。

3、下载并运行Java客户端代码。

用idea打开,maven根据pom下载依赖包,完成之后。你可以选择一个子模块运行测试。 浏览器打开 https://localhost:8443 .发现没有显示对应的效果,打开控制台,已经报错了: WebSocket is already in CLOSING or CLOSED state.

查看Java Application也报错了(注意这个错误码-32603,本人调试过程中有遇到其他错误码,对应其他的错误):

ERROR 30074 --- [nio-8443-exec-2] w.s.h.ExceptionWebSocketHandlerDecorator : Closing session due to exception for StandardWebSocketSession[id=5a046b80-a858-113a-4526-812c58b79aaf, uri=wss://localhost:8443/magicmirror]

org.kurento.client.internal.server.KurentoServerException: Unexpected error while processing method: bad_function_call (Code:-32603, Type:null, Data: null)

如图:

image.png

我用./kms-build-run.sh和用启动kms,和客户端联调发现是正常的。那么问题肯定出在服务端。 我对比./kms-build-run.sh执行的命令和用clion启动的控制台打印的命令。

./kms-build-run.sh启动:

GST_DEBUG='2,Kurento*:4,kms*:4,sdp*:4,webrtc*:4,*rtpendpoint:4,rtp*handler:4,rtpsynchronizer:4,agnosticbin:4'  kurento-media-server/server/kurento-media-server     --conf-file='/home/dengyu/code/kms/kms-omni-build/build-Debug/config/kurento.conf.json'     --modules-config-path='/home/dengyu/code/kms/kms-omni-build/build-Debug/config'     --modules-path='/home/dengyu/code/kms/kms-omni-build/build-Debug:/usr/lib/x86_64-linux-gnu/kurento/modules'     --gst-plugin-path='/home/dengyu/code/kms/kms-omni-build/build-Debug:/usr/lib/x86_64-linux-gnu/gstreamer-1.5' 

clion启动的命令:

/home/dengyu/code/kms/kms-omni-build/cmake-build-debug/kurento-media-server/server/kurento-media-server --conf-file=/home/dengyu/code/kms/kms-omni-build/build-Debug/config/kurento.conf.json --modules-config-path=/home/dengyu/code/kms/kms-omni-build/build-Debug/config --modules-path=/home/dengyu/code/kms/kms-omni-build/build-Debug:/usr/lib/x86_64-linux-gnu/kurento/modules --gst-plugin-path=/home/dengyu/code/kms/kms-omni-build/build-Debug:/usr/lib/x86_64-linux-gnu/gstreamer-1.5

前面的日志信息GST_DEBUG先忽略。发现后面的参数是一致的,只有kurento-media-server程序,前者是build-Debug目录下的,后者是cmake-build-debug目录下的。而我们应该使用通过脚本编译好的,事实也是如此。clion不能识别build-Debug目录。那么解决方法就是:

1、删除cmake-build-debug
2、将build-Debug目录名改成cmake-build-debug,不要忘记启动参数的也要改

但是这样似乎有点麻烦,直接改./bin/kms-build-run.sh 生成的目录为 cmake-build-debug即可,修改kms-build-run.sh中的:

#BUILD_DIR="build-${BUILD_TYPE}${BUILD_DIR_SUFFIX}"
BUILD_DIR="cmake-build-debug"

重新执行sudo ./bin/kms-build-run.sh 。然后配置启动参数,这样就可以直接用clion启动了。注意权限。

4、测试

  • clion启动kms
  • java Application启动group-call
  • chrome浏览器+Android浏览器加入group-call

image.png