As3 使用 FlvEncoder 输出 1080p 视频

话接上回,这次真刀真枪输出1080p的视频了. 前前后后折腾了一天,终于顺利输出无报错了,注意点有两个:

1. 不要使用 FlvEncoder 的 Alchemy 模式,我每次渲染都会在进行到一分多钟的时候报错,排查下来是使用 Alchemy 的 helper 不能正常生成 ArrayByte (长度为0,位于 VideoPayloadMakerAlchemy.as Line 74). Adobe 自己也反复表明不建议将其用于生产环境中,看来还是有道理的.

继续阅读 »

AIR 及 Flv Encoder 初体验

作为一个 AS 起手的 Coder,代码写来写去还是 AS3 写起来最舒服,只是由于不能文件操作等问题,再加上现在做网页前端也基本用不到 Flash 了,便荒废了很久. 这次终于把录了半年的 Rain Stops, Goodbye (音频部分)杀青了,着手做 PV ,却又不想像以前那样用 Windows Live Movie Maker 随便做做了事,所以就想到用 as3 来动态生成一些内容最终做成视频.

其中涉及到的一个重要的问题就是视频编码,我稍稍 Google 了一圈,能找到的现成的编码器不多,其中 zero point nine 的 Flv Encoder 感觉还不错:第一,这是无损编码;第二,它支持在AIR环境下直接把视频写入硬盘.

AIR 环境算是让 AS3 摆脱了一些束缚,使其能作为一门常规的语言来开发,或者说终于能用 AS3 写软件了. 而且只要把运行环境改成 AIR 就可以直接使用原来的 Flash. 但是有一点要注意,在 Windows 下不能将源文件和发布的文件保存在中文路径下,不然会提示“Test Movie terminated. application descriptor not found”. 建议发布的时候选 Application with runtime embedded 不然的话还要很二地“安装”完才能用. 我用 Flash Builder 的时候就觉得这个设定很二,为何不干脆一点生成个能直接运行的二进制文件,真要搞什么安装可以作为可选附件.

Flv Encoder 的使用很简单,基本上把作者提供的 Example 改一改就能用了,基本没有其他需要翻文档的地方. FlvEncoder.addFrame() 是 Flv Encoder 用来写入帧的函数,第一个参数是图像数据(bitmapData),第二个参数是音频数据(ByteArray). 图像数据只要创建一个 ENTER_FRAME 的事件,每帧用 bitmapData.draw() 把舞台上的东西截下来就行了. 音频数据则比较复杂:作者提供的 Demo 做的是一个记录摄像头的工具,音频来自于输入设备;而我是要从本地读取 mp3 再读出每一帧之间的采样点.

继续阅读 »

在用循环生成的匿名函数中使用jquery选择器 – JS函数式编程

群里有人问怎么生成一个包含调用一系列jquery对象里函数的数组,其实首选方案是数组里直接存对象,不过这个问题值得研究一下.

首先贴上一段简单的html:

其中的 your_codes(); 则是接下来要说的实现代码.

一开始我的写法是这样:

但最后生成的函数会随着 i 从栈中的消失而失去作用. 也就是说,在匿名函数内的变量 i 不能是循环里那个 i 的引用,否则最后数组里所有元素都和最后一个元素相同了.

继续阅读 »

Windows 8 + Ubuntu 12 双系统 Legacy BIOS 转 UEFI 启动纪实

注意:这是一篇记录性质的日志,并不是一篇教程. 我最后成功将两个系统由 UEFI 引导了,但是花了不少功夫,绝对不是最佳步骤,本文仅供要做同样事情的人参考.

在帮弟弟装系统的时候发现他的笔记本不支持 UEFI 启动,回去随手看了一下自己的主板发现居然可以,但是我的 win8.1 和 ubuntu12.10 已经以 Legacy BIOS 方式安装了,网上找了一圈也没见到如何转换的教程.

我有两块硬盘,一块 SSD 内安装着 Windows 8.1 与 Ubuntu 12.10 ,由 Windows 的 Bootmgr 引导 Grub Legacy , 一块 HDD 内安装着 Windows 7.

首先 Legacy BIOS 方式安装的系统是安装在 MBR 分区格式上的,如果要用 UEFI 方式启动 Windows 8 ,则必须将硬盘分区改成 GPT 格式的. Windows 下有 diskpart 工具可以完成转换工具,于是找了篇教程:

http://www.iruanmi.com/convert-gpt-to-mbr-or-convert-mbr-to-gpt-use-diskpart-tool/

