[ffmpeg] 简单的文件转udp-ts流发送脚本

简单的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 &
posted on 2025-12-02 09:57  风惊庭前叶  阅读(0)  评论(0)    收藏  举报