stream-camera.sh 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/bin/bash
  2. # Mac 摄像头推流到 Cloudflare Stream
  3. # 使用方法: ./scripts/stream-camera.sh
  4. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  5. CONFIG_FILE="$SCRIPT_DIR/../config/stream.env"
  6. # 检查配置文件
  7. if [ ! -f "$CONFIG_FILE" ]; then
  8. echo "错误: 配置文件不存在"
  9. echo "请复制 config/stream.env.example 为 config/stream.env 并填写配置"
  10. exit 1
  11. fi
  12. # 加载配置
  13. source "$CONFIG_FILE"
  14. # 默认参数
  15. VIDEO_DEVICE="${VIDEO_DEVICE:-0}"
  16. AUDIO_DEVICE="${AUDIO_DEVICE:-0}"
  17. RESOLUTION="${RESOLUTION:-1280x720}"
  18. FPS="${FPS:-30}"
  19. BITRATE="${BITRATE:-2500k}"
  20. # 检查必要配置
  21. if [ -z "$RTMP_URL" ] || [ -z "$STREAM_KEY" ]; then
  22. echo "错误: 请在 config/stream.env 中配置 RTMP_URL 和 STREAM_KEY"
  23. echo ""
  24. echo "获取方式:"
  25. echo "1. 打开 tg-live-game-web 前端"
  26. echo "2. 进入 Cloudflare Stream -> 直播管理"
  27. echo "3. 创建直播,获取推流地址和密钥"
  28. exit 1
  29. fi
  30. # 检查 ffmpeg
  31. if ! command -v ffmpeg &> /dev/null; then
  32. echo "错误: ffmpeg 未安装"
  33. echo "请运行: brew install ffmpeg"
  34. exit 1
  35. fi
  36. echo "======================================"
  37. echo " Cloudflare Stream 摄像头推流"
  38. echo "======================================"
  39. echo ""
  40. echo "配置信息:"
  41. echo " 视频设备: $VIDEO_DEVICE"
  42. echo " 音频设备: $AUDIO_DEVICE"
  43. echo " 分辨率: $RESOLUTION"
  44. echo " 帧率: $FPS fps"
  45. echo " 码率: $BITRATE"
  46. echo " 推流地址: $RTMP_URL"
  47. echo ""
  48. echo "按 Ctrl+C 停止推流"
  49. echo "======================================"
  50. echo ""
  51. # 开始推流
  52. ffmpeg -f avfoundation \
  53. -framerate "$FPS" \
  54. -video_size "$RESOLUTION" \
  55. -i "$VIDEO_DEVICE:$AUDIO_DEVICE" \
  56. -c:v libx264 \
  57. -preset veryfast \
  58. -maxrate "$BITRATE" \
  59. -bufsize 5000k \
  60. -pix_fmt yuv420p \
  61. -g 60 \
  62. -c:a aac \
  63. -b:a 128k \
  64. -ar 44100 \
  65. -f flv \
  66. "${RTMP_URL}/${STREAM_KEY}"