#!/bin/bash

fallback_mode=false   # global: survives recursive calls

preset_hls_drm() {
    FIFO="/tmp/${STREAM_NAME}_pipe"
    umask 0002

    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$RS_PID_PATH" "$STREAM_PID_PATH" "$FIFO"

    # -------------------------------
    # NEW FIFO
    # -------------------------------
    mkfifo "$FIFO" 

    # clear old logs
    : > file.txt

    # -------------------------------
    # MODE: COPY MODE (FFmpeg + RStreamer)
    # -------------------------------
    if [ "$fallback_mode" = false ]; then

        echo "Starting in COPY mode (FFmpeg + RStreamer)..."

        # FFmpeg FIRST
        ffmpeg -loglevel info -hide_banner -f mpegts \
            -i "$FIFO" \
            -map 0:v -map 0:a:2 \
            -c:v copy -c:a aac \
            -f hls -hls_list_size 6 -hls_time 2 \
            -hls_key_info_file /home/user/RIDSYSPACKAGE/riptv/live/Testing_drm/file.keyinfo \
            -hls_flags delete_segments+append_list \
            index.m3u8 \
            > /dev/null 2> file.txt &
        FFPID=$!
        echo "$FFPID" > "$STREAM_PID_PATH"

        sleep 0.5

        # RStreamer SECOND
        Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log \
            -I ip "$INPUT_URL" \
            -P analyze -i 30 -o report.txt \
            -P regulate \
            -O file - > "$FIFO" &
        RSPID=$!
        echo "$RSPID" > "$RS_PID_PATH"

        sleep 0.5
        kill -0 "$RSPID" || {
            echo "RStreamer failed to start"
            kill -9 "$FFPID"
        }

        echo "Started COPY-MODE: FF=$FFPID  RS=$RSPID"


    # -------------------------------
    # MODE: ENCODE MODE (Standalone RStreamer)
    # -------------------------------
    else    
        echo "Starting in ENCODE mode (RStreamer HLS)..."

        umask 0002
        chmod -R 0777 /home/user/RIDSYSPACKAGE/riptv/live/

        /etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log \
            -I ip "$INPUT_URL" \
            -P analyze -i 30 -o report.txt \
            -P regulate \
            -O hls --duration 2 --live 15 -p index.m3u8 index.ts \
            </dev/null > /dev/null 2>&1 2>file.txt &

        RSPID=$!
        echo "$RSPID" > "$STREAM_PID_PATH"

        chmod -R 0777 "$STREAM_PID_PATH"

        sleep 0.5

        echo "Started ENCODE-MODE: RS=$RSPID"

    fi

    echo "Started $STREAM_NAME → RS=$RSPID  FF=$FFPID (fallback_mode=$fallback_mode)"

    # -------------------------------
    # ONE-SHOT FREEZE CHECK
    # -------------------------------
    dead_start=$(date +%s)
    restart=false

    while true; do
        sleep 10

        # # If user manually kills ffmpeg → exit normally  //only if ffmpeg run in fallback mode
        # if ! kill -0 "$FFPID" 2>/dev/null; then
        #     echo "FFmpeg manually stopped → exiting without restart."
        #     return
        # fi

        # If RStreamer dies → exit normally
        if ! kill -0 "$RSPID" 2>/dev/null; then
            echo "RStreamer stopped → exiting without restart."
            return
        fi

        LINE=$(grep "frame=" file.txt | tail -1)
        frame=$(echo "$LINE" | sed -n 's/.*frame=\s*\([0-9]*\).*/\1/p')
        fps=$(echo "$LINE" | sed -n 's/.*fps=\s*\([0-9.]*\).*/\1/p')

        echo "DEBUG: frame=$frame fps=$fps"

        # If logs do NOT contain fps/frame → treat as healthy
        if [ -z "$frame" ] || [ -z "$fps" ]; then
            echo "No frame/fps found → treating as healthy → exiting check."
            break
        fi

        # Real data → healthy
        if [ "$frame" != "0" ] || [ "$fps" != "0.0" ]; then
            echo "Stream healthy → exiting check."
            break
        fi

        # Frozen (frame=0 & fps=0.0)
        if [ $(( $(date +%s) - dead_start )) -ge 10 ]; then
            echo "Frozen for 10s → restart encode mode."
            restart=true
            break
        fi
    done

    # -------------------------------
    # RESTART IF NEEDED
    # -------------------------------
    if [ "$restart" = true ]; then
        fallback_mode=true
        stop_pid "$FFPID" "FFmpeg"
        stop_pid "$RSPID" "RStreamer"
        rm -f "$FIFO" "$STREAM_PID_PATH" "$RS_PID_PATH"

        echo "Restarting in ENCODE mode..."
        preset_hls_drm
        return
    fi

    echo "Preset completed successfully → NO restart needed."
}


