这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 42 additions & 92 deletions scripts/termux-media-player
Original file line number Diff line number Diff line change
@@ -1,103 +1,53 @@
#!/data/data/com.termux/files/usr/bin/bash
set -e -u
set -e

SCRIPTNAME=termux-media-player

show_usage () {
echo "Usage: $SCRIPTNAME cmd [args]"
echo;
echo -e "help Shows this help"
echo -e "info Displays current playback information"
echo -e "play Resumes playback if paused"
echo -e "play <file> Plays specified media file"
echo -e "pause Pauses playback"
echo -e "stop Quits playback"
echo;
echo "--NOTE--"
echo "To playback media files they must reside in a publicly"
echo "accessible directory, such as /storage."
echo "Otherwise, they will fail to load!"
echo
echo "**Run 'termux-setup-storage' before using!**"
echo;
echo "help Shows this help"
echo "info Displays current playback information"
echo "play Resumes playback if paused"
echo "play <file> Plays specified media file"
echo "pause Pauses playback"
echo "stop Quits playback"
}

if [ $# = 0 ]; then
show_usage
exit 1
fi

# Params we're sending to MediaPlayerAPI
PARAMS=""

play_media () {
if [ $# -gt 1 ]; then
echo "Error! play only takes one argument which is the name of file to play"
exit 1
# If no arguments, we should resume the last played media file if it exists
elif [ $# -eq 0 ]; then
PARAMS="-a resume"
else
# Make sure we actually receive a file
if [ ! -f $1 ]; then
echo "Error: Not a file!"
exit 1
else
local file=$(readlink -q -f $1)
local PATTERN='.3gp|.flac|.mkv|.mp3|.ogg|.wav$'

# Ensure that file is a supported media file
if ! ls $file | grep -E $PATTERN -q; then
echo "Error: File is not a valid media file!"
exit 1
else
PARAMS="-a play --es file $file"
fi
fi
fi
}

media_info () {
if [ $# -ne 0 ]; then
echo "Error! info takes no arguments!"
exit 1
fi
PARAMS="-a info"
}

pause_media () {
if [ $# -ne 0 ]; then
echo "Error! pause takes no arguments!"
exit 1
fi
PARAMS="-a pause"
}

stop_media () {
if [ $# -ne 0 ]; then
echo "Error! stop takes no arguments!"
exit 1
fi
PARAMS="-a stop"
main() {
/data/data/com.termux/files/usr/libexec/termux-api MediaPlayer "$@"
}

# Get command and command args
while [ $# -gt 0 ]; do
# MediaPlayer command
cmd=$1

# Command arguments
arg_array=( $@ );
cmd_args=${arg_array[@]:1}

# Find correct command and execute w/ args
case $cmd in
"play" ) play_media $cmd_args; break ;;
"info" ) media_info $cmd_args; break ;;
"pause" ) pause_media $cmd_args; break ;;
"stop" ) stop_media $cmd_args; break ;;
"help" | * ) echo "$SCRIPTNAME: Invalid cmd: $cmd"; show_usage; exit 1 ;;
esac
done

/data/data/com.termux/files/usr/libexec/termux-api MediaPlayer $PARAMS
case "$1" in
"play" )
if [ $# -gt 2 ]; then
echo "Error! $SCRIPTNAME can only play one file at a time!"
exit 1
elif [ $# -gt 1 ]; then
if [ ! -f "$2" ]; then
echo "Error: '$2' is not a file!"
exit 1
else
main -a play --es file "$(realpath "$2")"
fi
else
main -a resume
fi
;;
"info" | "pause" | "stop" )
if [ $# -gt 1 ]; then
echo "Error! '$1' takes no arguments!"
exit 1
else
main -a "$1"
fi
;;
"help" | "" )
show_usage
;;
* )
echo "$SCRIPTNAME: Invalid cmd: '$1'"
show_usage
exit 1
;;
esac