1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/bin/bash
- # RTSP连接调试脚本
- # 用于诊断Docker环境中的RTSP连接问题
- echo "========================================="
- echo "RTSP连接诊断工具"
- echo "========================================="
- # RTSP流地址
- RTSP_URL="${1:-rtsp://218.94.57.146:40007/rtp/44010200492000000074_34020000001320000001}"
- echo "测试RTSP流: $RTSP_URL"
- # 1. 基础网络连通性测试
- echo ""
- echo "1. 基础网络连通性测试:"
- echo "----------------------------------------"
- HOST=$(echo $RTSP_URL | sed 's/rtsp:\/\///' | cut -d':' -f1)
- PORT=$(echo $RTSP_URL | sed 's/rtsp:\/\///' | cut -d':' -f2 | cut -d'/' -f1)
- echo "主机: $HOST"
- echo "端口: $PORT"
- # 测试主机可达性
- if ping -c 2 -W 2 $HOST >/dev/null 2>&1; then
- echo "✓ 主机 $HOST 可达"
- else
- echo "✗ 主机 $HOST 不可达"
- fi
- # 测试端口连通性
- if timeout 5 bash -c "</dev/tcp/$HOST/$PORT" 2>/dev/null; then
- echo "✓ 端口 $HOST:$PORT 可连接"
- else
- echo "✗ 端口 $HOST:$PORT 不可连接"
- fi
- # 2. 容器网络信息
- echo ""
- echo "2. 容器网络环境:"
- echo "----------------------------------------"
- echo "网络模式: $(if [ -f /.dockerenv ]; then echo 'Docker容器'; else echo '宿主机'; fi)"
- if [ -f /.dockerenv ]; then
- echo "容器网络接口:"
- ip route show | head -5
- echo ""
- echo "DNS配置:"
- cat /etc/resolv.conf | head -5
- fi
- # 3. 环境变量检查
- echo ""
- echo "3. 环境变量:"
- echo "----------------------------------------"
- echo "RTSP_DEBUG: ${RTSP_DEBUG:-未设置}"
- echo "USE_IP_DIRECT: ${USE_IP_DIRECT:-未设置}"
- # 4. 使用curl测试RTSP握手
- echo ""
- echo "4. RTSP握手测试:"
- echo "----------------------------------------"
- if command -v curl >/dev/null; then
- echo "使用curl测试RTSP OPTIONS请求..."
- timeout 10 curl -v --connect-timeout 5 -X OPTIONS "$RTSP_URL" 2>&1 | head -20
- else
- echo "curl命令不可用,跳过RTSP握手测试"
- fi
- # 5. 使用ffprobe测试
- echo ""
- echo "5. FFmpeg连接测试:"
- echo "----------------------------------------"
- if command -v ffprobe >/dev/null; then
- echo "使用ffprobe测试流信息获取..."
- timeout 10 ffprobe -v quiet -print_format json -show_streams \
- -rtsp_transport tcp \
- -timeout 5000000 \
- -stimeout 3000000 \
- "$RTSP_URL" 2>&1 | head -10
- else
- echo "ffprobe命令不可用,跳过FFmpeg测试"
- fi
- # 6. 网络性能测试
- echo ""
- echo "6. 网络延迟测试:"
- echo "----------------------------------------"
- if ping -c 5 -W 2 $HOST >/dev/null 2>&1; then
- ping -c 5 $HOST | tail -2
- else
- echo "无法ping通主机 $HOST"
- fi
- echo ""
- echo "========================================="
- echo "诊断完成"
- echo "========================================="
|