是否可以检测Flash电影中是否还包含(播放)声音?
有没有一种方法可以检测Flash电影中是否包含声音或者播放的音乐?
如果可以在网络浏览器(另一个Flash对象的动作脚本,javascript,..)内完成,并且可以在Flash电影开始播放之前完成,那将是很好的。
但是,我怀疑这是否完全可能,因此也欢迎使用任何其他(可编程)解决方案
解决方案
回答
是的,肯定在服务器端。客户端?我不知道。 (我是服务器端的家伙。)
在服务器端,必须解析文件,读取标头和/或者查找音频帧。 (我本人已将haskel FLV解析器移植到Java上以用于建立索引目的,并且那里还有其他解析实用程序。有可能。)
osflash.org的FLV页面包含详细信息。查看" FLV格式"部分的" FLV标题"表。
FIELD DATA TYPE EXAMPLE DESCRIPTION Signature byte[3] “FLV” Always “FLV” Version uint8 “\x01” (1) Currently 1 for known FLV files Flags uint8 bitmask “\x05” (5, audio+video) Bitmask: 4 is audio, 1 is video Offset uint32-be “\x00\x00\x00\x09” (9) Total size of header (always 9 for known FLV files)
编辑:我的Flash客户端编码不存在,但我相信代码可能会捕获到onMetaDataLoad事件。这可能对我们来说有点晚了,但也许足够好了吗?
回答
我们是在询问SWF中的FLV视频文件或者Flash"电影"吗?
需要澄清的是,FLV是Flash视频格式(或者任何缩写),常规的Flash电影/应用程序/横幅将是SWF。这些是非常不同的文件格式。
回答
使用ByteArray,我们可以完成几乎所有我们想做的事情。在开始播放之前,我们可以分析FLV标头的字节(使用byteArray.readByte()并参考规范)以确定是否已打开音频标志。由于FLV标头几乎是立即加载的,因此不会给用户带来任何不便的延迟。
借助SWF,这非常麻烦-我敢肯定,没有一种简单的方法可以预先确定SWF是否在某处播放音频。一种方法是查看SWF在库中定义的资产,然后swf可以仅加载外部音频文件(甚至通过一些hack或者Flash Player 10中的新api生成它)。如果瑞士法郎是用户提交的(或者类似的东西超出了直接控制范围),我认为这是一条冒险的道路。