制作 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/mobilemate.txt · Last modified: 2014/07/30 11:06 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号