diff options
-rwxr-xr-x | tools/ipcam_rtsp2hls.sh | 137 |
1 files changed, 75 insertions, 62 deletions
diff --git a/tools/ipcam_rtsp2hls.sh b/tools/ipcam_rtsp2hls.sh index 64e9121..324a17c 100755 --- a/tools/ipcam_rtsp2hls.sh +++ b/tools/ipcam_rtsp2hls.sh @@ -11,76 +11,83 @@ DEBUG=0 CHANNEL=1 FORCE_UDP=0 FORCE_TCP=0 +CUSTOM_PATH= die() { - echo >&2 "error: $@" - exit 1 + echo >&2 "error: $@" + exit 1 } usage() { - cat <<EOF + cat <<EOF usage: $PROGNAME [OPTIONS] COMMAND Options: - --ip camera IP - --port RTSP port (default: 554) - --name camera name (chunks will be stored under $OUTDIR/{name}/) - --user - --password - --debug - --force-tcp - --force-udp - --channel 1|2 + --ip camera IP + --port RTSP port (default: 554) + --name camera name (chunks will be stored under $OUTDIR/{name}/) + --user + --password + --debug + --force-tcp + --force-udp + --channel 1|2 + --custom-path PATH EOF - exit + exit } validate_channel() { - local c="$1" - case "$c" in - 1|2) - : - ;; - *) - die "Invalid channel" - ;; - esac + local c="$1" + case "$c" in + 1|2) + : + ;; + *) + die "Invalid channel" + ;; + esac } [ -z "$1" ] && usage while [[ $# -gt 0 ]]; do - case "$1" in - --ip|--port|--name|--user|--password) - _var=${1:2} - _var=${_var^^} - printf -v "$_var" '%s' "$2" - shift - ;; - - --debug) - DEBUG=1 - ;; - - --force-tcp) - FORCE_TCP=1 - ;; - - --force-udp) - FORCE_UDP=1 - ;; - - --channel) - CHANNEL="$2" - shift - ;; - - *) - die "Unrecognized argument: $1" - ;; - esac - shift + case "$1" in + --ip|--port|--name|--user|--password) + _var=${1:2} + _var=${_var^^} + printf -v "$_var" '%s' "$2" + shift + ;; + + --debug) + DEBUG=1 + ;; + + --force-tcp) + FORCE_TCP=1 + ;; + + --force-udp) + FORCE_UDP=1 + ;; + + --channel) + CHANNEL="$2" + shift + ;; + + --custom-path) + CUSTOM_PATH="$2" + shift + ;; + + *) + die "Unrecognized argument: $1" + ;; + esac + shift done [ -z "$IP" ] && die "You must specify camera IP address (--ip)." @@ -91,24 +98,30 @@ done validate_channel "$CHANNEL" if [ ! -d "${OUTDIR}/${NAME}" ]; then - mkdir "${OUTDIR}/${NAME}" || die "Failed to create ${OUTDIR}/${NAME}!" + mkdir "${OUTDIR}/${NAME}" || die "Failed to create ${OUTDIR}/${NAME}!" fi args= if [ "$DEBUG" = "1" ]; then - args="-v info" + args="-v info" else - args="-nostats -loglevel error" + args="-nostats -loglevel error" fi if [ "$FORCE_TCP" = "1" ]; then - args="$args -rtsp_transport tcp" + args="$args -rtsp_transport tcp" elif [ "$FORCE_UDP" = "1" ]; then - args="$args -rtsp_transport udp" + args="$args -rtsp_transport udp" fi -ffmpeg $args -i rtsp://${USER}:${PASSWORD}@${IP}:${PORT}/Streaming/Channels/${CHANNEL} \ - -c:v copy -c:a copy -bufsize 1835k \ - -pix_fmt yuv420p \ - -flags -global_header -hls_time 2 -hls_list_size 3 -hls_flags delete_segments \ - ${OUTDIR}/${NAME}/live.m3u8 +if [ -z "$CUSTOM_PATH" ]; then + PATH="/Streaming/Channels/${CHANNEL}" +else + PATH="$CUSTOM_PATH" +fi + +ffmpeg $args -i "rtsp://${USER}:${PASSWORD}@${IP}:${PORT}${CUSTOM_PATH}" \ + -c:v copy -c:a copy -bufsize 1835k \ + -pix_fmt yuv420p \ + -flags -global_header -hls_time 2 -hls_list_size 3 -hls_flags delete_segments \ + ${OUTDIR}/${NAME}/live.m3u8 |