5

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

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

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

  • 开始一个新的空白 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,我的“组件源”文件夹中的类文件似乎与文档不匹配。我也在 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 中,错误表明 VideoPlayerload()只需要一个参数(两个可选),并且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 组件不起作用。

4

1 回答 1

3

匿名,我认为这是文档质量差/不同版本的产品(Flash、Flex、播放器、flvplayback 组件)太多的问题。

我能够让.load()调用与所有 5 个参数一起工作(并验证它确实在指定的开始时间开始播放),但只能通过FLVPlayback_116.swc从最新的 Flex SDK 源代码(Flex 4.6 和playerglobal.swc11.6 版)编译一个新的。

看我的截图

不妨看看它是否适合你。这是您需要做的:

  • 从您的库中删除 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();

此外,您可以看到 my describeTypeofVideoPlayer显示了正确数量的参数:

<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 一样对待它(除了我添加了宽度/高度构造函数参数,因为过去的尺寸来自舞台上的组件)。像这样实例化它:

  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 上找到的皮肤,但它不起作用 - 它可能是为旧版本编译的。查看这个皮肤截图并下载我的skin.swf

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

于 2013-08-02T18:47:42.240 回答