当前位置: 首页 > news >正文

AWS WebRTC 使用SDK-C demo 实现master推流和viewer拉流

上一篇讲了如何安装sdk-c demo环境、构建以及编译,这一篇写一下如何实现master端推流和viewer端拉流。

1、准备master端的ak、sk、session token:

aws密钥来自业务云,根据指定的业务云接口获取,直接使用就可以。我把业务云返回的密钥组,放在shell文件中:

#!/bin/bash# AWS 临时凭证配置
export AWS_ACCESS_KEY_ID=str1
export AWS_SECRET_ACCESS_KEY=str2
export AWS_SESSION_TOKEN=long_str3
export AWS_DEFAULT_REGION=str4
export AWS_KVS_LOG_LEVEL=1
export DEBUG_LOG_SDP=TRUE
export AWS_ENABLE_FILE_LOGGING=TRUEecho "✅ Master 环境变量已设置"

2、将上面的shell文件,例如,set_aws_env_master.sh上传到ec2实例上面:

testmanzhang@TestMandeMBP Downloads % scp -i ~/Documents/cert/qa.pem ~/Downloads/set_aws_env_master.sh ec2-user@70.xxx.165.xxx:/home/ec2-user/kvs-webrtc-sdk
set_aws_env_master.sh                         100%  962    13.4KB/s   00:00 

 3、上传成功后修改文件权限:

chmod +x set_aws_env_master.sh

4、执行sh文件:

[ec2-user@ip-10-xx-0-xxx kvs-webrtc-sdk]$ source set_aws_env_master.sh 
✅ Master 环境变量已设置

5、验证环境变量是否设置生效:

echo $AWS_ACCESS_KEY_ID

注:通过上面的方式设置密钥组只针对当前终端生效,如果再启动一个终端,需要再次执行sh。

6、后台启动master:

nohup ./samples/kvsWebrtcClientMaster channel_no > "master_output_$(date +%Y%m%d_%H%M%S).log" 2>&1 &

 6-1、启动之前要进入build目录,不然会报错:

-bash: ./samples/kvsWebrtcClientMaster: No such file or directory

7、查看master进程id:

7-1、jobs -l 用于查找当前终端通过后台&启动的进程:

[ec2-user@ip-10-xx-0-xxx kvs-webrtc-sdk]$ jobs -l
[1]+ 114886 Exit 127                nohup ./samples/kvsWebrtcClientMaster channel no > "master_output_$(date +%Y%m%d_%H%M%S).log" 2>&1

7-2、ps aux | grep kvsWebrtcClientMaster,这个更直观一些:

[ec2-user@ip-10-xx-0-xxx build]$ ps aux | grep kvsWebrtcClientMaster
ec2-user  115130  0.0  0.1 172180  6676 pts/0    Sl   02:56   0:00 ./samples/kvsWebrtcClientMaster lzgd5496a7907243e22d
ec2-user  115129  0.0  0.0 223224  2092 pts/0    S+   02:58   0:00 grep --color=auto kvsWebrtcClientMaster

8、从ec2实例中拉取日志:

testmanzhang@TestMandeMBP Downloads % scp -i ~/Documents/cert/qa.pem ec2-user@70.xxx.165.xxx:/home/ec2-user/kvs-webrtc-sdk/build/master_output_20250610_025651.log ./
master_output_20250610_025651.log             100%   85KB 105.8KB/s   00:00  

9、通过日志查看master进入了推流状态:

2025-06-10 02:57:22.660 DEBUG   lwsWssCallbackRoutine(): Client is writable
2025-06-10 02:57:22.680 VERBOSE lwsWssCallbackRoutine(): WSS callback with reason 9
2025-06-10 02:57:22.680 INFO    lwsWssCallbackRoutine(): WSS callback with reason 9
2025-06-10 02:57:27.603 VERBOSE signalingClientGetCurrentState(): Signaling Client Get Current State
2025-06-10 02:57:27.603 VERBOSE signalingClientGetCurrentState(): Current state: 0x0000000000000100
2025-06-10 02:57:32.603 VERBOSE signalingClientGetCurrentState(): Signaling Client Get Current State
2025-06-10 02:57:32.603 VERBOSE signalingClientGetCurrentState(): Current state: 0x0000000000000100
2025-06-10 02:57:32.680 VERBOSE lwsWssCallbackRoutine(): WSS callback with reason 10

10、准备viewer端的ak、sk、session token:

从业务云指定接口获取,也是采用sh的方式存储和执行(参考前面的1-5步)。

11、后台启动viewer:

nohup ./samples/kvsWebrtcClientViewer channel_no > "view1_output_$(date +%Y%m%d_%H%M%S).log" 2>&1 &

12、查看viewer端日志,viewer端收到流了:

2025-06-10 03:24:01.754 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 139985014205056, Size: 160, Flags 3388975000
2025-06-10 03:24:01.774 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 139985014205056, Size: 160, Flags 3388975000
2025-06-10 03:24:01.774 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 139985014205056, Size: 4458, Flags 3388975000
2025-06-10 03:24:01.795 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 139985014205056, Size: 160, Flags 3388975000
2025-06-10 03:24:01.814 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 139985014205056, Size: 263, Flags 3388975000
2025-06-10 03:24:01.815 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 139985014205056, Size: 160, Flags 3388975000
2025-06-10 03:24:01.836 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 139985014205056, Size: 160, Flags 3388975000
2025-06-10 03:24:01.854 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 139985014205056, Size: 314, Flags 3388975000

http://www.xdnf.cn/news/962443.html

相关文章:

  • 后进先出(LIFO)详解
  • [科研理论]无人机底层控制算法PID、LQR、MPC解析
  • 土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测技术应用
  • OOM模拟排查过程记录
  • 火山引擎大模型系列可以用来作什么
  • TDengine 快速体验(云服务方式)
  • ceph集群调整pg数量实战(上)
  • TikTok矩阵养号实战:住宅IP纯净度与设备指纹联动方案
  • 空间注意力机制
  • uniapp开发小程序vendor.js 过大
  • 使用java实现蒙特卡洛模拟风险预测功能
  • AI一周事件(2025年6月3日-6月9日)
  • WHAT - 组件库单入口打包和多入口打包
  • “液态玻璃”难解苹果AI焦虑:WWDC25背后的信任危机
  • 自动化三维扫描检测赋能汽车铸造件高效检测
  • 笔记 操作系统复习
  • 供应链管理-物流:自动驾驶分为几个级别/L0无自动化/L1驾驶辅助/L2部分自动化/L3有条件自动化/L4高度自动化/L5完全自动化
  • 云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
  • SDC命令详解:使用uniquify命令进行唯一化
  • 菲尔斯特传感器,超声波风速风向传感器助力绿色能源发展
  • idea中黄色感叹号打开
  • RPC调用三 使用代理进行服务自动注册
  • CppCon 2015 学习:RapidCheck Property based testing for C++
  • 计算机基础(一):ASCll、GB2312、GBK、Unicode、UTF-32、UTF-16、UTF-8深度解析
  • 记录chrome浏览器的一个bug
  • 零基础入门 线性代数
  • 上位机开发过程中的设计模式体会(2):观察者模式和Qt信号槽机制
  • 经典的多位gpio初始化操作
  • 基于FPGA的PID算法学习———实现PI比例控制算法
  • React Native 基础语法与核心组件:深入指南