Linux手机DIY.Shell应用扩展二.自动生成播放列表(E680系列)

浏览:5日期:2023-05-23

一、问题的由来

很多人问E680最优秀的播放器是什么,我只想说目前来看依然是自带的Realplayer。他的优势在于占用的资源,与手机的无缝连接,以及比较合适的媒体相关参数设置。 realplayer音频播放能力还是比较强的,支持的格式也比较多,所欠缺的是视频播放能力。这也是网上存在众多的第三方播放器的主要原因。 考虑手机本身的容量再加上解压高品质媒体文件的耗电量,使用这类第三方播放器不可避免留有遗憾。何况央视网络电视等网站也提供了众多压制好的合适文件。综合考虑,得出如上结论也是情理之中。

不过realplayer有个重大缺点(起码我这么认为),对于播放列表的添加管理实在是很麻烦。解决这个问题有很多种途径,在这里我们依然信赖Shell。

<Linux手机DIY系列:http://blog.csdn.net/liwei_cmg/category/241839.aspx>

二、自动播放列表的总体思路

思路倒是十分简单,E680G的播放列表文件就是/ezxlocal/download/appwrite/.realplayer.list,这便是我们操作的对象。 我先来说明下具体的操作方法: 1.建立执行的脚本,playerlist.txt。 2.在当前脚本目录下,手工创建几个列表配置文件,这里必须定义为 _*.txt 这种格式。且每行文件内容皆是需要列表包括的目录,最后必须空一行。 如: _all.txt 01 /mmc/mmca1/Music/Soft 02 /mmc/mmca1/Music/Game 03 /mmc/mmca1/Music/Pop 04 _game.txt 01 /mmc/mmca1/Music/Game 02 上面文件左边是行号标记,实际文件中是没有的。 3.脚本执行时会在当前目录遍历所有_*.txt文件,每个文件会生成一个播放列表。 在处理文件时,会查找文件所定义的目录,将其中的媒体文件自动生成到列表中。 4.启动realplay便可以使用了。

三、脚本文件全内容

01 #!/bin/bash02 03 #当前路径04 Path_Current=/mmc/mmca1/soft/playerlist05 #日志文件06 File_Log=$Path_Current/log.txt07 08 #预定义文件09 File_Define=$Path_Current/define.txt10 11 12 echo $$ > $Path_Current/tmpProc.txt13 14 #指令集15 File_Busybox=/mmc/mmca1/tmp/busybox16 17 #建立播放列表头18 File_ListHead=$Path_Current/tmpListHead.head19 echo '[allplaylist]' > $File_ListHead20 21 22 cd $Path_Current23 #遍历循环变量24 iListCount=025 #遍历本地列表配置文件26 27 for InstallList in `ls _*.txt`28 do29 30 #播放列表名31 ListName=${InstallList#*_}32 ListName=${ListName%.*}33 34 #echo $ListName35 36 iListCount=$(($iListCount+1))37 echo '$iListCount = pl-$ListName' >> $File_ListHead38 39 #临时循环变量40 i=041 42 #文件行数43 vFileLen=`$File_Busybox wc $Path_Current/$InstallList | $File_Busybox awk ’{print $1}’`44 echo 'Line: ' $vFileLen45 46 #rm $Path_Current/tmp$ListName.list47 echo '[pl-$ListName]' > $Path_Current/tmp$ListName.list48 while test $i -lt $vFileLen 49 do50 51 i=$(($i+1))52 53 #列表中目录54 echo $Path_Current/$InstallList55 ListDir=`sed -n '$i p' $Path_Current/$InstallList`56 57 echo $ListDir58 find $ListDir -name ’*.[m,M,w,W][p,P,m,M][3,a,A]’ >> '$Path_Current/tmp$ListName.list'59 60 done61 62 $File_Busybox awk ’BEGIN{FS=','}{if(NR==1)printf $0 'n';if(NR!=1)printf NR-1 ' = ' $0 'n';}’ $Path_Current/tmp$ListName.list > $Path_Current/tmpfile63 64 ListCount=`$File_Busybox wc $Path_Current/tmpfile | $File_Busybox awk ’{print $1}’`65 ListCount=$(($ListCount-1))66 echo 'counter = ' $ListCount >> $Path_Current/tmpfile67 mv -f $Path_Current/tmpfile $Path_Current/tmp$ListName.list68 69 done70 71 ListCount=`$File_Busybox wc $File_ListHead | $File_Busybox awk ’{print $1}’`72 ListCount=$(($ListCount-1))73 echo 'counter = ' $ListCount >> $File_ListHead74 75 76 cat $File_ListHead > $Path_Current/realplayer77 cat $File_Define >> $Path_Current/realplayer78 cat $Path_Current/*.list >> $Path_Current/realplayer79 80 cp -f $Path_Current/realplayer /ezxlocal/download/appwrite/.realplayer.list

四、脚本文件解释

整个脚本主要使用wc,awk,sed等处理文件的Shell命令。与《随机来铃》一样,依然使用的是busybox指令集。下面对脚本执行流程做个详细描述:

1.建立播放列表头<17行> 即tmpListHead.head这个文件内容最终会是播放列表的最开头部分: [allplaylist] 1 = pl-all 2 = pl-game counter = 2 在遍历所有_*.txt过程中<27-69行>,首先会提取出播放列表名,如_all.txt 的列表名为all。<31,32行>完成此操作,这里用到了${InstallList#*_} 变量截取方法,适用于bash,别的shell未曾测试。 <37>行,把获取的播放列表名组合成,E680 Realplayer可识别的内容, 并写入tmpListHead.head。 <73>行,此时遍历过程已结束,生成最后counter = i 的这句内容。

2.建立播放列表固定部分<09行> 即config.txt这个预定义文件,文件内容就是: [bookmark] counter = 0 &nb

相关文章: