#!/bin/bash # Mac 摄像头推流到 Cloudflare Stream # 使用方法: ./scripts/stream-camera.sh SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CONFIG_FILE="$SCRIPT_DIR/../config/stream.env" # 检查配置文件 if [ ! -f "$CONFIG_FILE" ]; then echo "错误: 配置文件不存在" echo "请复制 config/stream.env.example 为 config/stream.env 并填写配置" exit 1 fi # 加载配置 source "$CONFIG_FILE" # 默认参数 VIDEO_DEVICE="${VIDEO_DEVICE:-0}" AUDIO_DEVICE="${AUDIO_DEVICE:-0}" RESOLUTION="${RESOLUTION:-1280x720}" FPS="${FPS:-30}" BITRATE="${BITRATE:-2500k}" # 检查必要配置 if [ -z "$RTMP_URL" ] || [ -z "$STREAM_KEY" ]; then echo "错误: 请在 config/stream.env 中配置 RTMP_URL 和 STREAM_KEY" echo "" echo "获取方式:" echo "1. 打开 tg-live-game-web 前端" echo "2. 进入 Cloudflare Stream -> 直播管理" echo "3. 创建直播,获取推流地址和密钥" exit 1 fi # 检查 ffmpeg if ! command -v ffmpeg &> /dev/null; then echo "错误: ffmpeg 未安装" echo "请运行: brew install ffmpeg" exit 1 fi echo "======================================" echo " Cloudflare Stream 摄像头推流" echo "======================================" echo "" echo "配置信息:" echo " 视频设备: $VIDEO_DEVICE" echo " 音频设备: $AUDIO_DEVICE" echo " 分辨率: $RESOLUTION" echo " 帧率: $FPS fps" echo " 码率: $BITRATE" echo " 推流地址: $RTMP_URL" echo "" echo "按 Ctrl+C 停止推流" echo "======================================" echo "" # 开始推流 ffmpeg -f avfoundation \ -framerate "$FPS" \ -video_size "$RESOLUTION" \ -i "$VIDEO_DEVICE:$AUDIO_DEVICE" \ -c:v libx264 \ -preset veryfast \ -maxrate "$BITRATE" \ -bufsize 5000k \ -pix_fmt yuv420p \ -g 60 \ -c:a aac \ -b:a 128k \ -ar 44100 \ -f flv \ "${RTMP_URL}/${STREAM_KEY}"