FLVPlayback / VideoPlayer:如何访问接受5个参数的VideoPlayer.load()方法?

时间:2013-07-21 20:35:24

标签: actionscript-3 flash actionscript flvplayback video-player

我想使用以下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,但这不起作用。

我做错了什么?


EDITS :即使我使用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组件不起作用。

1 个答案:

答案 0 :(得分:3)

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

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

查看我的screenshot

不妨看看它是否适合你。以下是您需要做的事情:

  • 从库中删除FLVPlayback组件 - 这将使用更新的版本定义冲突的类。
  • 下载我的FLVPlayback_116.swc图书馆
  • 在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();

此外,您可以看到我的describeType VideoPlayer显示了正确数量的参数:

<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一样对待它(除了我添加了宽度/高度构造函数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

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