svdztn
发表于 2016-10-28 14:03:15
本帖最后由 svdztn 于 2016-10-28 15:13 编辑
修改版alarm_start与alarm_stop
增加守护功能,若mplayer意外退出,会自行重启,每1分钟检查一次。运行alarm_stop后,关闭mplayer,同时关闭守护。
alarm_start.sh:
task="null"
testflag=0 #Play/Test#
abort=0
##-----------------Read Para-----------------##
while getopts "t" arg
do
case $arg in
t)
testflag=1
;;
?)
echo "unkonw argument"
exit 1
;;
esac
done
##----------------- Play -----------------##
if [ $testflag -eq 0 ];then
##PLAY##
/volume1/@appstore/mplayer/bin/mplayer rtmp://................ </dev/null >/dev/null 2>&1 &
##Search schedule##
schedule=$(cat /etc/crontab | grep alarm_start | grep -v grep)
##schedule not found##
if [ -z "$schedule" ];then
##Bakup crontab##
cp -f /etc/crontab /etc/crontab.bak
##Write crontab##
task="/volume1/@appstore/sh/alarm_start.sh"
echo "* * * * * root $task -t">>/etc/crontab
##Reload config##
crondpid=$(ps | grep crond |grep -v grep | awk 'NR==1{print $1}')
kill $crondpid
fi
exit 0
fi
##----------------- Test -----------------##
if [ $testflag -eq 1 ];then
stillRunning=$(ps | grep mplayer | grep -v grep)
if [ -z "$stillRunning" ];then
task="/volume1/@appstore/sh/alarm_start.sh"
`$task`
fi
exit 0
fi
##----------------- Error -----------------##
exit 1
alarm_stop.sh:
##----------------- Schedule -----------------##
##Search schedule##
schedule=$(cat /etc/crontab | grep alarm_start | grep -v grep)
##schedule found##
if [ -n "$schedule" ];then
##Del all mpalarm schedule##
task="/volume1/@appstore/sh/alarm_start.sh"
sed -i "s#$task#dEltAsktEmp#" /etc/crontab
sed -i '/dEltAsktEmp/d' /etc/crontab
##Reload config##
crondpid=$(ps | grep crond |grep -v grep | awk 'NR==1{print $1}')
kill $crondpid
fi
##----------------- Kill Process -----------------##
NAME=$(ps | grep mplayer |grep -v grep | awk 'NR==1{print $1}')
kill $NAME
exit 0
svdztn
发表于 2016-10-28 14:46:53
说说播放器的随机策略
听歌喜欢将很多歌加入播放列表,然后使用随机播放。但很多播放器的随机策略不好,有些是经常重复播某些歌,但另一些又一直播不到;有些是列表循环播放过一轮后,第二轮的顺序和前一轮一模一样。
查看了一下mplayer处理播放列表部分的代码,它的做法是,随机播放时,每播放一首歌时,都会把这首歌做一个标记;当本首歌播放完后,再从播放列表中未做标记的歌中随机选取一首来播放,如此循环;当检测到所有歌全都做了标记时,就代表播放列表已全部播放,此时再清除所有标记,开始新一轮的循环。
这样做就避免了前面说的两个问题,但我在使用中,又遇到了另一个问题:每次运行mplayer听歌时,不会记住之前已播放的标记,也就是每次重新打开播放器时,列表中已播放的标记都是空的,所以还是会经常重复听到前一次播放的歌。
闲来无事,强迫症大发作,尝试修改了一下mplayer播放列表处理部分的代码,将播放列表的数据写入到外部文件中,当每次做已播放标记时,同步修改外部文件中的相应标记。这样,每次播放器重新启动时,先从外部保存的播放列表文件中读取相关数据,就可以从上次退出的位置继续随机播放了。
代码见附件。
hzjnet
发表于 2016-11-11 14:51:14
本帖最后由 hzjnet 于 2016-11-15 20:00 编辑
帅能留个IM或者其它的联系吗?我的QQ和维信都是15640872。好 谢谢楼主 ,kernel和mod都编译好了继续试试32位的
hzjnet
发表于 2016-11-11 15:03:06
谢谢作者能留个联系吗?我的Q是145649872
KillingJacky
发表于 2016-11-25 10:43:29
这应该是个加精的贴子啊
hzjnet
发表于 2016-11-30 10:50:34
支持加精好文