但是,注意教程中的以下语句:

继续阅读 »

多伦多冻雨灾区实景

由于圣诞假期间 UWaterloo 的宿舍关门大吉,我被赶到了多伦多,临走前瞄了一眼天气预报:嗯,Freezing Rain,冻雨?

结果,还真是冻雨,看着不觉得,只是气温低,有种上海的阴冷(但我坚信还是比上海的冬天暖和),与一般的雨别无二致;而到了晚上,我走在人行道上的时候觉得莫名的滑,不是一般的滑,滑的地方简直就跟踩了一脚滚珠轴承一样,但这个路面是一块滑一块不滑,所以勉强可以站立,尽管如此,还是有点行走困难.

第二晚,这种莫名的滑感更严重了,公车司机在开门前都会提醒站台会特别的滑要格外小心;但这不是,重点,好戏就是从这第二晚开始的:

WP_20131221_22_51_22_Pro

虽然看到这一幕并不感到惊讶,过冷水降下来经过了一天多才这样从理论上讲并不奇怪,但是当实实在在看到这一幕在整个城市发生的时候,就这个感觉:这你敢信?

继续阅读 »

PHP foreach 语句以及引用导致的 bug

刚解决了一个 BRN 的诡异 bug: 玩家控制系统里会重复出现同一个玩家的数据,占用的键却是其他人的. 经过一番排查定位到了一段 foreach 语句附近. 抽象后的代码如下:

输出:

继续阅读 »

枫叶国CDMA信号奇遇记

我的手机卡是电信CDMA网络的,没有换国际卡,换国际卡的话在没有CDMA信号的地方会使用GSM信号在香港转回CDMA.

在多伦多下飞机以后我收不到CDMA信号,しまった. 出了航站楼以后突然收到了非常微弱的信号,还收到了两条使馆的短信. 在多伦多市区内,信号断断续续,经常会有几秒钟的信号,然后断线.

几天后,我搭上了从多伦多往蒙特利尔的火车,神奇的事情出现了:在途中我收到了持续稳定的信号,强度还不弱,手机的时间往前拨了两个小时,我还以为蒙特利尔和多伦多要差俩小时. 但是我到了蒙特利尔信号又消失了,变回了像多伦多的状况.

今天我乘火车回多伦多,路上更神奇的事情出现了:之前我显示的运营商都是中国电信,这次突然变成了Verizon,时间再次往前拨了两个小时. 也就是说我在加拿大收到了两个时区外从美国飘来的信号?

正确的时间应该是10:41

运营商显示的是Verizon

Last Night, Good Night

ありがとう、サヨナラ  

当似火骄阳的季节又降临  

那时会有怎样的自己  

而那时又会有着怎样的你  

Cherry 机械键盘清洗记

作为一个被动技能碰翻杯子 20 级的机械键盘用户,我成功地再一次把整杯果汁翻进了键盘,我一怒之下就把键盘给洗了,反正都是要晒两天. 别人要是问:“高考前两天你在干啥?” 我便可以大言不惭地说:“洗键盘!”

准备开始拆键帽

准备开始拆键帽

键帽从下往上拆,用手从下面往上翻就行了. 我刚买回来的时候拆键帽怎么拆都是连轴一块儿下来的,这次倒是没有一个是连轴一起被拆的.

键帽从下往上拆,用手从下面往上翻就行了. 我刚买回来的时候拆键帽怎么拆都是连轴一块儿下来的,这次倒是没有一个是连轴一起被拆的.

继续阅读 »

以此向陪伴我高中三年的单车告别

昨天刚网购了两对刹车皮装上还把螺丝调好,今天去静安寺就被神秘人领走了. 没了车的话机动性大幅下降啊,今后的两个月只能做轨交了,好在魔都轨交发达,不然就死家里了.

我走了以后这辆车也就是躺在家里等着生锈,所以就当是送人了吧. 倘若是下一个主人没能善待,呵呵,你很快就会倒霉的. (获得成就:真传)

两年前大炮的车卒于静安寺,当天报的案,至今没消息,还要提供发票什么的. 我要是找得到发票那就去备个案,找不到就算了,反正也不会找到车子的= =

要是依着大炮的法子停在那个角落里的公安局门口,大概也不会有事了,偏偏听了某人停在了那个阴暗的角落. 白天看不出来,一到晚上根本就没有光. 总之要找地方停车的话,还是选人多的地方比较靠谱,公安局门口除外.