有没有办法检测 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 生成它)。如果 swf 是用户提交的(或您无法立即控制的类似内容),我认为这是一条危险的道路..