3

有没有办法检测 Flash 电影是否包含任何声音或正在播放任何音乐?
如果这可以在网络浏览器中完成(来自另一个 flash 对象的动作脚本,javascript,..)并且可以在 flash 电影开始播放之前完成,那就太好了。

但是,我怀疑这是否完全可行,因此也赞赏任何其他(可编程)解决方案

4

3 回答 3

3

是的,肯定在服务器端。客户端?我不知道。(我是服务器端的那种人。)

在服务器端,必须解析文件、读取标题和/或查找音频帧。(我自己将一个 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 事件。这对你来说可能有点晚了,但也许已经足够好了?

于 2008-09-04T11:31:42.333 回答
1

您是在询问 SWF 中的 FLV 视频文件还是 Flash“电影”?

澄清一下,FLV 是 Fl​​ash 视频格式(或任何首字母缩写词),常规的 Flash 电影/应用程序/横幅将是 SWF。这些是非常不同的文件格式。

于 2008-09-04T14:45:06.690 回答
0

使用ByteArray,您几乎可以做任何您想做的事情。在开始播放之前,您可以分析 FLV 标头的字节(使用 byteArray.readByte() 并参考规范)以确定是否打开了音频标志。由于 FLV 标头几乎是立即加载的,因此不会对用户造成任何不便的延迟。

使用 SWF,它会变得很复杂——我很确定没有简单的方法可以提前确定 swf 是否在某处播放音频。一种方法是查看 SWF 在库中定义的资产,然后 swf 可以只加载外部音频文件(或者甚至使用一些 hack 或 Flash player 10 中的新 api 生成它)。如果 swf 是用户提交的(或您无法立即控制的类似内容),我认为这是一条危险的道路..

于 2008-09-12T03:02:08.977 回答