【教程】部署apprtc服务中安装google-cloud-cli组件的问题及解决
#0# 前置条件
已经安装完成node,grunt,node 组件和python pip包等。需要安装google-cloud-cli组件。
Ubuntu安装google-cloud-cli组件
apprtc项目运行需要google-cloud-cli前置组件,且运行其中的dev_appserver.py。
根据google官方的关于安装gcloud cli的说明:https://cloud.google.com/sdk/docs/install?hl=zh-cn。
可以通过apt命令直接安装这两个组件,分别是:
sudo apt install google-cloud-cli
sudo apt install google-cloud-cli-app-engine-python
过程中apt命令访问google组件库失败,需要借助代理,在只需在正常的apt-get install命令前加上代理参数即可,如:sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8087" install google-cloud-cli 。
然而即便如此,最终在apptrc项目下执行python3 /snap/google-cloud-cli/165/bin/dev_appserver.py /out/app_engine报错。
ERROR: (dev_appserver) You cannot perform this action because this Google Cloud CLI installation is managed by an external package manager.
因此尝试从源码安装google-cli。不依赖apt包管理工具/snap包安装工具。此时需要先卸载原来安装的google-cloud-cli:sudo apt remove google-cloud-cli。及sudo snap remove google-cloud-cli。
根据官方指导,得到安装步骤如下(本机是64位linux,不同版本的命令不同,详见 安装 gcloud CLI):
cd ~/Desktop
wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-444.0.0-linux-x86_64.tar.gz # 可通过-e参数指定代理:-e "http_proxy=http://127.0.0.1:8087"
tar -xf google-cloud-cli-444.0.0-linux-x86_64.tar.gz
sudo ./google-cloud-sdk/install.sh
./google-cloud-sdk/bin/gcloud init --skip-diagnostics
./google-cloud-sdk/bin/gcloud components install app-engine-python
# 如上命令执行后 dev_appserver.py 正常情况下应该就在google-cloud-sdk文件夹的bin目录下
cd apprtc
# 注意这里要打开一个新的终端以使之前的更改生效
python3 google-cloud-sdk/bin/dev_appserver.py /out/app_engine
最终成功运行起apprtc项目

访问 http://127.0.0.1:8080 可以看到聊天室:

Docker部署
因为网络问题,从项目中的Dockerfile构建镜像失败。在apk add命令处执行出现问题。决定从Docker Hub官方pull一个镜像并部署。
下载量最高的是4年前的一个镜像
docker pull piasy/apprtc-server
docker run --rm --net=host \-e PUBLIC_IP=127.0.0.1 \-it piasy/apprtc-server
命令行输出结果如下图所示:

可以在网页中访问 http://127.0.0.1:8080。进入到apprtc聊天室。
当两个人(此处由两个浏览器表示)进入到同一间聊天室,即可进行通话(未测试更多人的情况),如下图所示:

