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