preset_hls() {
    FIFO="/tmp/${STREAM_NAME}_pipe"
    umask 0002

    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$RS_PID_PATH" "$STREAM_PID_PATH" "$FIFO"

    # -------------------------------
    # NEW FIFO
    # -------------------------------
    mkfifo "$FIFO" 

    # clear old logs
    : > file.txt

    # -------------------------------
    # MODE: COPY MODE (FFmpeg + RStreamer)
    # -------------------------------
    if [ "$fallback_mode" = false ]; then

        echo "Starting in COPY mode (FFmpeg + RStreamer)..."

        # FFmpeg FIRST
        ffmpeg -loglevel info -hide_banner -f mpegts \
            -i "$FIFO" \
            -map 0:v -map 0:a:2 \
            -c:v copy -c:a aac \
            -f hls -hls_list_size 6 -hls_time 2 \
            -hls_flags delete_segments+append_list \
            index.m3u8 \
            > /dev/null 2> file.txt &
        FFPID=$!
        echo "$FFPID" > "$STREAM_PID_PATH"

        sleep 0.5

        # RStreamer SECOND
        Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log \
            -I ip "$INPUT_URL" \
            -P analyze -i 30 -o report.txt \
            -P regulate \
            -O file - > "$FIFO" &
        RSPID=$!
        echo "$RSPID" > "$RS_PID_PATH"

        sleep 0.5
        kill -0 "$RSPID" || {
            echo "RStreamer failed to start"
            kill -9 "$FFPID"
        }

        echo "Started COPY-MODE: FF=$FFPID  RS=$RSPID"


    # -------------------------------
    # MODE: ENCODE MODE (Standalone RStreamer)
    # -------------------------------
    else    
        echo "Starting in ENCODE mode (RStreamer HLS)..."

        umask 0002
        chmod -R 0777 /home/user/RIDSYSPACKAGE/riptv/live/

        /etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log \
            -I ip "$INPUT_URL" \
            -P analyze -i 30 -o report.txt \
            -P regulate \
            -O hls --duration 2 --live 15 -p index.m3u8 index.ts \
            </dev/null > /dev/null 2>&1 2>file.txt &

        RSPID=$!
        echo "$RSPID" > "$STREAM_PID_PATH"

        chmod -R 0777 "$STREAM_PID_PATH"

        sleep 0.5

        echo "Started ENCODE-MODE: RS=$RSPID"

    fi

    echo "Started $STREAM_NAME → RS=$RSPID  FF=$FFPID (fallback_mode=$fallback_mode)"

    # -------------------------------
    # ONE-SHOT FREEZE CHECK
    # -------------------------------
    dead_start=$(date +%s)
    restart=false

    while true; do
        sleep 10

        # # If user manually kills ffmpeg → exit normally  //only if ffmpeg run in fallback mode
        # if ! kill -0 "$FFPID" 2>/dev/null; then
        #     echo "FFmpeg manually stopped → exiting without restart."
        #     return
        # fi

        # If RStreamer dies → exit normally
        if ! kill -0 "$RSPID" 2>/dev/null; then
            echo "RStreamer stopped → exiting without restart."
            return
        fi

        LINE=$(grep "frame=" file.txt | tail -1)
        frame=$(echo "$LINE" | sed -n 's/.*frame=\s*\([0-9]*\).*/\1/p')
        fps=$(echo "$LINE" | sed -n 's/.*fps=\s*\([0-9.]*\).*/\1/p')

        echo "DEBUG: frame=$frame fps=$fps"

        # If logs do NOT contain fps/frame → treat as healthy
        if [ -z "$frame" ] || [ -z "$fps" ]; then
            echo "No frame/fps found → treating as healthy → exiting check."
            break
        fi

        # Real data → healthy
        if [ "$frame" != "0" ] || [ "$fps" != "0.0" ]; then
            echo "Stream healthy → exiting check."
            break
        fi

        # Frozen (frame=0 & fps=0.0)
        if [ $(( $(date +%s) - dead_start )) -ge 10 ]; then
            echo "Frozen for 10s → restart encode mode."
            restart=true
            break
        fi
    done

    # -------------------------------
    # RESTART IF NEEDED
    # -------------------------------
    if [ "$restart" = true ]; then
        fallback_mode=true
        stop_pid "$FFPID" "FFmpeg"
        stop_pid "$RSPID" "RStreamer"
        rm -f "$FIFO" "$STREAM_PID_PATH" "$RS_PID_PATH"

        echo "Restarting in ENCODE mode..."
        preset_hls_drm
        return
    fi

    echo "Preset completed successfully → NO restart needed."
}

