#!/bin/bash # SHOW: STREAM FILES # Streams files as indexed in show-playlist.m3u (which is based on show-audio_queud) # Includes and Declarations (global variables, formatting, and functions) source "${APPLICATION_ROOT}/scripts/system/system-functions" source "${APPLICATION_ROOT}/scripts/system/system-declarations" # Get active config name, construct path to streamable config file (for validation) CURRENTLY_ACTIVE_CONFIG_NAME=$(<"$CONFIG_FILE_IDENTIFIER_PATH") STREAMABLE_CONFIG_FILE_PATH="$CONFIG_DIRECTORY/config-$CURRENTLY_ACTIVE_CONFIG_NAME.json" # Check if config file exists if [[ -f "$STREAMABLE_CONFIG_FILE_PATH" ]]; # If exists then # Parse JSON config file for each variable v1='main_host' MAIN_HOST=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v1//p" $STREAMABLE_CONFIG_FILE_PATH)) v2='main_port' MAIN_PORT=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v2//p" $STREAMABLE_CONFIG_FILE_PATH)) v3='main_user' MAIN_USER=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v3//p" $STREAMABLE_CONFIG_FILE_PATH)) v4='main_password' MAIN_PASSWORD=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v4//p" $STREAMABLE_CONFIG_FILE_PATH)) v5='main_mount' MAIN_MOUNT=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v5//p" $STREAMABLE_CONFIG_FILE_PATH)) v6='playlist_url' PLAYLIST_URL=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v6//p" $STREAMABLE_CONFIG_FILE_PATH)) v7='randomize_playlist_files' RANDOMIZE_PLAYLIST_FILES=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v7//p" $STREAMABLE_CONFIG_FILE_PATH)) v8='hardware_audio_frame_size' HARDWARE_AUDIO_FRAME_SIZE=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$v8//p" $STREAMABLE_CONFIG_FILE_PATH)) # Ensure all configuration files are not blank if [ -z "${MAIN_HOST}" ] || [ -z "${MAIN_PORT}" ] || [ -z "${MAIN_USER}" ] || [ -z "${MAIN_PASSWORD}" ] || [ -z "${MAIN_MOUNT}" ] || [ -z "${PLAYLIST_URL}" ] || [ -z "${RANDOMIZE_PLAYLIST_FILES}" ] || [ -z "${HARDWARE_AUDIO_FRAME_SIZE}" ] then # Fault if config variable is blank printf "${COLOR_RED}[F] Stream Files (to Main): Streaming failed. Check your playlist, files, and/or settings.${COLOR_DEFAULT}\n\n"; else printf "${COLOR_GREEN}[F] Stream Files (to Main):${COLOR_DEFAULT}\n"; printf "\n" printf "\n" printf "${COLOR_LIGHT_MAGENTA}${FONT_BOLD}[STARTING LIQUIDSOAP]${FONT_DEFAULT}${COLOR_DEFAULT}\n" printf "${COLOR_MAGENTA}" # Launch Liquidsoap using variables # liquidsoap 'set("frame.audio.size",'$HARDWARE_AUDIO_FRAME_SIZE'); output.icecast(%mp3,host="'$MAIN_HOST'",port='$MAIN_PORT',user="'$MAIN_USER'",password="'$MAIN_PASSWORD'",mount="'$MAIN_MOUNT'",mksafe(playlist.once(random='$MAIN_RANDOMIZE_PLAYLIST_FILES',on_done=shutdown,"'$PLAYLIST_URL'")))'; liquidsoap ' set("frame.audio.size",'$HARDWARE_AUDIO_FRAME_SIZE'); stream_master_source = output.icecast( %mp3, host="'$MAIN_HOST'", port='$MAIN_PORT', user="'$MAIN_USER'", password="'$MAIN_PASSWORD'", mount="'$MAIN_MOUNT'", fallible=true, on_stop=shutdown, playlist.once( random='$RANDOMIZE_PLAYLIST_FILES', "'$PLAYLIST_URL'" ) ) stream_master_source ' printf ${COLOR_DEFAULT} printf "${COLOR_LIGHT_MAGENTA}${FONT_BOLD}[EXITING LIQUIDSOAP]${FONT_DEFAULT}${COLOR_DEFAULT}\n" printf "\n" printf "\n" printf "\n" fi # If no config file exists else error_message "[F] Stream Files (to Main): No config file specified. To stream, please assign a config." echo "" fi