制作 MobileMate 主程序

技術概覽

  • 編程語言。因爲 MobileMate 的實際工作是由各種開源工具處理,如 MPlayer, FFmpeg(Libav), Zenity, Grep, Sed, 等等,所以使用 Bash 作爲粘合語言使它們在一起工作。
  • 因爲 MobileMate 主程序是一款完整的音視轉換解決方案,有點複雜,借用 OOP 封裝的思路,把相關的數據成員和函數放進一個像“類”的腳本文件裏,數據成員和函數使用特別的命名規則。
  • 使用 Zenity 作爲程序用戶界面,所以簡單且只有向導模式。
  • 爲了易于定制程序行爲,程序主要基于配置文件工作。

源碼結構

  • /opt/mobilemate/bin: 可執行 shell 腳本,從 “/opt/mobilemate/bin/mobilemate” 開始。
  • /opt/mobilemate/share: “類” shell 腳本,包含函數,可以被 “../bin” 裏的腳本或者另一個“類”的函數調用。
  • /opt/mobilemate/conf: 所有的配置文件放在這裏。

編碼風格和規則

我們的編碼風格使用 Google Shell Style Guide Revision 1.25,除了下面一些特例:

  • Separate libraries with ::。我需要在一個庫(在 /opt/mobilemate/share 下面,或稱爲“類”)裏的變量和函數使用統一的風格,但是變量名不能包含 “::“。

除了這些風格指南,下列一些在 MobileMate 主程序裏必須使用的規則:

  • 一個庫(或稱”類”,在 /opt/mobilemate/share 下面)裏函數和公共變量的名稱必須以“文件名_”爲前綴。例如,“類” /opt/mobilemate/share/taskmanager.sh,一個公共變量必須是 “taskmanager_task”,一個函數必須是 “taskmanager_thread()“。
  • 如果你想在程序裏添加新的功能,如果原代碼文件沒有任何錯誤就不要修改原代碼文件,除非沒有其它選擇,建立一個新的代碼文件來實現你的功能。

其它考慮

  • MobileMate 項目的創建者,我,littlebat,不是一個有經驗的程序員,所以設計和實現也許是不恰當甚至錯誤的,所以不要猶豫 聯系我們 或者 提交問題。當然,非常歡迎你 提交補丁。先多謝了。
  • 在當前版本中爲什麽選擇 Libav 而非 FFmpeg?當我開始寫這個程序時,不是非常清楚 FFmpeg 和 Libav 的區別,我需要編譯 MPlayer(Mencoder) 動態鏈接到 FFmpeg 庫(爲了保持 MobileMate 的體積小),但在當時我總是得到編譯錯誤,我們我從 Debian Sid 倉庫裏借用了 FFmpeg 和 MPlayer 的源代碼和編譯選項。如我們所知,Debian 官方倉庫沒有 FFmpeg,它是 Libav。在未來的版本,基本上,如果我們能解決 MPlayer 動態鏈接到 FFmpeg 庫的問題,我們會使用 FFmpeg 代替 Libav。因爲我發現看起來 FFmpeg 有更多的新特性和開發更活躍。你的考慮是什麽?或者,一個更通用的問題:什麽時候使用 FFmpeg 和什麽時候使用 Libav?哪個更適合于我們的項目?
  • 爲什麽使用 Mencoder 加上 Libav 和純 Libav 這兩種轉換方法?當我開始寫這個程序時,我在網上聽說 Mencoder 可以比 FFmpeg(Libav) 解碼更多的視頻類型,但是它似乎不能正確的編碼一些格式(如,mpeg4 + amrnb →3GP 格式),所以,我使用命名管道(named pipe)把 Mencoder 的臨時結果傳給 Libav 得到最後的結果。後來,我聽說 Mencoder 已經幾年沒有維護了,FFmpeg 幾乎可以完全代替 Mencoder。所以,我添加了純 Libav 轉換方法。默認方法是純 Libav,如果你碰到一個文件也許不能被 Libav 正確解碼,你可以嘗試編輯 /opt/mobilemate/conf/common.conf,用 “DECODED_BY=“MENCODER”” 代替 “DECODED_BY=“LIBAV”“,然後,它將使用 Mencoder 加上 Libav 的方法工作。但是,在未來的版本,如果我們確認 FFmpeg 可以完全替代 Mencoder,我們也許會移除 Mencoder。
zh-tw/mobilemate.txt · Last modified: 2014/07/30 11:09 by littlebat
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0

蜀ICP备2021012931号-1 川公网安备51092202000377号