平安夜福利:mediatomb为三星智能电视添加字幕支持

那時、天下人的口音言語、都是一樣。他們往東邊遷移的時候、在示拿地遇見一片平原、就住在那裏。他們彼此商量說、來吧、我們要作磚、把磚燒透了。他們就拿磚當石頭、又拿石漆當灰泥。他們說、來吧、我們要建造一座城、和一座塔、塔頂通天、為要傳揚我們的名、免得我們分散在全地上。耶和華降臨要看看世人所建造的城和塔。耶和華說、看哪、他們成為一樣的人民、都是一樣的言語、如今既作起這事來、以後他們所要作的事、就沒有不成就的了。我們下去、在那裏變亂他們的口音、使他們的言語、彼此不通。於是耶和華使他們從那裏分散在全地上。他們就停工、不造那城了。因為耶和華在那裏變亂天下人的言語、使眾人分散在全地上、所以那城名叫巴別。
——創世記11:1-9(中文和合本)

耶和华真是闲的蛋疼的一个。昨天提到的文章和相关补丁,主要是解决
mediatomb作为服务器,为三星智能电视提供多媒体支持的,不过,到现在
我的mpeg问题还没有解决。今天在看3D电影的时候才发现,下载的一部分
竟然没有字幕,想想如何才能支持呢,于是,求助万能的3W,找到一堆关于
transcode配置的,简单的说,就是使用memcode(这个可能拼错了)之类
的工具转码进行,这个不太适合吧,我编译的脸ffmpeg都去掉了,不过,
幸好有高人也碰到了这个问题,而且,研究出来了。

详细的补丁和讨论在这里:讨论 samsung_video_subtitles.patch

我检出来的版本是: b66dc1f0421b6b82c0241bb5cc8299c127babe32

这里我做了一个针对这个版本的所有补丁,这个补丁集成了之前提到的那些问题,同时,支持字幕。补丁的下载位置在这里:mediatomb.patch

顺带一提,要启用字幕功能的话,需要在配置文件中添加上下面一行:

       protocolInfo extend="yes" samsung-hack="yes"/>
       

samsung通过mediatomb播放rmvb

本来一件很简单的需求,慢慢的变成了一场灾难。

早前一直在电脑上看视频,家里的56吋的三星3D电视就在那里落灰了。
突然想到树莓pi上的硬盘里面有很多视频文件和照片,就想整理下,在电
视上放,当然,还有一个想法就是看播放3D是什么效果,我还没用过它看
3D电影呢。

于是,很简单的需求,架个minidlna服务器,so easy,然后,啊哦,
rmvb不支持,看下说明书,明明支持的啊,mkv不支持超过x264 level 4.1,我
下载的片子竟然是5.0的,当然,刚开始一直不知道,就折腾啊折腾,才找
到这个原因,使用ffmpeg也折腾好久才弄明白怎么转换是正确的,顺便一
提:

           ffmpeg -i aa.mkv -c:v libx264 -preset fast -c:a copy -scodec
           copy out.mkv
       

-scodec这个参数可能有些问题,没有的话他会按照默认的字幕和配音
弄,弄的话可能有问题,这个参数没有验证过

好不容易弄好之后,一播放,太卡,这个好办多了,换成有线,一切妥
妥的。

但minidlna不支持rmvb,这个比较蛋疼了。除了rmvb,我里面剩下的视
频文件就不多了,也好像不支持mpg,啊哦,又一个问题,想了想,换一个
吧,好在linux下相类似的软件多,于是,换上了mediatomb

苦难从此开始。

继续阅读samsung通过mediatomb播放rmvb

mnesia使用中文创建数据库并支持REST操作

这个不是什么高深的内容,记录下来,给自己提个醒。

起源于我想给我的所有数据库添加一个统一的操作接口,当然,使用英
文会更方便,更批量化,代码更少等等,我在弄的时候突发奇想,使用中
文吧,这样网页中看着连想都不用想,而且还可以给别人看,连教育部都
不支持中文了,杂家也随下大流。

