简单的ffmpeg将文件以mpeg-ts形式循环发送的脚本
#!/bin/bash
# 检查参数数量
if [ $# -lt 2 ]; then
echo "错误:缺少必要的参数!" >&2
echo "用法: $0 <视频文件> <端口号> [IP地址]" >&2
echo "示例: $0 video.mp4 1234" >&2
exit 1
fi
FILE=$1
PORT=$2
IP=${3:127.0.0.1} # 第3个参数可选,默认使用127.0.0.1
# 检查文件是否存在
if [ ! -f "$FILE" ]; then
echo "错误:文件 '$FILE' 不存在!" >&2
exit 1
fi
# 检查文件是否可读
if [ ! -r "$FILE" ]; then
echo "错误:文件 '$FILE' 不可读!" >&2
exit 1
fi
# 验证端口号是否为有效数字
if ! [[ "$PORT" =~ ^[0-9]+$ ]]; then
echo "错误:端口号 '$PORT' 必须是数字!" >&2
exit 1
fi
# 验证端口号范围(1-65535)
if [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
echo "错误:端口号必须在 1-65535 范围内!" >&2
exit 1
fi
# 检查端口是否已被占用(可选)
if command -v ss &> /dev/null; then
if ss -tuln | grep -q ":$PORT "; then
echo "警告:端口 $PORT 可能已被占用!" >&2
fi
fi
echo "开始流媒体传输..."
echo "文件: $FILE"
echo "目标: $IP:$PORT"
echo "日志: /tmp/ffmpeg_stream_$PORT.log"
echo "----------------------"
# 使用nohup后台运行,并保存PID和日志
nohup ffmpeg -stream_loop -1 -re -i "$FILE" -c copy -f mpegts -pkt_size 1316 udp://$IP:$PORT > "/tmp/ffmpeg_stream_$PORT.log" 2>&1 &
浙公网安备 33010602011771号