#!/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/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 "========================================="