| 订阅 | 在线投稿
分享
 
 
 

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

2008-12-28 03:24:15  编辑来源:互联网  宽屏版  评论
 
 

本文为【Linux手机DIY.Shell应用扩展二.自动生成播放列表(E680系列)】的汉字拼音对照版显示拼音

  yiwentideyoulai

   henduorenwenE680zuiyouxiudebofangqishishenmewozhixiangshuomuqianlaikanyiranshizidaideRealplayer

  tadeyoushizaiyuzhanyongdeziyuanyushoujidewufenglianjieyijibijiaoheshidemeitixiangguanshenshushezhi

   realplayeryinpinbofangnenglihuanshibijiaoqiangdezhichidegeshiyebijiaoduosuoqianquedeshishipinbo

  fangnenglizheyeshiwangshangcunzaizhongduodedisanfangbofangqidezhuyaoyuanyin

   kaolvshoujibenshenderongliangzaijiashangjieyagaopinzhimeitiwenjiandehaodianliang使shiyongzheleidisanfangbofangqi

  bukebimianliuyouyihanhekuangyangshiwangluodianshidengwangzhanyetigonglezhongduoyazhihaodeheshiwenjianzonghekao

  lvdechurushangjielunyeshiqinglizhizhong

   buguorealplayeryougechongdaquedian(qimawozhemerenwei)duiyubofangliebiaodetianjiaguanlishizai

  shihenmafanjiejuezhegewentiyouhenduozhongtujingzaizheliwomenyiranxinlaiShell

  <LinuxshoujiDIYxilie:http://blog.csdn.net/liwei_cmg/category/241839.aspx>

  erzidongbofangliebiaodezongtisilu

   siludaoshishifenjiandanE680Gdebofangliebiaowenjianjiushi/ezxlocal/download/appwrite/.realplayer.list

  zhe便bianshiwomencaozuodeduixiang

   woxianlaishuomingxiajutidecaozuofangfa

  

   1.jianlizhixingdejiaobenplayerlist.txt

   2.zaidangqianjiaobenmuluxiashougongchuangjianjigeliebiaopeizhiwenjianzhelibixudingyiwei _*.txt

   zhezhonggeshiqiemeixingwenjianneirongjieshixuyaoliebiaobaokuodemuluzuihoubixukongyixing

  

   ru

   _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

  

   shangmianwenjianzuobianshixinghaobiaojishijiwenjianzhongshimeiyoude

  

   3.jiaobenzhixingshihuizaidangqianmulubianlisuoyou_*.txtwenjianmeigewenjianhuishengchengyigebofangliebiao

   zaichuliwenjianshihuichazhaowenjiansuodingyidemulujiangqizhongdemeitiwenjianzidongshengchengdaoliebiaozhong

  

   4.qidongrealplay便biankeyi使shiyongle

  sanjiaobenwenjianquanneirong

  01 #!/bin/bash

  02

  03 #dangqianlujing

  04 Path_Current=/mmc/mmca1/soft/playerlist

  05 #rizhiwenjian

  06 File_Log=$Path_Current/log.txt

  07

  08 #yudingyiwenjian

  09 File_Define=$Path_Current/define.txt

  10

  11

  12 echo $$ > $Path_Current/tmpProc.txt

  13

  14 #zhilingji

  15 File_Busybox=/mmc/mmca1/tmp/busybox

  16

  17 #jianlibofangliebiaotou

  18 File_ListHead=$Path_Current/tmpListHead.head

  19 echo "[allplaylist]" > $File_ListHead

  20

  21

  22 cd $Path_Current

  23 #bianlixunhuanbianliang

  24 iListCount=0

  25 #bianlibendiliebiaopeizhiwenjian

  26

  27 for InstallList in `ls _*.txt`

  28 do

  29

  30 #bofangliebiaoming

  31 ListName=${InstallList#*_}

  32 ListName=${ListName%.*}

  33

  34 #echo $ListName

  35

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

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

  38

  39 #linshixunhuanbianliang

  40 i=0

  41

  42 #wenjianxingshu

  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 #liebiaozhongmulu

  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

  sijiaobenwenjianjieshi

   zhenggejiaobenzhuyao使shiyongwc,awk,seddengchuliwenjiandeShellminglingyusuijilailingyiyang

  yiran使shiyongdeshibusyboxzhilingjixiamianduijiaobenzhixingliuchengzuogexiangximiaoshu

   1.jianlibofangliebiaotou<17xing>

  

   jitmpListHead.headzhegewenjianneirongzuizhonghuishibofangliebiaodezuikaitoubufen

  

   [allplaylist]

   1 = pl-all

   2 = pl-game

   counter = 2

  

   zaibianlisuoyou_*.txtguochengzhong<27-69xing>shouxianhuitiquchubofangliebiaomingru_all.txt

   deliebiaomingweiall<31,32xing>wanchengcicaozuozheliyongdaole${InstallList#*_}

   bianliangjiequfangfashiyongyubashbiedeshellweizengceshi

  

   <37>xingbahuoqudebofangliebiaomingzuhechengE680 Realplayerkeshibiedeneirong

   bingxierutmpListHead.head

  

   <73>xingcishibianliguochengyijieshushengchengzuihoucounter = i dezhejuneirong

  

   2.jianlibofangliebiaogudingbufen<09xing>

  

   jiconfig.txtzhegeyudingyiwenjianwenjianneirongjiushi

  

   [bookmark]

   counter = 0

   [currentplaylist]

   counter = 0

   currentitem = 0

   currentplaylistname =

   [history]

   counter = 0

  

   zhexieneirongshiwomenbingbuguanxindeerqieyebuhuiquxiugaita

  

   3.dongtaijianlibofangliebiao<27-69xing>

  

   zhuxunhuanzhongjiaobenshouxianhuoquyige_*.txtwenjianbingduquwenjianneirongjisuanwenjianxing

   shu<43xing>ranhoubianliwenjiandemeiyixing(shuyuneixunhuan<48-60xing>)duigaiwenjiande

   meiyixingmuluneirongjinxingbofangliebiaochuli<58xing>neixunhuanjieshuhouduixunhuanshengchengde

   bofangliebiaowenjiantmp*.listjinxingercichuli使shizhifuherealplayergeshi<62xing>

  

   jimeiyige_*.txtwenjiandouhuiduiyingshengchengtmp*.list

  

  

   4.zuihoudewenjianneirongzuhe<76-80xing>

   cishidegongzuoxiangduijiandanduolezhishironghexiasuoyouzhongjianwenjianshengchengzuizhongbofangliebiao

   bingqiangxingfuzhidaogudingmuluzhelihefademeitiwenjiankuozhanmingzanshishixiesizaijiaobenzhong

   <58xing>youxingqudekeyigaichengdongtaipeizhidebuguanshishangpianLinuxshoujiDIY.Shell

   yingyongkuozhanyi.suijilaidianlingshenghuanshizheyipianpeizhiwenjiandoushicaiyongjiweijiandande

   duliwenjianzhegeziranyeshikeyigaijinde

  

  

  wushifenchongyaodebuchong

   jiezhidaomuqianShellxiliewenzhangsuoshejidesuoyoupeizhiwenjiandoubixushiputongdeUnixgeshifou

  zejiangbunengzhengchangyunxing(zhuUnixgeshiyuwomenpingchangyongdeWindows DOSgeshichayizaiyuhuichefu

  Unixshi0x0dDOSshi0x0a+0x0druguozaishoujishang使shiyongWindows DOSzhezhonggeshijishibencha

  kandaoshizhengchangdebuguoyongShellminglingchakanjiushiluanma)

   putongUnixzhezhonggeshihuoquqilaishifenrongyitelnetminglingxingxiaecho 'a' > a.txt

  zhegea.txt便bianshiwanquanhefadeUnixgeshierE680shoujibenshendewenjiangeshijieweiU8-Unixjishi

  caiyongUTF-8bianma

   yongshoujijishibenchuangjianyigewenbenwenjianneirongweiyiersanzaitelnetchuangkouyongcatminglingcha

  kanhuixianshi?123zhexianranchuxianlebianmadebujianrongxingyongUltraEditdakaixianshishiU8-UNIXge

  shibuguoneirongshizhengchangde

   yiersanputongUNIXgeshierjinzhineirong

  

   D2 BB B6 FE C8 FD

  

   yiersanUTF-8geshierjinzhineirong

  

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

  

   zhechayixianranbijiaodawomentongguoShellcaozuowenjianshiyidanshejiUTF-8bianmadewenjianjiu

  huichuxiancuowuyaojiejuezhegewentijiubixujinxingbianmazhuanhuanzhebufenneirongjiangzaiyihouzuozhuantitaolun原文
 
 
 
一、问题的由来 很多人问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编码的文件,就 会出现错误,要解决这个问题就必须进行编码转换。这部分内容将在以后做专题讨论。
󰈣󰈤
 
 
 
>>返回首页<<
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 
 热帖排行
 
 
王朝网络微信公众号
微信扫码关注本站公众号wangchaonetcn
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
©2005- 王朝网络 版权所有