qyb的博客

关于 Video

  1. 每个桌面系统都有自己的多媒体框架,微软下是 directshow,苹果是 quicktime,freedesktop 是 gstreamer
  2. 视频文件格式应该称之为 container,因为里面包括了视频流,一条或多条音频流(这很常见),甚至字幕流。平时我们下载最多的是 mkv 和 avi;flash 的 flv 也算是一种 container,比如网上高清视频点播的都是 H.264 + AAC;而 firefox 3.5,将内置支持的是 Ogg (Theora + Vorbis)
  3. H.264 乃至于 MPEG 对于开源界的主要问题是专利(patent)。虽然我们有了 x264,ffmpeg,lame 这样优秀的开源软件,但是如果商业公司要把它们集成到自己产品里面的话,源代码可以使用,但还是得面对 MPEG-LA 的专利许可收费。这也是以前传出什么中国 Mp3 厂商参加德国汉诺威展的时候被查封设备调查的原因——人家怀疑你没有交纳专利费用,这也是侵权。
  4. chrome 内置了 ffmpeg 的代码以支持 H.264 视频,当然人家 google 有钱,大概是能搞定 MPEG-LA 的
  5. Theora 其实也有专利,它来源一个叫 On2 的公司开发的 VP3 编码器项目。但 On2 将这个专利授予了 xiph.org,而且是 irrevocable 的!! "free to download VP3 and Theora, use them free of charge, implement them in a for-sale product, implement them in a free product, make changes to the source and distribute those changes, or print the source code out and wallpaper your spare room with it. "
  6. 所以 firefox 支持 Theora 就显得很顺理成章了,估计 Opera 和 Chrome 也会支持 Theora,苹果还死抱着 quicktime,不晓得 IE Team 会怎么做。。。。继续观察吧。
  7. 最后一个问题,x264 编码的影片,高清的 flv 视频,大家都很清楚其视频质量了,那么这个 Theora 咋样呢?所幸的是 Theora 现在已经有了一个非常棒的编码器:Thusnelda encoder。有人评价就低分辨率或中等分辨率的视频而言,Theora 已经超过了 Youtube 上同等码流的高清视频 (http://hacks.mozilla.org/2009/06/open-video-codecs-and-quality/),这个对 HTML5 来说已经足够了。
  8. 相比较于高分辨率来说,Youtube 的 H.264 稍微胜出 (http://people.xiph.org/~maikmerten/youtube/),不过就我的看法,差别非常小...我相信就目前的状态而言,一个有很大用户基础(想想 firefox 吧),以及一个完全自由的 Theora 已经足以吸引这个领域的高水平开发人员来为这个项目出力了,祝愿它早日成为互联网,乃至于桌面放映的主流。
Topic: 技术

我当时就震惊了

今天晚上的彩信报,除了披露皇马买入C罗外,还加了一条伊布和埃托奥+一千万欧元交换的新闻。

西甲就成了一个卡卡/C罗 vs 梅西/伊布的格局,太生猛了

然后赶紧上网看新闻,发现这个交换1B的说法还没有被证实,鄙视一下中国移动,白白让我兴奋半天,毕竟埃托奥的欧战经验是国米很需要的,1B虽然对最近两年的意甲冠军有很大贡献,但想走的话还是走吧。。。

Topic: 运动

configfs 为什么

上回说到 cgroup 配置是通过特定的文件系统来弄的,这个...配置内核为什么要通过文件系统?就算要用 fs 为什么还去弄一个新的文件系统,现存的 sysfs 还不够吗?

关于第一个问题的答案是这样的。用户和操作系统打交道的标准方式是系统调用,可这 Linux 世界里那么多 developer,那么多 patch,每新开发一个需要用户交互的功能就新增系统调用显然不可行,这里有 Namespace/全局控制的显著难题;即使想在 ioctl 里增加宏定义什么也是同样的困境。通过文件系统路径来控制 Namespace 算一个大家都能接受的方案。

而 sysfs 的问题在于,它只是内核对象的一个视图,你可以去查看甚至修改对象的属性,但是所有的对象都是内核自己创建的,通过 sysfs 无法新建一个内核对象!对于 cgroup 应用来说,管理员需要去配置维护特定的 cgroup 对象,传统的 sysfs 就无能为力了。

这就是 configfs 的由来,它最初是 OCFS2(oracle cluster fs)的一部分,后来独立成为 Linux 的一个标准部件,在 2.6.16 成为 mainline

至于为什么 cgroup 最后没有用现成的 configfs而自己搞了一个新的文件系统,还没有从邮件列表中搜出端倪,待以后去考据罢...

Topic: 技术

Fedora11 on HP2230s

公司新发的小本,正好配最新的distribution.

  • 最重要的,wifi工作正常,NetworkManager 里简单配置一下就可以通过公司的 LEAP 认证。这里附带说一下,我是从 F11-Snapshot 安装来的,最开始无线驱动不起来,报什么"Kill switch must be turned off for wireless networking to work",后来系统yum update了一下后就能用了
  • 图形驱动也很好,配置上了 Solar 的开机启动效果。算是过了一把 KMS + Plymouth 的瘾。再附带说一下,开源图形驱动的支持方面,Intel > ATI > Nvidia
  • 支持面板上的音量滑动调整,但不支持音量的on/off按键
  • 屏幕亮度调整也支持
  • 外接投影只能用桌面扩展,无法clone,我猜测是屏幕分辨率和投影分辨率不一致的原因。不过我觉得扩展也挺好,这样可以一边投影一边看事先准备的演示提示,哈。
  • 因为是第一次在小屏幕上用Gnome,这才注意到它的字号是根据磅数来的——就是说自动使用更大的像素值,确保在不同的设备上看到的字的物理大小是一样的。这一点比windows要人性化
  • Linux下似乎比Windows下要耗电一些
  • 偶把缺省的宋体换成了文泉驿,官方源里就有
  • GNOME对蓝牙的支持也不错,比 XP 强
  • 传说F11对指纹识别集成得很好了,但2230s上的设备AES2810尚不被支持
  • 才用了差不多一个星期,以后慢慢折腾这个系统吧。现在我的工作模式是笔记本用 Linux,台式机上跑 XP,outlook/office/IE/MSN 啥的都在台式机上用,然后开一个 rdesktop...是不是太装了点?

    Topic: 技术

    中关村四小印象

    今天带达达去中关村四小面试。除了小孩要面试外,家长也得面试。按照学校的要求,还带了俺们的学历学位证明,面试的老师很仔细的一一验看。小朋友的面试不知道具体如何,就是在外面看着她被要求跳了会绳,还真算是全面考察了。

    印象深刻的是两点:
    1. 硬件条件看起来不错。

    2. 图书馆对面的展板上推荐四五六年级的阅读书里有《动物庄园》,另一边墙上则贴着十来个小孩写的少先队入队心得之类的东西。。。。哦哦哦,对比强烈啊

    Topic: 社会

    Gears 加入了 Drag & Drop 的功能

    这个 Drag&Drop 是指从桌面环境中拖入文件到浏览器,0.5.21 版本中带了这个功能. 随着 0.5.21 一起发布的,还有另外两个新增的 API

    印象中这是第一次 Gears 在 0.x.y 的 y 发布中,升级了新的 API,0.5 的首次发布的 ChangeLog 见 这里

    另外很有意思的一点是,Gears 给其它浏览器制作的扩展都自动更新了,但... Chrome 反而还停留在 0.5.19,一点都不 Teamwork,哈哈

    Topic: 技术

    09搜超联赛第一场

    2:3 输给了 go2map

    作为中卫打满全场,基本上没有给对手从我这里正面突破的机会,就是最后一个失球和门将没配合好

    从场面上看,这个比分还算合理,我们完全是依靠板凳的厚度在下半场趁对方体力出现问题打进了两个球

    go2map 和两年前比起来主力比较固定,我们还在磨合,期望下场能更好

    Topic: 生活

    关于 cgroup (control group)

    I/O controller 这篇文章提到了 control group,看起来它是 Linux 内核中一个比较重要的概念,于是去找了找资料,给自个科普科普

    最早 control group 是叫做 "Containers" (06年9月),利用 configfs 作配置.

    "Containers" 着眼于资源的分配,有两个重要概念:
    1. subsystem, 内核可以给进程提供的服务/资源

    2. container, 一个进程组,成员共享同样的一个或多个子系统分配限制。containers 是层次的,一个 container 可以 hold 多个 container

    它的最可取之处是创建了一个资源分配的框架,其它开发者可以利用这个框架去开发自己的资源分配patch,比如上回提到的磁盘设备。

    后来不知道为什么没有采用 configfs,自己搞了一个 container filesystem.

    最后在 2.6.24 内核(08年1月)中被正式合并进入主线,被改名为 control group 或简写为 cgroup. 详细介绍在 内核源代码文档目录中的cgroups.txt

    刚刚进入 2.6.24 的时候,只有 cpusets(绑定cpu/memory node) 和 CFS group scheduling( cpu 带宽分配) 两个资源。2.6.25 又引入了 memory resource.

    去搜索一下 cgroup,可以看到有好多有意思的 patch,比如 per cgroup 的 OOM killer,甚至 swap cgroup 等等.

    Topic: 技术

    Which I/O controller is the fairest of them all?

    简单翻译:http://lwn.net/Articles/332839/

    I/O controller 用来调度对存储设备的访问——根据系统管理员的配置,对不同类型的进程指定不同级别的访问策略。它可以避免I/O密集型的访问不合理的占用资源,显然,对于那些运行很多个虚拟机的系统,这个非常有用的特性。但是,现在Linux的主线版本,还没有加入I/O controller.

    看这么一张图,是磁盘I/O的过程

    首先是请求Virtual block,是设备映射层,比如 MD RAID Layer,把请求映射到真正的物理设备;但在实际请求物理设备之前还要通过 I/O scheduler,它应用某种策略以提高磁盘访问效率,尽量避免来回的seek;最后才是硬件访问.

    I/O controller可以在block layer里面(上面这个蓝框)的任意一层实现

    【具体技术实现细节就不翻译了】
    1. dm-ioband ,在Virtual Block Layer 实现。这里有两个问题,一个是没有用现成的control group 机制;另外就是它的控制是基于进程的,而对于内核的I/O,比如VM管理,它没有对应的策略。于是原作者又弄了一个 blkio-cgroup patch,解决了这两个问题。

    它的缺点在于,a. 必须要使用设备映射, b. 对底层的I/O scheduler有影响, c. 没有提供任何 QoS 保证,只是做固定的I/O带宽比例分配

    2. io-throttle , 它利用了control group,这样策略参数可以通过 cgroup filesystem来配置。

    它的配置模式中,每个cgroup只能联系一个设备,一方面多个设备就必须配置多个group,但另一方面对不同的设备可以配置不同的策略。

    一个最有意思的设计是它在I/O请求初始化的地方实现,包括内存管理子系统、文件系统、异步I/O的writeback、块设备处理...这样控制带宽的方法之一是让进程去sleep一段时间,看起来这样做比维护一个块IO队列要强。

    io-throttle 的好处在于代码相对来说比较简单,可以通过让进程睡眠的方法来控制流量;它没有真正的 QoS,但在某种程度上有点接近。它的问题在代码侵入性是最强的,涉及的子系统太多,另外它同样会影响I/O scheduler策略

    3. io-controller , 解决了上述两个方案共同的缺点——它在 I/O scheduler那里实现了一个基于cgroup的I/O controller。虽然支持所有的主线 scheduler:CFQ、Deadline、Anticipatory、no-op,但看起来好像主要是针对 CFG 做的优化。

    它弥补了前两个 patch 的缺点,但它不能针对不同的设备配置策略(这是io-throttel的优点),而且并不是在所有 scheduler 下都可靠工作。

    Linux 不太可能引入多个 controller,那它最终会选择哪一个? 目前看 io-controller 最受青睐,但相信其它两个方案也会继续改进直到最后幸运者胜出

    Topic: 技术
    订阅 RSS - qyb的博客