Apache flex 使用Flex'在SWF中包装或嵌入音频和MP3;mxmlc编译器

Apache flex 使用Flex'在SWF中包装或嵌入音频和MP3;mxmlc编译器,apache-flex,flash,mp3,mxmlc,Apache Flex,Flash,Mp3,Mxmlc,我们的Flash基于web的应用程序播放大量音频,用于旁白和音效。我们的一些客户有防火墙规则,阻止下载MP3和其他音频文件。因此,我们需要将这些MP3文件包装在SWF中。在过去,我编写了JSFL脚本,使Flash IDE自动化,并完成了一系列复杂而脆弱的步骤,将MP3文件嵌入FLAs,然后发布到SWFs。现在,FlexSDK提供了mxmlc编译器。我已经将ANT混合到我们的工作流程中,命令行和自动化构建是一种乐趣。所以,我想把MP3的转码或包装作为构建过程的一部分。我已经找到了,但这需要我编写一

我们的Flash基于web的应用程序播放大量音频,用于旁白和音效。我们的一些客户有防火墙规则,阻止下载MP3和其他音频文件。因此,我们需要将这些MP3文件包装在SWF中。在过去,我编写了JSFL脚本,使Flash IDE自动化,并完成了一系列复杂而脆弱的步骤,将MP3文件嵌入FLAs,然后发布到SWFs。现在,FlexSDK提供了mxmlc编译器。我已经将ANT混合到我们的工作流程中,命令行和自动化构建是一种乐趣。所以,我想把MP3的转码或包装作为构建过程的一部分。我已经找到了,但这需要我编写一个脚本来生成一个包装类作为文件。有没有更干净的方法将MP3文件包装或转码到SWF中?我想我希望有一种方法可以将mp3直接传递给mxmlc并输出swf,但是如果有比生成actionscript包装类更好的建议,我将不胜感激。

因为您已经在使用mxmlc和Ant,您应该考虑添加另一点代码到Ant构建脚本中,以便将MP3构建到库SWC中。然后,您可以将该SWC构建到可执行SWF中(我在下面的示例中留下了这一简单步骤)

因为您需要的只是Ant,所以这样做并不比构建SWF更困难。唯一真正的“问题”是您需要在代码中使用MXMLC/SWC友好的绝对路径嵌入文件

因为Flash Builder可以访问项目元数据,所以它“知道”项目的根在哪里,从而允许它使用相对嵌入路径。MXMLC没有这些信息。因此,您需要确保声明的嵌入与文件在SWC中的存储方式的绝对位置相匹配。如果您这样做,Flash Builder和MXMLC/Ant都将能够理解您的嵌入。这样,大家都很高兴

为了帮助您,下面是一个构建资产SWC的Ant脚本示例。简而言之,以下是关键步骤:

  • 建立一个字符串,包含要包含的文件的位置,一个接一个
  • 使用MXMLC和一组庞大的命令行参数将这些资产编译成SWC
下面的脚本将JPG、PNG、SVG、TTF、xml文件、属性文件和MP3打包到一个名为“assets.swc”的文件中。您需要将flexTasks.jar(出于明显的原因)和ant-contrib.jar包含在适当的相对位置,并设置FLEX_HOME环境变量

<?xml version="1.0" encoding="utf-8"?>
<project name="My App Builder"
    basedir="."
    default="buildSWC"
    xmlns:antcontrib="antlib:net.sf.antcontrib">
  <taskdef resource="flexTasks.tasks" classpath="${basedir}/libs/flexTasks.jar"/>
  <taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${basedir}/libs/ant-contrib-1.0b3.jar"/>

  <property environment="env"/>

  <property name="FLEX_HOME" value="${env.FLEX_HOME}"/>
  <property name="ASSETS_FILE" value="assets.swc"/>
  <property name="SRC_DIR" value="./src"/>

  <!-- Prepare folders for SWC compilation -->
  <target name="buildSWC">
    <echo message=""/>
    <echo message="*****************************************************"/>
    <echo message="* ${ASSETS_FILE}"/>
    <echo message="*****************************************************"/>
    <echo message="...basedir: ${basedir}"/>

    <!-- Build a swc from statically-included assets (images, mp3s, xml files, properties files) -->
    <fileset id="assets.flex" dir="src" includes="**/*.jpg,**/*.png,**/*.mp3,**/*.css,**/*.svg,**/*.swf,**/*.TTF,**/*.jpeg,**/*.xml,**/*.properties"/>
    <pathconvert pathsep=" " property="assets.flex.output" refid="assets.flex" dirsep="/">
      <map from="${basedir}/src/" to=""/>
    </pathconvert>

    <echo message="...Resources being considered..."/>
    <var name="filelist" value=""/>
    <var name="prefixfilelist" value="-include-file"/>
    <for list="${assets.flex.output}" delimiter=" " param="asset">
      <sequential>
        <echo>Asset: @{asset}</echo>
        <propertyregex property="prop"
                       input="${asset}"
                       regexp="(.*)${SRC_DIR}/(.*)"
                       select="\2"
                       casesensitive="false"
                       defaultvalue="./src/"/>
        <echo>Prop: ${prop}</echo>
        <var name="filelist_tmp" value="${filelist}"/>
        <var name="filelist" unset="true"/>
        <var name="filelist"
             value="${filelist_tmp} ${prefixfilelist} ./@{asset} ${prop}@{asset}"/>
        <var name="prop" unset="true"/>
      </sequential>
    </for>
    <echo message="-output ${ASSETS_FILE} ${filelist}"/>

    <!-- Windows Compile -->
    <exec executable="${FLEX_HOME}/bin/compc.exe"
          failonerror="true"
          osfamily="winnt">
      <arg line="-output ./libs/assets.swc ${filelist}"/>
    </exec>

    <!-- Unix/Linux Compile -->
    <exec executable="${FLEX_HOME}/bin/compc"
          failonerror="true"
          osfamily="unix">
      <arg line="-output ./libs/assets.swc ${filelist}"/>
    </exec>
  </target>
</project>

资产:@{Asset}
道具:${Prop}
我们使用这种方法(我从互联网上找到的点点滴滴拼凑而成——如果我记得在哪里,我会很高兴地给予赞扬)来构建一个基于模块的大型项目及其嵌入的图像和字体。没有理由认为它对音频文件不起作用

祝你好运

泰勒


另外,里面可能有一些剩余/无用的代码行。另外,我不是蚂蚁专家,所以对任何“蚂蚁人”来说:如果我违反了任何最佳实践,请对我放松;)

如果MP3不起作用,你是否验证了主权财富基金的作用?我经常听说防火墙问题会导致流式传输到各个端口时出现问题,但我从未听说过防火墙会按文件名或内容类型阻止文件…是的,SWFs工作正常,客户确认他们有意阻止MP3。我们有一个旧的自动化flashide的解决方案,但它非常脆弱。对系统或Flash IDE的更改会不断破坏它。使用命令行mxmlc和Ant允许我们创建一致、健壮、可复制的构建。