国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 手機知識 > 正文

Linux手機DIY.Shell應用擴展二.自動生成播放列表(E680系列)

2024-06-10 11:36:32
字體:
來源:轉載
供稿:網友

一、問題的由來

    很多人問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編碼的文件,就
會出現錯誤,要解決這個問題就必須進行編碼轉換。這部分內容將在以后做專題討論。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 陈巴尔虎旗| 毕节市| 云霄县| 扶余县| 乌兰县| 革吉县| 婺源县| 颍上县| 乐业县| 鹿泉市| 清远市| 屯留县| 拉萨市| 福建省| 盘山县| 青川县| 五台县| 珠海市| 江口县| 汝阳县| 新和县| 宁波市| 宣恩县| 正蓝旗| 贺兰县| 门源| 和顺县| 济南市| 贵阳市| 仁寿县| 佛山市| 东阿县| 资阳市| 南乐县| 竹山县| 娄烦县| 南溪县| 芒康县| 阿城市| 顺义区| 太和县|