我想使用下面的load()方法,该方法接受五个参数,以便可以从较大的视频中加载一个小的“摘录”:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/video/VideoPlayer.html#load()

特别是startTimeduration参数似乎是我所需要的,但是我收到一些错误,似乎表明我没有正确的对象/版本,即使Adobe文档说它应该可以工作。这是我的步骤:

  • 启动一个新的空白FLA文档(AS3)。
  • 将FLVPlayback组件拖到舞台上,并将其命名为vPlayer。
  • 创建一个新层并在第1帧中添加Actionscript:
    import fl.video.*;
    
    var innerPlayer = vPlayer.getVideoPlayer(vPlayer.activeVideoPlayerIndex);
    trace(innerPlayer); // "[object VideoPlayer]" appears in Output window
    
    innerPlayer.load(
          "RTMP://..."
        , 0 // totalTime
        , false // isLive
        , 60 // startTime
        , 10 // duration
    );
    

  • 从一分钟的标记开始,这应该给我十秒钟的剪辑,但是我不断收到像ArgumentError: Error #1063: Argument count mismatch on fl.video::VideoPlayer/load(). Expected 1, got 5.这样的错误

    我也尝试过将innerPlayer强制转换为fl.video.VideoPlayer,但这是行不通的。

    我究竟做错了什么?

    编辑::即使我使用的是CS4/AS3,并且该文档声称适用于CS4/AS3,但“Component Source”文件夹中的类文件似乎与该文档不匹配。我也在CS6中尝试过此操作,但得到了“1137:参数数量错误。预期不超过3个。”

    @SunilD。 -对于CS4:FLVPlayback.VERSION = 2.1.0.19,我的目标是Flash Player 10(最新版本)+ AS3。对于CS6,FLVPlayback.VERSION = 2.5.0.26,我的目标是Flash Player 11.4。

    在CS4和CS6中,错误表明VideoPlayer load()仅需要一个参数(带有两个可选参数),而play()具有三个可选参数。 describeType(innerPlayer)的输出确认:
    <type name="fl.video::VideoPlayer" base="flash.media::Video" isDynamic="false" isFinal="false" isStatic="false">
        ...
      <method name="play" declaredBy="fl.video::VideoPlayer" returnType="void">
        <parameter index="1" type="String" optional="true"/>
        <parameter index="2" type="Number" optional="true"/>
        <parameter index="3" type="Boolean" optional="true"/>
      </method>
        ...
      <method name="load" declaredBy="fl.video::VideoPlayer" returnType="void">
        <parameter index="1" type="String" optional="false"/>
        <parameter index="2" type="Number" optional="true"/>
        <parameter index="3" type="Boolean" optional="true"/>
      </method>
        ...
    </type>
    

    其他说明:Flash CS6是最新的。手动安装FLVPlayback 2.5组件无效。

    最佳答案

    Anon,我认为这是一个糟糕的文档/具有不同版本的太多不同产品(Flash,Flex,播放器,flvplayback组件)的问题。

    我能够通过所有5个参数使用.load()调用(并验证它确实在指定的开始时间开始播放),但是只能通过从最新的Flex SDK源代码(带有FLVPlayback_116.swc版本11.6的Flex 4.6)中编译新的playerglobal.swc来进行。 )。

    看到我的screenshot

    还可以查看它是否对您有用。这是您需要做的:

  • 从库中删除FLVPlayback组件-这定义了与更新版本冲突的类。
  • 下载我的FLVPlayback_116.swc
  • FLVPlayback_116_air.swc(如果您定位的是Adobe AIR,而不是Flash Player/web
  • )
  • 在Flash中,打开File -> ActionScript Settings对话框,在库路径选项卡下,单击“浏览到SWC文件”,然后找到刚下载的FLVPlayback_116.swc文件。我上面的屏幕截图显示了此对话框,以及添加后如何列出FLVPlayback_116.swc文件。
  • 在代码中(如下所示):
  • 您需要设置:fl.video.VideoPlayer.iNCManagerClass = fl.video.NCManager;
  • 而不是使用innerPlayer = vPlayer.getVideoPlayer,您需要先使用innerPlayer = new VideoPlayer(width,height),然后再使用addChild(innerPlayer)innerPlayer.play()
  • 我必须添加innerVideo.play()调用才能开始视频播放(我假设GUI会处理)

  • 这是我的代码(也可以在屏幕截图中看到):
    import fl.video.*;
    
    fl.video.VideoPlayer.iNCManagerClass = fl.video.NCManager;
    var innerPlayer = new VideoPlayer(640,480);
    addChild(innerPlayer);
    
    innerPlayer.load(
          "http://10.0.1.3/test.flv"
        , 0 // totalTime
        , false // isLive
        , 5 // startTime
        , 5 // duration
    );
    innerPlayer.play();
    

    另外,您还可以看到我的describeTypeVideoPlayer显示了正确数量的参数:
    <method name="load" declaredBy="fl.video::VideoPlayer" returnType="void">
      <parameter index="1" type="String" optional="false"/>
      <parameter index="2" type="Number" optional="true"/>
      <parameter index="3" type="Boolean" optional="true"/>
      <parameter index="4" type="Number" optional="true"/>
      <parameter index="5" type="Number" optional="true"/>
      <metadata name="__go_to_definition_help">
        <arg key="pos" value="41308"/>
      </metadata>
    </method>
    
    <method name="play" declaredBy="fl.video::VideoPlayer" returnType="void">
      <parameter index="1" type="String" optional="true"/>
      <parameter index="2" type="Number" optional="true"/>
      <parameter index="3" type="Boolean" optional="true"/>
      <parameter index="4" type="Number" optional="true"/>
      <parameter index="5" type="Number" optional="true"/>
      <metadata name="__go_to_definition_help">
        <arg key="pos" value="34410"/>
      </metadata>
    </method>
    

    更新:我已经更新了库,以便您可以实例化FLVPlayback(w,h)并因此应用外观或其他方式-就像在上面代码中的vPlayer一样对待它(除非我添加了width/height构造函数args,因为尺寸通常来自舞台上的组件)。像这样实例化它:
      var vPlayer:FLVPlayback = new FLVPlayback(640,480);
      vPlayer.skin = "http://10.0.1.3/skin.swf"; // optional skin
      addChild(vPlayer);
      var innerPlayer = vPlayer.getVideoPlayer(vPlayer.activeVideoPlayerIndex);
      innerPlayer.load(
                       "http://10.0.1.3/test.flv"
                       , 0 // totalTime
                       , false // isLive
                       , 5 // startTime
                       , 5 // duration
                       );
    

    注意-要使用皮肤,我编译了Flash CS6中的一个FLA示例...我尝试使用在Internet上找到的皮肤,但它不起作用-可能是为旧版本编译的。看到这个skinned screenshot并下载我的skin.swf

    祝您好运,如果您需要更多信息,请告诉我!

    关于actionscript-3 - 可以接受5个参数的FLVPlayback/VideoPlayer : How to access VideoPlayer. load()方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17776642/

    10-10 06:06