分类存档: Coding - 第2页

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 的引用,否则最后数组里所有元素都和最后一个元素相同了.

继续阅读 »

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

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

输出:

继续阅读 »

【黑科技】bilibili 播放器召回器 插件版

当前版本:1.1

因为爱奇艺买下了好多新番的播放权,所以你懂的 = =. 对我来说关键问题倒不在于广告和弹幕,B站内嵌的爱奇艺的播放器没法全屏实在是火大.

据说是有人做过插件的,不过百毒网盘显然不会允许这种资源存在,只好自己做一个了.

目前我找到的方法为:

javascript:$('<script>').attr('src','//b.dianbo.me/h.js').appendTo($('head'));   ←加入书签

我依此做成了自动化运行的 chrome 插件,如果当前页面的 bilibili 播放器失踪了就会起作用,并且右上角会显示小电视.

安装方法是:在地址栏输入“chrome://extensions”,然后把插件拖进去即可.

js里没有版权信息,在此向原作者表示敬意.

v1.1更新:修复了错误启动导致无限小电视的bug

插件下载(v1.1):http://martin1994-wordpress.stor.sinaapp.com/uploads/2013/04/BilibiliPlayerSwitch1.crx

在 Windows 与 Ubuntu 上 共用 PHP MySQL MongoDB 数据

以前用 win7 + xp 的时候干过双系统共享 iTunes 音乐库的事情,现在该干点尺度更大的事儿了.

在我还在用 wubi Ubuntu 的时候试过把 web 服务器的 www 目录和 Windows 下的合并,但是当时不怎么会改挂载权限于是失败了. 现在入了笔电换了 Windows 8 上了 Ubuntu 12 ,又重新开始捣鼓了.

首先要把共享数据的分区自动挂载,偷懒的话就 umask=0000 ,反正是开发用的机器,windows 下也就这个权限. 如果要使用 mongodb ,请在安装后找到 mongodb 用户的 UID (于 /etc/passwd )并把挂载用户设置为此 UID ,否则 mongodb 没有 ntfs 分区的写权限,鬼知道为什么.

继续阅读 »

在 SAE 上使用 Tornado flush() 的注意事项

我在写 comet 的时候发现 tornado 异步处理的时候 flush() 不起作用,也就是无论什么时候向浏览器发送信息永远都是等连接结束的时候才会收到。我找了很久都没有看到有人碰到类似的问题。今天突然想起来可能是前端 nginx 造成的,如果是 PHP ,分 ob_flush() 和 flush() 之分,前者是 PHP 的缓存输出,后者是 apache/nginx 的缓存输出,但我没有发现 Tornado 有任何的方法可以强制 nginx 输出缓存中的内容。后来我在 stackoverflow 上找到一个解决方法:

这条 header 的意思是告诉 nginx 在本次请求中关闭缓存。使用以后 flush() 立刻正常运作。

WordPress for SAE 补丁发布 附安装教程

当前版本:1.1

移植 WordPress 主程序至 SAE 的步骤其实只有一个,就是修改附件上传. 为了方便各位使用最新版的 WordPress以及防止升级后需要重新移植,我已经把附件移植做成了插件 ChroloAttachment.

本补丁包含:

  • ChloroAttachment | 附件上传兼容插件,已放入 mu-plugins ,自动启动
  • sae_app_wizard.xml | SAE 的一键安装向导
  • memcache object-cache | Memcached 缓存
  • hyper-db | MySQL 数据库读写分离
  • nospamnx | 中文环境下反英文垃圾评论的插件
  • wp-mail-smtp | 使用 SMTP 发送邮件的插件
  • google-sitemap-generator | 经过修改的 SAE 用站点地图生成器
  • 继续阅读 »

    让 WordPress 兼容 SAE 附件上传的插件:ChloroAttachment

    试过才知道原来 WordPress for SAE 升级起来那么方便. 我本来使用的是很久以前应用仓库里的 3.2.1, 最近突然发现应用仓库里的升级到 3.4.1 了,但那已经是去年六月的事了,如今都 3.5.1 了,于是就自己升级了.

    我先注册了一个新应用做测试,我把 SAE 移植版的 3.4.1 装好以后直接把 3.5.1 覆盖上,然后就… 成功了…… 但是很快我就发现附件上传不能使用. 也就是说其实原版 WordPress 只要配置好数据库就是能直接在 SAE 上跑的?果然是牛X的项目.

    好,切入正题. 由于发现不能上传附件,我就开始找手动修复(或者说重新移植)的方法,我觉得大不了再把尘封已久的 ChloroWrapper 请出来呗.. 移植方法 其实很简单,相比于以前移植 thbr、smf 来说工作量根本不是一个数量级的. 但是这个方法其实也并非一劳永逸,由于修改了内核文件,再次升级之后依然会造成附件失效.

    继续阅读 »

    PHP不能开启curl的解决方法 – Apache LoadFile(x86与x86_64皆可)

    许多人在安装PHP之后遇到了curl不能使用的问题,其症状包括而不限于:

    网络上的解决方法有很多种,比如拷文件、改环境变量之类,在我的测试环境下均无效(真是神一般的人品= =)。最终找到了一个解决方法:打开apache的配置文件,在PHP模块加载前添加如下两行:

    这两个文件就是传说中的依赖项,我表示curl这么重要的扩展折腾死那么多人太掉价了..

    P.S. PHP-5.4.3-x64 与 PHP-5.3.13-x64 的curl有些问题,请下载修复过的php_curl.dll。->传送门<-