前面总结了aws webrtc sdk-c项目中多进程启动master的shell脚本,具体参考:https://blog.csdn.net/zhang_jiamin/article/details/148616899
这次总结一下多进程启动viewer的shell脚本,以及过程中遇到的问题和解决方法。
实现说明:
1、获取 sid 和 uid(用于认证)
2、获取 ak/sk/token(多个 SN 共用一组密钥)
3、为每个 channel 启动 5 个 viewer,启动命令包含日志文件
4、使用 GNU parallel 控制并发(替代 wait + 手动计数)
5、所有错误集中到 error.log
首先,需要安装parallel,请参考:https://blog.csdn.net/zhang_jiamin/article/details/148815820
主要模块代码实现:
#!/bin/bash
set -euo pipefail
# ==== 登录获取 sid uid ====
login_response=$(curl -ks "$LOGIN_URL" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "GG-Pid: xxxxxxx" \
-H "GG-Sign: xxxxxxxxxxxxxx" \
-H "GG-Imei: xxxxxxxxxxxxxxx" \
--data-urlencode "countryAbbr=CN" \
--data-urlencode "countryCode=86" \
--data-urlencode "email=${EMAIL}" \
--data-urlencode "password=${PASSWORD}" \
--data-urlencode "region=${REGION}" \
--data-urlencode "type=1"
)
sid=$(echo "$login_response" | jq -r '.data.sid')
uid=$(echo "$login_response" | jq -r '.data.uid')
# ==== 获取 STS 密钥 ====
sts_curl_args=(
-k -s "$STS_URL"
-H "Content-Type: application/x-www-form-urlencoded"
-H "GG-Sid: $sid"
-H "GG-Uid: $uid"
-H "GG-Pid: xxxxxxx"
-H "GG-Sign: xxxxxxxxx"
-H "GG-Imei: xxxxxxxxxxxx"
--data-urlencode "refresh=true"
)
for sn in "${SNS[@]}"; do
sts_curl_args+=( --data-urlencode "sn[]=$sn" )
done
sts_response=$(curl "${sts_curl_args[@]}")
ak=$(echo "$sts_response" | jq -r '.data.ak')
sk=$(echo "$sts_response" | jq -r '.data.sk')
token=$(echo "$sts_response" | jq -r '.data.token')
# ==== 构造任务列表 ====
TASK_FILE="${BASE_DIR}/viewer_tasks.txt"
: > "$TASK_FILE"
for channel in "${CHANNELS[@]}"; do
for i in $(seq 1 "$VIEWERS_PER_CHANNEL"); do
echo "$channel $i" >> "$TASK_FILE"
done
done
# ==== 启动 viewer 的函数 ====