preset_udp_drm() {


    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$STREAM_PID_PATH"

/etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log -I ip -r $INPUT_URL \
 -P scrambler --ignore-scrambled --cw 0000000000000001 --partial-scrambling 7 "" \
 -P filter --pid 0x0014 --pid 0x0010 --pid 0x0001 --negate \
 -P pmt --increment-version --add-ca-descriptor "0x4b19/0x03e8" \
 -P analyze -i 30 -o report.txt \
 -O ip --ttl 64 -l $OUTPUT_INTERFACE $OUTPUT_URL \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH 

}


preset_udp() {

    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$STREAM_PID_PATH"

/etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log -I ip -r $INPUT_URL \
 -P filter --pid 0x0014 --pid 0x0010 --pid 0x0001 --negate \
 -P analyze -i 30 -o report.txt  \
 -O ip --ttl 64 -l $OUTPUT_INTERFACE $OUTPUT_URL \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH  

}


preset_mpts_udp_drm() {
/etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log -I ip -r $INPUT_URL \
 -P zap "$CH_NAME" \
 -P scrambler --ignore-scrambled --cw 0000000000000001 --partial-scrambling 7 "" \
 -P filter --pid 0x0014 --pid 0x0010 --pid 0x0001 --negate \
 -P pmt --increment-version --add-ca-descriptor "0x4b19/0x03e8" \
 -P analyze -i 30 -o report.txt \
 -O ip --ttl 64 -l $OUTPUT_INTERFACE $OUTPUT_URL \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH

}


preset_mpts_udp() {
/etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6 -v -m --synchronous-log -I ip -r $INPUT_URL \
 -P zap "$CH_NAME" \
 -P filter --pid 0x0014 --pid 0x0010 --pid 0x0001 --negate \
 -P svrename --provider "$PROVIDER" \
 -P analyze -i 30 -o report.txt  \
 -O ip --ttl 13 -l $OUTPUT_INTERFACE $OUTPUT_URL  \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH  


}



preset_mpts_hls_drm() {

    FIFO="/tmp/${STREAM_NAME}_pipe"

    umask 0002
    mkfifo "$FIFO"

    # Start RStreamer -> FIFO
        /etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6  -v -m --synchronous-log -I ip $INPUT_URL \
         -P zap "$CH_NAME" \
         -P analyze -i 30 -o report.txt  \
         -P regulate \
        -O file - > "$FIFO" &
    RSPID=$!

    # Start FFmpeg -> HLS
    ffmpeg -f mpegts -fflags +genpts+discardcorrupt+igndts -thread_queue_size 512 \
        -rw_timeout 5000000 \
        -i "$FIFO" -c copy \
        -f hls -hls_time 2 -hls_list_size 6 \
        -hls_flags +split_by_time+delete_segments+append_list \
        index.m3u8 \
        > /dev/null \
        2> file.txt &
    FFPID=$!

    #echo "$RSPID" > "$STREAM_PID_PATH"
    echo "$FFPID" > "$STREAM_PID_PATH"

    echo "Started stream $STREAM_NAME : RS=$RSPID  FF=$FFPID"
}