其实erlang的record完全支持中文的声明,比如下面的例子:

      -record('公告',
        {'ID', %ID
         '标题' = "", % 标题
         '内容' = "", % 描述
         '显示' = true% 禁用
        }).
      

只所以可以成功是因为单引号的字符串,在erlang中就是作为一个atom
类型的,如果你想给里面加个空格什么的,也没问题。当然,使用的时候也
要加上单引号。

其实,erlang的record使用中文的话,也就上面的这些。但如果在shell
中使用,就比较烦人了,在命令行下使用下面的语句:

     mnesia:transaction(fun() -> mnesia:match_object('公告') end)).
     

会出现:illegal atom 的错误,或许修改环境变量的编码可以修改,我
没有测试。

接下来是http的REST接口,一般都使用的是表格显示,我喜欢使用JSON数
据格式,这个就更简单些了。还是上面的record:

继续阅读mnesia使用中文创建数据库并支持REST操作

我为什么要用erlang来做服务器端

刚和朋友交流,就服务器端的开发语言选择,做了些讨论。这里记录一
下概要。

按照一般的理解,我用C/C++做服务器端会更符合我的习惯,因为我对
C/C++要比erlang要熟悉,要更顺手,而且,也用C/C++弄过服务器,设计
过基于C/C++的服务器架构。但我个人还是更愿意选择erlang

首先是设计方便,大约在07年还是08年的时候,那个时候在konami弄的
移植用的软件架构消停的时候,有一段空闲时间,就开始考虑快速的服务
器开发架构这块,当时是想采用lua或者其他的比如python的,因为对lua
更了解些,就写了个使用lua脚本的架构,但随着想要的越来越多,发现我
的架构并不是我所需要的,我需要的是一个足够的灵活,足够的高效,修
改需要可以实时反映出来,而且,还要像搭积木一样,可以随意组合,这
些内容都没办法满足。然后,碰到了erlang,忘了是在哪个网站,反正是
在看技术相关的文章的时候看到的,我立刻就被erlang所宣称的特性吸引
了,这正是我想要的一个底层平台,我所要的就是一个这样支持我瞎折腾
的平台。

其次,学习并没有想象中的难,大约用了1周的时间,学习完erlang的
内容(Programming Erlang,当时还没有中文),然后开始设计一个基本的
模型,然后再设计,设计,直到我稍微满意。从顺手程度而言,要比lisp
顺手的多,我当初使用C/C++设计的时候,是有考虑过lisp的,我用的是
emacs,所以多多少少要会些lisp,但一看到lisp中别人写的库,我就感到
崩溃,没有匹配高亮我真的不知道那些高手如何将那么多的括号匹配上的,
因此我也一直没好意思对别人说我也会lisp的,扯远了些,总之,相比
lisp,erlang更适合我的学习。

在几十次的试验之后,包括基于yaws,mochiweb的页游,最后总算有了
自己的想法,熟悉了使用erlang思考问题的方式,开始设计一个一个的模
块结构。

因此,erlang就是被我用来瞎折腾的,用来验证我的设计思路以及想法
的,我也因此不断的思考如何用erlang来快速设计想要的内容,而erlang
方面,第三方库也越来越多,相比使用C/C++,验证这些内容,都要进行大
量的编码。下面列出部分使用erlang做的试验:

页游: 使用yaws和mochiweb都设计过,yaws的好处就是可以把erlang
当成php用,mochiweb呢,就一个web框架,想做什么随你,问题是我对网
页前端的设计不熟,所以就随便试试,主要关注在大量用户的情况下,
浏览器在进行http连接服务器的时候,服务器如何区分各个独立的用户以
及这些用户的行为。

股票数据抓取: 这个就无聊了,当时就想看看新浪股票的数据能不能
用erlang来分析,同时想看下如果发送很频繁的时候数据是不是实时变化
的,总之,结果忘了。

