王朝网络
分享
 
 
 

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

王朝system·作者佚名  2008-12-28
宽屏版  字体: |||超大  

一、问题的由来

很多人问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/bash

02

03 #当前路径

04 Path_Current=/mmc/mmca1/soft/playerlist

05 #日志文件

06 File_Log=$Path_Current/log.txt

07

08 #预定义文件

09 File_Define=$Path_Current/define.txt

10

11

12 echo $$ > $Path_Current/tmpProc.txt

13

14 #指令集

15 File_Busybox=/mmc/mmca1/tmp/busybox

16

17 #建立播放列表头

18 File_ListHead=$Path_Current/tmpListHead.head

19 echo "[allplaylist]" > $File_ListHead

20

21

22 cd $Path_Current

23 #遍历循环变量

24 iListCount=0

25 #遍历本地列表配置文件

26

27 for InstallList in `ls _*.txt`

28 do

29

30 #播放列表名

31 ListName=${InstallList#*_}

32 ListName=${ListName%.*}

33

34 #echo $ListName

35

36 iListCount=$(($iListCount+1))

37 echo "$iListCount = pl-$ListName" >> $File_ListHead

38

39 #临时循环变量

40 i=0

41

42 #文件行数

43 vFileLen=`$File_Busybox wc $Path_Current/$InstallList | $File_Busybox awk '{print $1}'`

44 echo "Line: " $vFileLen

45

46 #rm $Path_Current/tmp$ListName.list

47 echo "[pl-$ListName]" > $Path_Current/tmp$ListName.list

48 while test $i -lt $vFileLen

49 do

50

51 i=$(($i+1))

52

53 #列表中目录

54 echo $Path_Current/$InstallList

55 ListDir=`sed -n "$i p" $Path_Current/$InstallList`

56

57 echo $ListDir

58 find $ListDir -name '*.[m,M,w,W][p,P,m,M][3,a,A]' >> "$Path_Current/tmp$ListName.list"

59

60 done

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

64 ListCount=`$File_Busybox wc $Path_Current/tmpfile | $File_Busybox awk '{print $1}'`

65 ListCount=$(($ListCount-1))

66 echo "counter = " $ListCount >> $Path_Current/tmpfile

67 mv -f $Path_Current/tmpfile $Path_Current/tmp$ListName.list

68

69 done

70

71 ListCount=`$File_Busybox wc $File_ListHead | $File_Busybox awk '{print $1}'`

72 ListCount=$(($ListCount-1))

73 echo "counter = " $ListCount >> $File_ListHead

74

75

76 cat $File_ListHead > $Path_Current/realplayer

77 cat $File_Define >> $Path_Current/realplayer

78 cat $Path_Current/*.list >> $Path_Current/realplayer

79

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

[currentplaylist]

counter = 0

currentitem = 0

currentplaylistname =

[history]

counter = 0

这些内容是我们并不关心的,而且也不会去修改它。

3.动态建立播放列表<27-69行>

主循环中,脚本首先获取一个_*.txt文件,并读取文件内容,计算文件行

数<43行>。然后遍历文件的每一行(属于内循环<48-60行>)。对该文件的

每一行目录内容进行播放列表处理<58行>。内循环结束后,对循环生成的

播放列表文件tmp*.list进行二次处理,使之符合realplayer格式<62行>。

即每一个_*.txt文件都会对应生成tmp*.list。

4.最后的文件内容组合<76-80行>

此时的工作相对简单多了,只是融合下所有中间文件,生成最终播放列表,

并强行复制到固定目录。这里合法的媒体文件扩展名暂时是写死在脚本中

<58行>,有兴趣的可以改成动态配置的。不管是上篇《Linux手机DIY.Shell

应用扩展一.随机来电铃声》还是这一篇,配置文件都是采用极为简单的

独立文件,这个自然也是可以改进的。

五、十分重要的补充

截止到目前,Shell系列文章所涉及的所有配置文件都必须是普通的Unix格式,否

则将不能正常运行。(注:Unix格式与我们平常用的Windows DOS格式差异在于回车符,

Unix是0x0d,DOS是0x0a+0x0d,如果在手机上使用Windows DOS这种格式,记事本查

看到时正常的,不过用Shell命令查看就是乱码。)

普通Unix这种格式获取起来十分容易,telnet命令行下echo 'a' > a.txt,

这个a.txt便是完全合法的Unix格式。而E680手机本身的文件格式皆为U8-Unix,即是

采用UTF-8编码。

用手机记事本创建一个文本文件,内容为“一二三”,在telnet窗口用cat命令查

看会显示“?123”,这显然出现了编码的不兼容性。用UltraEdit打开显示是U8-UNIX格

式,不过内容是正常的。

“一二三”普通UNIX格式二进制内容:

D2 BB B6 FE C8 FD

“一二三”UTF-8格式二进制内容:

FF FE 00 4E 8C 4E 09 4E

这差异显然比较大,我们通过Shell操作文件时,一旦涉及UTF-8编码的文件,就

会出现错误,要解决这个问题就必须进行编码转换。这部分内容将在以后做专题讨论。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有