更详细的代码和webrtc工作原理有待后续分析。
相关文章:
【教程】部署apprtc服务中安装google-cloud-cli组件的问题及解决
#0# 前置条件 已经安装完成node,grunt,node 组件和python pip包等。需要安装google-cloud-cli组件。 Ubuntu安装google-cloud-cli组件 apprtc项目运行需要google-cloud-cli前置组件,且运行其中的dev_appserver.py。 根据google官方的关于安…...
C++——shared_ptr:make_shared的用处,与shared_ptr直接构造的区别
shared_ptr shared_ptr继承自__shared_ptr,其中有两个对象,一个是指向资源的指针,一个是控制块,指向一个引用计数对象。控制块中存储了强引用和弱引用的计数,强引用Uses代表shared_ptr对象的引用计数,弱引…...
【网络安全带你练爬虫-100练】第17练:分割字符串
目录 一、目标1:使用函数分割 二、目标2:使用函数模块 三、目标3:使用正则匹配 一、目标1:使用函数分割 目标:x.x.x.x[中国北京 xx云] 方法:split函数replace函数 1、分割:使用split()方法将…...
Unity 之ToolTip的用法
文章目录 在Unity中,ToolTip是一个在编辑器中使用的UI元素,它提供了鼠标悬停在某个对象或控件上时显示的文本信息。ToolTip通常用于向开发人员提供有关对象、字段、控件或菜单项的附加信息,从而帮助他们更好地理解和使用这些元素。 ToolTip通…...
xsschallenge通关(11-15)
level 11 老规矩,先查看源码,做代码审计: <?php ini_set("display_errors", 0); $str $_GET["keyword"]; $str00 $_GET["t_sort"]; $str11$_SERVER[HTTP_REFERER]; $str22str_replace(">&quo…...
Kubernetes技术--k8s核心技术集群的安全机制RBAC
1.引入 我们在访问k8s的集群的时候,需要经过一下几个步骤: -a:认证 -1).传输安全:对外是不暴露端口:8080,只能够在内部访问,对外使用的是6443端口。 -2).客户端认证的常用几种方式: -https证书 基于ca证书 -https token认证 通过token识别用户 -https <...
【JavaSE】String类
两种创建String对象的区别 String s1 "hello"; String s2 new String("hello");s1是先查看常量池是否有 “hello” 数据空间,如果有就直接指向它,如果没有就创建然后指向它。s1最终指向的是常量池的空间地址。 s2是先在堆中创建空…...
DBMS Scheduler设置重复间隔
参考文档: Database Administrator’s Guide 29.4.5.2 Using the Scheduler Calendaring Syntax The main way to set how often a job repeats is to set the repeat_interval attribute with a Scheduler calendaring expression. See Also: Oracle Database…...
windows的redis配置sentinel
1、先安装好redis主从,参考我的文章,链接如下 redis主从(windows版本)_rediswindows版本_veminhe的博客-CSDN博客 2、然后配置sentinel 参考在windows上搭建redis集群(Redis-Sentinel) 配置时…...
NetMarvel机器学习促广告收益最大化,加速获客
游戏出海的竞争日益激烈,这并非空穴来风。 从2021年第一季度至2022年第四季度,iOS平台的CPI增长了88%,意味着厂商需要花费近两倍的钱才能获取一个新用户。与此同时数据隐私政策持续收紧,更加提高了营销成本。 在成本高涨的当下&…...
Spring-5.0.x源码下载及本地环境搭建
一、Spring源码下载 从github上下载Spring的源代码 下载地址:https://github.com/spring-projects/spring-framework 访问地址之后,打开Spring的代码页面找到你想下载的版本,如5.0.x,如下图所示: 下载方式一&#x…...
go中的切片
demo1:切片定义的几种方式 package mainimport "fmt"/* 切片定义的几种方式数组和切片区别: 使用数组传参是值传递,而使用切片传参是引用传递 数组定义好长度之后不可修改,而切片可以理解为动态数组,长度可修改*/func …...
C++笔记之单例通过GetInstance传递参数
C笔记之单例通过GetInstance传递参数 code review! 文章目录 C笔记之单例通过GetInstance传递参数例1.普通指针的单例例2.结合智能指针和std::call_once例3.编译不通过的错误例子,在GetInstance内不可以使用std::make_shared来创建对象 例1.普通指针的单例 运行 …...
1688API技术解析,实现获得1688商品详情
要实现获得1688商品详情,你需要使用1688 API。1688 API是阿里巴巴旗下的开放平台,它提供了一套丰富的接口,可以让开发者通过编程的方式获取到1688网站上的商品信息。 首先,你需要在阿里开放平台注册一个账号,并创建一…...
【Java 动态数据统计图】动态X轴二级数据统计图思路Demo(动态,排序,动态数组(重点推荐:难)九(131)
需求: 1.有一组数据集合,数据集合中的数据为动态; 举例如下: [{province陕西省, city西安市}, {province陕西省, city咸阳市}, {province陕西省, city宝鸡市}, {province陕西省, city延安市}, {province陕西省, city汉中市}, {pr…...
C#将text文本中的单双行分开单独保存
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 文本的分割1.设定text文件的名称为02.文本导出 文本的分割 1.设定text文件的名称为0 代码如下: using System; using System.Collections.Generic; us…...
深入理解 Go 语言中的 iota
iota是go语言的常量计数器,只能在常量表达式中使用,iota在const关键字出现时将被重置为0,const中每新增一行常量声明将使iota计数一次,可理解为const语句块中的行索引。它会自动递增,从0开始。 修改步长 尽管默认步长…...
【力扣】55、跳跃游戏
var canJump function(nums){let cover 0;for(let i0;i<nums.length;i){if(i<cover){cover Math.max(nums[i]i,cover);if(cover >nums.length-1){return true;}}}}...
个人与公司合作,怎么代开发票?有哪些优惠政策?
《梅梅谈税》专注于企业税务筹划!助力企业合理、合规、合法进行节税税收筹划! 当下越来越多的个人与公司直接发生业务往来,例如个人给企业提供技术服务,做宣传推广等,业务完成公司给个人支付了相关费用后,…...
什么是计算机视觉,计算机视觉的主要任务及应用
目录 1. 什么是计算机视觉 2. 计算机视觉的主要任务及应用 2.1 图像分类 2.1.1 图像分类的主要流程 2.2 目标检测 2.2.1 目标检测的主要流程 2.3 图像分割 2.3.1 图像分割的主要流程 2.4 人脸识别 2.4.1 人脸识别的主要流程 对于我们人类来说,要想认出身边…...
从单核到16核:用程序员思维图解CPU参数(附性能测试代码)
从单核到16核:用程序员思维图解CPU参数(附性能测试代码) 在开发高性能应用时,CPU的选择往往直接决定了程序的执行效率。但面对琳琅满目的参数——主频、核心数、线程数、缓存大小、架构代际——开发者该如何做出明智决策ÿ…...
ESP芯片烧录终极指南:5分钟掌握esptool.py完整操作流程
ESP芯片烧录终极指南:5分钟掌握esptool.py完整操作流程 【免费下载链接】esptool Serial utility for flashing, provisioning, and interacting with Espressif SoCs 项目地址: https://gitcode.com/gh_mirrors/es/esptool ESP芯片烧录工具esptool.py是Espr…...
基于Qwen3-ASR的智能会议纪要系统:从语音识别到文本摘要全流程
基于Qwen3-ASR的智能会议纪要系统:从语音识别到文本摘要全流程 1. 系统整体效果展示 今天给大家展示一个基于Qwen3-ASR-1.7B语音识别模型构建的智能会议纪要系统。这个系统不仅能准确识别会议中的语音内容,还能自动区分不同说话人,提取关键…...
AI写前端也看“审美”?我用GLM4.6、Kimi和Minimax-m2做了个设计实验,结果有点意外
AI写前端也看“审美”?GLM4.6、Kimi与Minimax-m2的设计实验报告 当我们在深夜调试CSS时,是否想过AI模型其实也在"暗中观察"我们的设计品味?这次实验让我发现了一个有趣现象:不同AI生成的前端代码,在视觉呈现…...
汽车电子电气架构演进:从分布式 ECU 到中央计算平台
目录 一、电子电气架构的六大演进阶段 二、高性能处理器与软件平台重构 三、宝马分层式电子电气架构设计 四、中央通信服务器与可扩展网络 五、车云一体架构与软件开发变革 六、架构升级代码示例:SOA 服务注册与调用 七、中央计算平台配置示例(代码…...
OpenClaw自动化测试:Qwen3.5-9B-AWQ-4bit驱动UI截图比对
OpenClaw自动化测试:Qwen3.5-9B-AWQ-4bit驱动UI截图比对 1. 为什么需要自动化UI测试 作为个人开发者,每次前端代码修改后最头疼的就是手动检查各个页面的UI变化。传统做法要么是人工逐页比对,要么依赖复杂的测试框架配置。直到我发现OpenCl…...
手把手改造Ruoyi-vue-plus权限体系:给多租户增加动态数据权限控制
深度定制Ruoyi-vue-plus多租户数据权限:从架构设计到前端适配全解析 在当今企业级应用开发中,多租户系统已成为SaaS服务的标配,而数据权限控制则是确保租户间数据隔离的核心机制。Ruoyi-vue-plus作为国内流行的快速开发框架,其原生…...
WPF项目实战视频《四》(主要为项目实战API设计)
30.WPF项目实战(创建数据库)31.WPF项目实战(工作单元)32.WPF项目实战(待办事项接口)33.WPF项目实战(配置)34.WPF项目实战(备忘录接口)35.WPF项目实战…...
PyFlow多线程编程:SingletonThreadSampleNode的完整实现指南
PyFlow多线程编程:SingletonThreadSampleNode的完整实现指南 【免费下载链接】PyFlow Visual scripting framework for python 项目地址: https://gitcode.com/gh_mirrors/py/PyFlow PyFlow作为Python的视觉化脚本框架,为开发者提供了直观的节点编…...
AI在测试中的应用:从测试用例生成到缺陷预测
随着软件开发流程向敏捷与DevOps的持续演进,软件测试面临着迭代周期缩短、系统复杂度飙升的双重压力。传统的测试方法,高度依赖人工经验与重复劳动,在效率、覆盖率和预测性上逐渐显现瓶颈。人工智能技术的引入,正从辅助工具演变为…...