电话号码抓取: 前些年我用android手机的时候,拨长途使用IP拨号便
宜,但试了几个软件都不理想,我只想要一个IP拨号功能就行了,顶多加
上归属地,但软件总有一些其他的,比如广告,比如个头太大,比如总是
更新,烦啊,就在股票数据抓取的基础上,写了个电话号码的抓取,还专
门写了个10多K的ip拨号的android软件,专门定制了android手机系统,
不过,最后这套内容不知道在哪个硬盘中,总之没有找到了。当时抓取是
从几个网站上同时抓取的,有些有时间限制,有些会出现不同的干扰信息,
如果用C/C++来做这些处理的话,每次都要中断下,使用erlang就方便多了,
出现错误的时候,直接改,改到正确为止,不同的网站有不同的限制,因
此,我设计了好几种模式,如果发现了时间限制,则切换代理,如果一个
网站可以快速抓取的话,在自己分配的数据完成之后,再自动对所有任务
分配,总之,不死不休。

网络负载测试: 测试erlang在不同连接数之下的内存占用量,当时,
有一个现成的C++服务器以及mysql数据库,也头一次看到了erlang的NIF,
就想试试NIF内容,然后就用了几个小时做了个小设计,erlang做网络连接
的前段,原来的C++代码通过NIF做数据处理的后端,同时连接数据库。我
通过一台笔记本,连接到erlang服务器,总之,笔记本当初在启动到12K的
连接的时候,再也开动不了新的了。反观服务器,超轻松,反正玩的目的
达到了,也不追求极限,够用即可。

网游服务器: 这个设计过好多个版本,有些是测试看是否可以设计的,
有些是做教学用途的,有些纯粹是看着别人的好玩,模仿用途的,
总之,杂七杂八一大堆,当然,还有一个因素是这样就不用去学mysql了。

网络爬虫: 写了个优酷的网络爬虫,结果爬了优酷的几百万个网页之
后,虚拟机内存小,爬不动了,开了就说内存不足gameover了,虽然可以
改成磁盘也可以,不过,反正这些数据对我没有太大用途,爬了也没用,
只是验证下使用erlang设计更方便还是python更方便, 而且,对于这种大
网站,有些页面可能会出现一些不一致的内容,不过,在后来的bilibili
的网站上,发现了更多的不一致,觉得还是优酷的规范些,但一旦出现了
一些问题,总可以不用关闭直接修改,然后就解决问题了,从这一点上而
言,我觉得比python要好些,而且,对于抓取的内容格式什么的进行后期
处理,不满意也可以随时修改。

webshell: 偶然想法,通过web来管理所有的基于erlang的内容,结果
发现已经有人弄了,拿过来一用,总之,在不同的方式上有些问题,比如
本地什么的就没有问题,通过nginx中转,端口映射什么的就没办法,修修
改改,结果直接在服务器上使用了。

smtp发邮件: 服务器出现了异常怎么也得发封邮件吧,结果试试,没
问题,可以做到。

bitcon服务器: 这个是突然的一个想法,觉得erlang社区现在发展的
也还不错,结果果然有这方面的内容,结果,可怜的树莓Pi编译了一个晚
上才将bitcon的代码编译完,算了,不折腾树莓Pi了。

以上只是部分使用erlang折腾的而且可以公开讨论的内容, 其他一些相
关的就没办法说了。总之,erlang就是供我瞎折腾的。

域名再次被注销

dyn.com再次将我的免费域名注销了。悲剧啊。昨天往服务器上提交代
码才发现找不到域名了。

至今不知道域名取消的原因和依据是什么,也从未收到过关于取消的邮
件。

本来以为是访问量过大,但前段时间那么大的访问用户都没问题。

不过这段时间我经常往服务器上提交代码,代码一合并的时候,基本上
内存就被占用了超过80%,造成其他服务出现问题,在加上刚搬过来,可能
线路不稳定还是电源什么的问题,总是,树莓Pi间或性重启,甚至连usb硬
盘都挂载失败。看来要关掉一些服务了。

目前,树莓Pi运行了下面的服务:

nginx

php-fcgi

mysqld

memcached

sshd

gerrit

ftpd

python+goagent

cups pdf虚拟打印

dhcpd+hostapd 原来用来做软路由,没用,也懒得关,应该不占什么资源

samba 文件共享

cron

erlang+若干基于erlang的服务器程序

其他的就都是自带启动的,等过段时间将没用的都关掉吧。