EC2安装WebRTC sdk-c环境、构建、编译
1、登录新的ec2实例,证书可以跟之前的实例用一个:
ssh -v -i ~/Documents/cert/qa.pem ec2-user@70.xxx.165.xxx
2、按照sdk-c demo中readme的描述开始安装环境:
https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c
2-1、 安装git:
sudo dnf install git -y
git --version
2-2、clone sdk-c项目:
git clone https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git --single-branch -b main kvs-webrtc-sdk
2-3、下载并安装 OpenSSL 1.1.1t版本(这里说明一下,通过构建sdk-c项目时自动下载OpenSSL我这边每次都timeout;包管理器dnf
默认只安装 仓库中当前可用的版本,不支持直接通过 dnf install openssl-devel-1.1.1t
来安装旧版本):
# 安装依赖
sudo dnf groupinstall "Development Tools" -y
sudo dnf install perl-core zlib-devel -y# 下载源码(1.1.1t)
wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz
tar -xf openssl-1.1.1t.tar.gz
cd openssl-1.1.1t# 指定安装路径(例如 /usr/local/openssl-1.1.1t)
./config --prefix=/usr/local/openssl-1.1.1t --openssldir=/usr/local/openssl-1.1.1t
make -j$(nproc)
sudo make install
2-4、OpenSSL 1.1.1t设置环境变量:
Amazon Linux 的默认 shell 启动文件是 ~/.bash_profile,
nano ~/.bash_profile
# >>> OpenSSL 1.1.1t config >>>
export PATH=/usr/local/openssl-1.1.1t/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/openssl-1.1.1t/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/openssl-1.1.1t/lib/pkgconfig
# <<< OpenSSL 1.1.1t config <<<
保存并退出编辑器,Ctrl + X -> Y -> 回车,
让改动立即生效:
source ~/.bash_profile
验证是否生效:
[ec2-user@ip-xx-10-0-xxx ~]$ openssl version
OpenSSL 1.1.1t 7 Feb 2023
2-5、修改CMakeList.txt
cd kvs-webrtc-sdk/
nano CMakeList.txt
Ctrl+w,搜索关键词:build_dependency,将:
build_dependency(openssl ${BUILD_ARGS})set(OPENSSL_ROOT_DIR ${OPEN_SRC_INSTALL_PREFIX})
修改为:
# build_dependency(openssl ${BUILD_ARGS})set(OPENSSL_ROOT_DIR "/usr/local/openssl-1.1.1t")
保存退出。
2-6、安装基础依赖:
sudo dnf install -y cmake m4 pkgconf-pkg-config openssl-devel libcurl-devel
2-7、安装 GStreamer 及其相关开发包:
sudo dnf install -y \gstreamer1-devel \gstreamer1-plugins-base-devel \gstreamer1-plugins-bad-free-devel
这块儿要说一下,gstreamer1有的插件在Amazon Linux 2023 的默认仓库中可能没有提供,或者它们已经被拆分、重命名或移除。所以在安装过程中会报错,例如:
Error: Unable to find a match: gstreamer1-plugins-good-devel gstreamer1-libav-devel
所以先search一下,看支持哪些插件:
[ec2-user@ip-xx-10-0-xxx ~]$ dnf search gstreamer1 | grep devel
Last metadata expiration check: 1:56:26 ago on Mon Jun 9 09:41:13 2025.
gstreamer1-devel.x86_64 : Libraries/include files for GStreamer streaming media framework
gstreamer1-plugins-bad-free-devel.x86_64 : Development files for the GStreamer media framework "bad" plug-ins
gstreamer1-plugins-base-devel.x86_64 : GStreamer Base Plugins Development files
确认一下gstreamer版本:
[ec2-user@ip-10-10-0-103 ~]$ pkg-config --modversion gstreamer-1.0
1.24.10
3、构建
3-1、先创建build目录:
mkdir -p kvs-webrtc-sdk/build
cd kvs-webrtc-sdk/build/
3-2、构建:
cmake .. \-DBUILD_OPENSSL=OFF \-DOPENSSL_ROOT_DIR=/usr/local/openssl-1.1.1t \-DOPENSSL_INCLUDE_DIR=/usr/local/openssl-1.1.1t/include \-DOPENSSL_USE_STATIC_LIBS=FALSE \-DUSE_OPENSSL_SYSTEM=ON \-DUSE_OPENSSL_FROM_SOURCE=OFF
4、编译
make -j$(nproc)
[ec2-user@ip-xx-10-0-xxx build]$ make -j$(nproc)
[ 1%] Building C object CMakeFiles/kvsWebrtcSignalingClient.dir/src/source/Signaling/ChannelInfo.c.o
[ 3%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Crypto/Crypto.c.o
[ 4%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Crypto/Dtls.c.o
[ 6%] Building C object CMakeFiles/kvsWebrtcSignalingClient.dir/src/source/Signaling/Client.c.o
[ 8%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Crypto/Dtls_openssl.c.o
[ 9%] Building C object CMakeFiles/kvsWebrtcSignalingClient.dir/src/source/Signaling/FileCache.c.o
[ 12%] Building C object CMakeFiles/kvsWebrtcSignalingClient.dir/src/source/Signaling/LwsApiCalls.c.o
[ 12%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Crypto/IOBuffer.c.o
[ 14%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Crypto/Tls.c.o
[ 16%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Crypto/Tls_openssl.c.o
[ 17%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/ConnectionListener.c.o
[ 19%] Building C object CMakeFiles/kvsWebrtcSignalingClient.dir/src/source/Signaling/Signaling.c.o
[ 20%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/IceAgent.c.o
[ 22%] Building C object CMakeFiles/kvsWebrtcSignalingClient.dir/src/source/Signaling/StateMachine.c.o
[ 24%] Linking C shared library libkvsWebrtcSignalingClient.so
[ 24%] Built target kvsWebrtcSignalingClient
[ 25%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/IceAgentStateMachine.c.o
[ 27%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/IceUtils.c.o
[ 29%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/NatBehaviorDiscovery.c.o
[ 30%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/Network.c.o
[ 32%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/SocketConnection.c.o
[ 33%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/TurnConnection.c.o
[ 35%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Ice/TurnConnectionStateMachine.c.o
[ 37%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Metrics/Metrics.c.o
[ 38%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/JitterBuffer.c.o
[ 40%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/PeerConnection.c.o
[ 41%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/Retransmitter.c.o
[ 43%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/Rtcp.c.o
[ 46%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/SessionDescription.c.o
[ 46%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/Rtp.c.o
[ 48%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/jsmn.c.o
[ 50%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtcp/RollingBuffer.c.o
[ 51%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtcp/RtcpPacket.c.o
[ 53%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtcp/RtpRollingBuffer.c.o
[ 54%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtp/Codecs/RtpG711Payloader.c.o
[ 56%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtp/Codecs/RtpH264Payloader.c.o
[ 58%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtp/Codecs/RtpH265Payloader.c.o
[ 59%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtp/Codecs/RtpOpusPayloader.c.o
[ 61%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtp/Codecs/RtpVP8Payloader.c.o
[ 62%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Rtp/RtpPacket.c.o
[ 64%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Sdp/Deserialize.c.o
[ 66%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Sdp/Serialize.c.o
[ 67%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Srtp/SrtpSession.c.o
[ 69%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Stun/Stun.c.o
[ 70%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/PeerConnection/DataChannel.c.o
[ 72%] Building C object CMakeFiles/kvsWebrtcClient.dir/src/source/Sctp/Sctp.c.o
[ 74%] Linking C shared library libkvsWebrtcClient.so
[ 74%] Built target kvsWebrtcClient
[ 77%] Building C object samples/CMakeFiles/kvsWebrtcClientViewer.dir/Common.c.o
[ 77%] Building C object samples/CMakeFiles/kvsWebrtcClientMaster.dir/Common.c.o
[ 80%] Building C object samples/CMakeFiles/kvsWebrtcClientViewer.dir/kvsWebRTCClientViewer.c.o
[ 80%] Building C object samples/CMakeFiles/kvsWebrtcClientMaster.dir/kvsWebRTCClientMaster.c.o
[ 82%] Linking C executable kvsWebrtcClientViewer
[ 83%] Linking C executable kvsWebrtcClientMaster
[ 83%] Built target kvsWebrtcClientViewer
[ 85%] Building C object samples/CMakeFiles/discoverNatBehavior.dir/discoverNatBehavior.c.o
[ 85%] Built target kvsWebrtcClientMaster
[ 87%] Building C object samples/CMakeFiles/kvsWebrtcClientMasterGstSample.dir/Common.c.o
[ 88%] Linking C executable discoverNatBehavior
[ 88%] Built target discoverNatBehavior
[ 90%] Building C object samples/CMakeFiles/kvsWebrtcClientViewerGstSample.dir/Common.c.o
[ 91%] Building C object samples/CMakeFiles/kvsWebrtcClientMasterGstSample.dir/GstAudioVideoReceiver.c.o
[ 93%] Building C object samples/CMakeFiles/kvsWebrtcClientViewerGstSample.dir/GstAudioVideoReceiver.c.o
[ 95%] Building C object samples/CMakeFiles/kvsWebrtcClientMasterGstSample.dir/kvsWebrtcClientMasterGstSample.c.o
[ 96%] Building C object samples/CMakeFiles/kvsWebrtcClientViewerGstSample.dir/kvsWebRTCClientViewerGstSample.c.o
[ 98%] Linking C executable kvsWebrtcClientMasterGstSample
[100%] Linking C executable kvsWebrtcClientViewerGstSample
[100%] Built target kvsWebrtcClientMasterGstSample
[100%] Built target kvsWebrtcClientViewerGstSample
相关文章:
EC2安装WebRTC sdk-c环境、构建、编译
1、登录新的ec2实例,证书可以跟之前的实例用一个: ssh -v -i ~/Documents/cert/qa.pem ec2-user70.xxx.165.xxx 2、按照sdk-c demo中readme的描述开始安装环境: https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c 2…...

盲盒一番赏小程序:引领盲盒新潮流
在盲盒市场日益火爆的今天,如何才能在众多盲盒产品中脱颖而出?盲盒一番赏小程序给出了答案,它以创新的玩法和优质的服务,引领着盲盒新潮流。 一番赏小程序的最大特色在于其独特的赏品分级制度。赏品分为多个等级,从普…...

边缘计算设备全解析:边缘盒子在各大行业的落地应用场景
随着工业物联网、AI、5G的发展,数据量呈爆炸式增长。但你有没有想过,我们生成的数据,真的都要发回云端处理吗?其实不一定。特别是在一些对响应时间、网络带宽、数据隐私要求高的行业里,边缘计算开始“火”了起来&#…...

Linux实现线程同步的方式有哪些?
什么是线程同步? 想象一下超市收银台:如果所有顾客(线程)同时挤向同一个收银台(共享资源),场面会一片混乱。线程同步就是给顾客们发"排队号码牌",确保: 有序访…...
python打卡day47
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import D…...

python学习day39
图像数据与显存 知识点回顾 1.图像数据的格式:灰度和彩色数据 2.模型的定义 3.显存占用的4种地方 a.模型参数梯度参数 b.优化器参数 c.数据批量所占显存 d.神经元输出中间状态 4.batchisize和训练的关系 import torch import torchvision import torch.nn as nn imp…...
Ansible+Zabbix-agent2快速实现对多主机监控
ansible Ansible 是一款开源的自动化工具,用于配置管理(Configuration Management)、应用部署(Application Deployment)、任务自动化(Task Automation)和编排(Orchestration…...

年度峰会上,抖音依靠人工智能和搜索功能吸引广告主
上周早些时候举行的第五届年度TikTok World产品峰会上,TikTok推出了一系列旨在增强该应用对广告主吸引力的功能。 新产品列表的首位是TikTok Market Scope,这是一个全新的分析平台,为广告主提供整个考虑漏斗的全面视图,使他们能够…...
Vuex:Vue.js 应用程序的状态管理模式
什么是Vuex? Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在大型单页应用中,当多个组件共享状态时,简单的单向数据流…...
【中间件】Web服务、消息队列、缓存与微服务治理:Nginx、Kafka、Redis、Nacos 详解
Nginx 是什么:高性能的HTTP和反向代理Web服务器。怎么用:通过配置文件定义代理规则、负载均衡、静态资源服务等。为什么用:提升Web服务性能、高并发处理、负载均衡和反向代理。优缺点:轻量高效,但动态处理能力较弱&am…...

如何使用CodeRider插件在IDEA中生成代码
一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1:市场安装 打开IDEA,进入File → Settings → Plugins搜…...

电脑定时关机工具推荐
软件介绍 本文介绍一款轻量级的电脑自动关机工具,无需安装,使用简单,可满足定时关机需求。 工具简介 这款关机助手是一款无需安装的小型软件,文件体积仅60KB,下载后可直接运行,无需复杂配置。 使用…...
Ubuntu 可执行程序自启动方法
使用 autostart(适用于桌面环境) 适用于 GNOME/KDE 桌面环境(如 Ubuntu 图形界面) 1. 创建 .desktop 文件 sudo vi ~/.config/autostart/my_laser.desktop[Desktop Entry] TypeApplication NameMy Laser Program Execbash -c &…...
Springboot多数据源配置实践
Springboot多数据源配置实践 基本配置文件数据库配置Mapper包Model包Service包中业务代码Mapper XML文件在某些复杂的业务场景中,我们可能需要使用多个数据库来存储和管理不同类型的数据,而不是仅仅依赖于单一数据库。本技术文档将详细介绍如何在 Spring Boot 项目中进行多数…...
第6章:Neo4j数据导入与导出
在实际应用中,数据的导入与导出是使用Neo4j的重要环节。无论是初始数据加载、系统迁移还是数据备份,都需要高效可靠的数据传输机制。本章将详细介绍Neo4j中的各种数据导入与导出方法,帮助读者掌握不同场景下的最佳实践。 6.1 数据导入策略 …...
uni-app学习笔记二十三--交互反馈showToast用法
showToast部分文档位于uniapp官网-->API-->界面:uni.showToast(OBJECT) | uni-app官网 uni.showToast(OBJECT) 用于显示消息提示框 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的内容,长度与 icon 取值有关。iconString否图…...
Go爬虫开发学习记录
Go爬虫开发学习记录 基础篇:使用net/http库 Go的标准库net/http提供了完善的HTTP客户端功能,是构建爬虫的基石: package mainimport ("fmt""io""net/http" )func fetchPage(url string) string {// 创建自定…...

前端异步编程全场景解读
前端异步编程是现代Web开发的核心,它解决了浏览器单线程执行带来的UI阻塞问题。以下从多个维度进行深度解析: 一、异步编程的核心概念 JavaScript的执行环境是单线程的,这意味着在同一时间只能执行一个任务。为了不阻塞主线程,J…...

分布式光纤声振传感技术原理与瑞利散射机制解析
分布式光纤传感技术(Distributed Fiber Optic Sensing,简称DFOS)作为近年来迅速发展的新型感知手段,已广泛应用于边界安防、油气管道监测、结构健康诊断、地震探测等领域。其子类技术——分布式光纤声振传感(Distribut…...

RocketMQ 客户端负载均衡机制详解及最佳实践
延伸阅读:🔍「RocketMQ 中文社区」 持续更新源码解析/最佳实践,提供 RocketMQ 专家 AI 答疑服务 前言 本文介绍 RocketMQ 负载均衡机制,主要涉及负载均衡发生的时机、客户端负载均衡对消费的影响(消息堆积/消费毛刺等…...
Q1起重机指挥理论备考要点分析
Q1起重机指挥理论备考要点分析 一、考试重点内容概述 Q1起重机指挥理论考试主要包含三大核心模块:安全技术知识(占40%)、指挥信号规范(占30%)和法规标准(占30%)。考试采用百分制,8…...
c++算法学习3——深度优先搜索
一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略,其核心思想是: 深度优先:从起点出发,选择一个方向探索到底,直到无路可走 回溯机制:遇到死路时返回最近…...
如何让非 TCP/IP 协议驱动屏蔽 IPv4/IPv6 和 ARP 报文?
——从硬件过滤到协议栈隔离的完整指南 引言 在现代网络开发中,许多场景需要定制化网络协议(如工业控制、高性能计算),此时需确保驱动仅处理特定协议,避免被标准协议(如 IPv4/IPv6/ARP)干扰。本文基于 Linux 内核驱动的实现,探讨如何通过硬件过滤、驱动层拦截和协议栈…...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...

【SSM】SpringMVC学习笔记7:前后端数据传输协议和异常处理
这篇学习笔记是Spring系列笔记的第7篇,该笔记是笔者在学习黑马程序员SSM框架教程课程期间的笔记,供自己和他人参考。 Spring学习笔记目录 笔记1:【SSM】Spring基础: IoC配置学习笔记-CSDN博客 对应黑马课程P1~P20的内容。 笔记2…...
Spring Boot SQL数据库功能详解
Spring Boot自动配置与数据源管理 数据源自动配置机制 当在Spring Boot项目中添加数据库驱动依赖(如org.postgresql:postgresql)后,应用启动时自动配置系统会尝试创建DataSource实现。开发者只需提供基础连接信息: 数据库URL格…...
TI德州仪器TPS3103K33DBVR低功耗电压监控器IC电源管理芯片详细解析
1. 基本介绍 TPS3103K33DBVR 是 德州仪器(Texas Instruments, TI) 推出的一款 低功耗电压监控器(Supervisor IC),属于 电源管理芯片(PMIC) 类别,主要用于 系统复位和电压监测。 2. …...

C++课设:实现本地留言板系统(支持留言、搜索、标签、加密等)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、项目功能概览与亮点分析1. 核心功能…...

【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2
----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导,采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...

Xcode 16.2 版本 pod init 报错
Xcode 版本升级到 16.2 后,项目执行 pod init 报错; ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchron…...