AWS WebRTC:通过shell实现多进程启动viewer
前面总结了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/bashset -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[@]}"; dosts_curl_args+=( --data-urlencode "sn[]=$sn" )
donests_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[@]}"; dofor i in $(seq 1 "$VIEWERS_PER_CHANNEL"); doecho "$channel $i" >> "$TASK_FILE"done
done# ==== 启动 viewer 的函数 ====