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

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

二、自动播放列表的总体思路
思路倒是十分简单,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/bash
02
03#当前路径
04Path_Current=/mmc/mmca1/soft/playerlist
05#日志文件
06File_Log=$Path_Current/log.txt
07
08#预定义文件
09File_Define=$Path_Current/define.txt
10
11
12echo $$ > $Path_Current/tmpProc.txt
13
14#指令集
15File_Busybox=/mmc/mmca1/tmp/busybox
16
17#建立播放列表头
18File_ListHead=$Path_Current/tmpListHead.head
19echo "[allplaylist]" > $File_ListHead
20
21
22cd $Path_Current
23#遍历循环变量
24iListCount=0
25#遍历本地列表配置文件
26
27for InstallList in `ls _*.txt`
28do
29
30#播放列表名
31ListName=${InstallList#*_}
32ListName=${ListName%.*}
33
34#echo $ListName
35
36iListCount=$(($iListCount 1))
37echo "$iListCount = pl-$ListName" >> $File_ListHead
38
39#临时循环变量
40i=0
41
42#文件行数
43vFileLen=`$File_Busybox wc $Path_Current/$InstallList | $File_Busybox awk ’{print $1}’`
44echo "Line: " $vFileLen
45
46#rm $Path_Current/tmp$ListName.list
47echo "[pl-$ListName]" > $Path_Current/tmp$ListName.list
48while test $i -lt $vFileLen
49do
50
51i=$(($i 1))
52
53#列表中目录
54echo $Path_Current/$InstallList
55ListDir=`sed -n "$i p" $Path_Current/$InstallList`
56
57echo $ListDir
58find $ListDir -name ’*.[m,M,w,W][p,P,m,M][3,a,A]’ >> "$Path_Current/tmp$ListName.list"
59
60done
61
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/tmpfile
63
64ListCount=`$File_Busybox wc $Path_Current/tmpfile | $File_Busybox awk ’{print $1}’`
65ListCount=$(($ListCount-1))
66echo "counter = " $ListCount >> $Path_Current/tmpfile
67mv -f $Path_Current/tmpfile $Path_Current/tmp$ListName.list
68
69done
70
71ListCount=`$File_Busybox wc $File_ListHead | $File_Busybox awk ’{print $1}’`
72ListCount=$(($ListCount-1))
73echo "counter = " $ListCount >> $File_ListHead

推荐阅读