preset_mpts_hls() {

    FIFO="/tmp/${STREAM_NAME}_pipe"

    umask 0002
    mkfifo "$FIFO"

    # Start RStreamer -> FIFO
        /etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6  -v -m --synchronous-log -I ip $INPUT_URL \
         -P zap "$CH_NAME" \
         -P analyze -i 30 -o report.txt  \
         -P regulate \
        -O file - > "$FIFO" &
    RSPID=$!

    # Start FFmpeg -> HLS
    ffmpeg -f mpegts -fflags +genpts+discardcorrupt+igndts -thread_queue_size 512 \
        -rw_timeout 5000000 \
        -i "$FIFO" -c copy \
        -f hls -hls_time 2 -hls_list_size 6 \
        -hls_flags +split_by_time+delete_segments+append_list \
        index.m3u8 \
        > /dev/null \
        2> file.txt &
    FFPID=$!

    #echo "$RSPID" > "$STREAM_PID_PATH"
    echo "$FFPID" > "$STREAM_PID_PATH"

    echo "Started stream $STREAM_NAME : RS=$RSPID  FF=$FFPID"

}

preset_hls_to_udp_drm() {
    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$STREAM_PID_PATH" 

/etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6  -v -m --synchronous-log -I hls $INPUT_URL \
 -P svrename -i 10 \
 -P scrambler --ignore-scrambled --cw 0000000000000001 --partial-scrambling 7 "" \
 -P filter --pid 0x0014 --pid 0x0010 --pid 0x0001 --negate \
 -P pmt --increment-version --add-ca-descriptor "0x4b19/0x03e8" \
 -P analyze -i 30 -o report.txt \
 -O ip --ttl 64 -l $OUTPUT_INTERFACE $OUTPUT_URL \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH  

}


preset_hls_to_udp() {

    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$STREAM_PID_PATH" 

/etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6  -v -m --synchronous-log -I hls $INPUT_URL \
 -P filter --pid 0x0014 --pid 0x0010 --pid 0x0001 --negate \
 -P analyze -i 30 -o report.txt  \
 -O ip --ttl 64 -l $OUTPUT_INTERFACE $OUTPUT_URL  \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH 

}

preset_hls_to_hls() {

    FIFO="/tmp/${STREAM_NAME}_pipe"

    umask 0002
    mkfifo "$FIFO"

    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$STREAM_PID_PATH" 

    # Start RStreamer -> FIFO
        /etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6  -v -m --synchronous-log -I hls $INPUT_URL \
         -P analyze -i 30 -o report.txt  \
         -P regulate \
        -O file - > "$FIFO" &
    RSPID=$!

    # Start FFmpeg -> HLS
    ffmpeg -f mpegts -fflags +genpts+discardcorrupt+igndts -thread_queue_size 512 \
        -rw_timeout 5000000 \
        -i "$FIFO" -c copy \
        -f hls -hls_time 2 -hls_list_size 6 \
        -hls_flags +split_by_time+delete_segments+append_list \
        index.m3u8 \
        > /dev/null \
        2> file.txt &
    FFPID=$!

    #echo "$RSPID" > "$STREAM_PID_PATH"
    echo "$FFPID" > "$STREAM_PID_PATH"

    echo "Started stream $STREAM_NAME : RS=$RSPID  FF=$FFPID"

}

preset_hls_to_hls_drm() {

    FIFO="/tmp/${STREAM_NAME}_pipe"

    umask 0002
    mkfifo "$FIFO"

    # -------------------------------
    # CLEAN & KILL HELPER
    # -------------------------------
    stop_pid() {
        local pid="$1"
        local name="$2"

        [ -z "$pid" ] && return
        if ! kill -0 "$pid" 2>/dev/null; then return; fi

        kill "$pid" 2>/dev/null || true

        for i in {1..5}; do
            kill -0 "$pid" 2>/dev/null || return
            sleep 1
        done

        kill -9 "$pid" 2>/dev/null || true
    }

    # -------------------------------
    # KILL OLD PIPELINE
    # -------------------------------
    for pid in $(pgrep -f "$INPUT_URL" 2>/dev/null); do
        stop_pid "$pid" "old pipeline"
    done

    rm -f "$STREAM_PID_PATH" 
    
    # Start RStreamer -> FIFO
        /etc/systemd/ridsys_engine/Ridsys-RStreamer_Engine-1.6  -v -m --synchronous-log -I hls $INPUT_URL \
         -P analyze -i 30 -o report.txt  \
         -P regulate \
        -O file - > "$FIFO" &
    RSPID=$!

    # Start FFmpeg -> HLS
    ffmpeg -f mpegts -fflags +genpts+discardcorrupt+igndts -thread_queue_size 512 \
        -rw_timeout 5000000 \
        -i "$FIFO" -c copy \
        -f hls -hls_time 2 -hls_list_size 6 \
        -hls_flags +split_by_time+delete_segments+append_list \
        index.m3u8 \
        > /dev/null \
        2> file.txt &
    FFPID=$!

    #echo "$RSPID" > "$STREAM_PID_PATH"
    echo "$FFPID" > "$STREAM_PID_PATH"

    echo "Started stream $STREAM_NAME : RS=$RSPID  FF=$FFPID"

}



preset_hls_360p() {

if [ ! -d playlist ]; then
  mkdir playlist
fi

if [ ! -d playlist/360p ]; then
  mkdir playlist/360p
fi

ffmpeg -i "$INPUT_URL?overrun_nonfatal=1&fifo_size=2000000" \
 -r 25 -g 25 -sc_threshold 0 -aspect 16:9 \
  -s:v 640x360 -c:v libx264 -preset superfast -crf 26 -b:v 400k \
  -c:a aac -b:a 128k -ac 2 \
  -threads 4 -f hls -hls_time 3 -hls_wrap 15 \
  "playlist/360p/manifest.m3u8" \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH


}


preset_hls_720p() {

if [ ! -d playlist ]; then
  mkdir playlist
fi


if [ ! -d playlist/720p ]; then
  mkdir playlist/720p
fi

ffmpeg -i "$INPUT_URL?overrun_nonfatal=1&fifo_size=2000000" \
 -r 25 -g 25 -sc_threshold 0 -aspect 16:9 \
  -s:v 720x576 -c:v libx264 -preset superfast -crf 26 -b:v 400k \
  -c:a aac -b:a 128k -ac 2 \
  -threads 4 -f hls -hls_time 3 -hls_wrap 15 \
  "playlist/720p/manifest.m3u8" \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH

}


preset_hls_1080p() {

if [ ! -d playlist ]; then
  mkdir playlist
fi


if [ ! -d playlist/1080p ]; then
  mkdir playlist/1080p
fi

ffmpeg -i "$INPUT_URL?overrun_nonfatal=1&fifo_size=2000000" \
 -r 25 -g 25 -sc_threshold 0 -aspect 16:9 \
  -s:v 1920x1080 -c:v libx264 -preset superfast -crf 26 -b:v 400k \
  -c:a aac -b:a 128k -ac 2 \
  -threads 4 -f hls -hls_time 3 -hls_wrap 15 \
  "playlist/1080p/manifest.m3u8" \
</dev/null > /dev/null 2>&1 2>file.txt & echo $! > $STREAM_PID_PATH

}


call_function() {
local func_name="$1"
if declare -f "$func_name" > /dev/null; then
$func_name
else
echo "Function $func_name not found"
fi

}

call_function "$FUNCTION_TO_CALL"      
