ARM64平台(RK3588)Ubuntu系统编译安装kurento-media-server

本文介绍了在RK3588平台上,如何安装Java编译环境、必要的依赖库,以及针对特定问题修改源代码后进行KurentoMediaServer的编译和运行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍的编译方法基于7.0.2版本

安装Java编译环境

安装JDK

apt install openjdk-11-jdk

安装Maven

apt install maven

安装编译依赖库

apt install -y libjsoncpp-dev libboost-all-dev libsigc++-2.0-dev libglibmm-2.4-dev libvpx-dev libsoup2.4-dev libnice-dev libssl-dev libwebsocketpp-dev 

安装运行依赖库

apt install gstreamer1.0-nice

源码下载

git clone https://gh-proxy.com/https://github.com/Kurento/kurento.git

更新子Module

cd kurento/server
git submodule update --init --recursive

修改代码

  1. 在server/module-elements/src/gst-plugins/webrtcendpoint/kmswebrtctransportsink.c和server/module-elements/src/gst-plugins/webrtcendpoint/kmswebrtctransportsrc.c文件中注释或者删除compare_factory_names和gst_bin_iterate_all_by_element_factory_name函数。
// {{{{ FIXME: This can be deleted when we start using GStreamer >=1.18 for Kurento.
// Code sourced from GStreamer/gstbin.c >=1.18
//
// https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/10f72da5040b74678c8f81723971127ee8bee04f/subprojects/gstreamer/gst/gstbin.c#L4526-4537
// static gint
// compare_factory_names (const GValue *velement, GValue *factory_name_val)
// {
//   GstElement *element = g_value_get_object (velement);
//   GstElementFactory *factory = gst_element_get_factory (element);
//   const gchar *factory_name = g_value_get_string (factory_name_val);

//   if (factory == NULL)
//     return -1;

//   return g_strcmp0 (GST_OBJECT_NAME (factory), factory_name);
// }
// //
// // https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/10f72da5040b74678c8f81723971127ee8bee04f/subprojects/gstreamer/gst/gstbin.c#L4553-4574
// static GstIterator *
// gst_bin_iterate_all_by_element_factory_name (GstBin *bin,
//     const gchar *factory_name)
// {
//   GstIterator *children;
//   GstIterator *result;
//   GValue factory_name_val = G_VALUE_INIT;

//   g_return_val_if_fail (GST_IS_BIN (bin), NULL);
//   g_return_val_if_fail (factory_name && *factory_name, NULL);

//   g_value_init (&factory_name_val, G_TYPE_STRING);
//   g_value_set_string (&factory_name_val, factory_name);

//   children = gst_bin_iterate_recurse (bin);
//   result = gst_iterator_filter (children, (GCompareFunc)compare_factory_names,
//       &factory_name_val);

//   g_value_unset (&factory_name_val);

//   return result;
// }
// }}}}
  1. 在server/media-server/3rdparty/DeathHandler/death_handler.cc文件中,将__arm__改为__aarch64__,并将uc->uc_mcontext.arm_pc改为uc->uc_mcontext.pc。
  // Overwrite sigaction with caller's address
#ifdef __linux__
#if defined(__aarch64__)
  trace[1] = reinterpret_cast<void *>(uc->uc_mcontext.pc);
#else
#if !defined(__i386__) && !defined(__x86_64__)
#error Only ARM64, x86 and x86-64 are supported
#endif
#if defined(__x86_64__)
  trace[1] = reinterpret_cast<void *>(uc->uc_mcontext.gregs[REG_RIP]);
#else
  trace[1] = reinterpret_cast<void *>(uc->uc_mcontext.gregs[REG_EIP]);
#endif
#endif

开始编译和运行

bin/build-run.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值