rtsp-debug.sh 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. # RTSP连接调试脚本
  3. # 用于诊断Docker环境中的RTSP连接问题
  4. echo "========================================="
  5. echo "RTSP连接诊断工具"
  6. echo "========================================="
  7. # RTSP流地址
  8. RTSP_URL="${1:-rtsp://218.94.57.146:40007/rtp/44010200492000000074_34020000001320000001}"
  9. echo "测试RTSP流: $RTSP_URL"
  10. # 1. 基础网络连通性测试
  11. echo ""
  12. echo "1. 基础网络连通性测试:"
  13. echo "----------------------------------------"
  14. HOST=$(echo $RTSP_URL | sed 's/rtsp:\/\///' | cut -d':' -f1)
  15. PORT=$(echo $RTSP_URL | sed 's/rtsp:\/\///' | cut -d':' -f2 | cut -d'/' -f1)
  16. echo "主机: $HOST"
  17. echo "端口: $PORT"
  18. # 测试主机可达性
  19. if ping -c 2 -W 2 $HOST >/dev/null 2>&1; then
  20. echo "✓ 主机 $HOST 可达"
  21. else
  22. echo "✗ 主机 $HOST 不可达"
  23. fi
  24. # 测试端口连通性
  25. if timeout 5 bash -c "</dev/tcp/$HOST/$PORT" 2>/dev/null; then
  26. echo "✓ 端口 $HOST:$PORT 可连接"
  27. else
  28. echo "✗ 端口 $HOST:$PORT 不可连接"
  29. fi
  30. # 2. 容器网络信息
  31. echo ""
  32. echo "2. 容器网络环境:"
  33. echo "----------------------------------------"
  34. echo "网络模式: $(if [ -f /.dockerenv ]; then echo 'Docker容器'; else echo '宿主机'; fi)"
  35. if [ -f /.dockerenv ]; then
  36. echo "容器网络接口:"
  37. ip route show | head -5
  38. echo ""
  39. echo "DNS配置:"
  40. cat /etc/resolv.conf | head -5
  41. fi
  42. # 3. 环境变量检查
  43. echo ""
  44. echo "3. 环境变量:"
  45. echo "----------------------------------------"
  46. echo "RTSP_DEBUG: ${RTSP_DEBUG:-未设置}"
  47. echo "USE_IP_DIRECT: ${USE_IP_DIRECT:-未设置}"
  48. # 4. 使用curl测试RTSP握手
  49. echo ""
  50. echo "4. RTSP握手测试:"
  51. echo "----------------------------------------"
  52. if command -v curl >/dev/null; then
  53. echo "使用curl测试RTSP OPTIONS请求..."
  54. timeout 10 curl -v --connect-timeout 5 -X OPTIONS "$RTSP_URL" 2>&1 | head -20
  55. else
  56. echo "curl命令不可用,跳过RTSP握手测试"
  57. fi
  58. # 5. 使用ffprobe测试
  59. echo ""
  60. echo "5. FFmpeg连接测试:"
  61. echo "----------------------------------------"
  62. if command -v ffprobe >/dev/null; then
  63. echo "使用ffprobe测试流信息获取..."
  64. timeout 10 ffprobe -v quiet -print_format json -show_streams \
  65. -rtsp_transport tcp \
  66. -timeout 5000000 \
  67. -stimeout 3000000 \
  68. "$RTSP_URL" 2>&1 | head -10
  69. else
  70. echo "ffprobe命令不可用,跳过FFmpeg测试"
  71. fi
  72. # 6. 网络性能测试
  73. echo ""
  74. echo "6. 网络延迟测试:"
  75. echo "----------------------------------------"
  76. if ping -c 5 -W 2 $HOST >/dev/null 2>&1; then
  77. ping -c 5 $HOST | tail -2
  78. else
  79. echo "无法ping通主机 $HOST"
  80. fi
  81. echo ""
  82. echo "========================================="
  83. echo "诊断完成"
  84. echo "========================================="