FLV 播放/视频播放器:如何访问接受 5 个参数的 Video Player.load() 方法?

Posted

技术标签:

【中文标题】FLV 播放/视频播放器:如何访问接受 5 个参数的 Video Player.load() 方法?【英文标题】:FLVPlayback/VideoPlayer: How to access VideoPlayer.load() method that accepts 5 parameters? 【发布时间】:2013-07-20 13:01:22 【问题描述】:

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

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

特别是,startTimeduration 参数似乎是我需要的,但我收到的错误似乎表明我没有正确的对象/版本,即使 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: Incorrect number of arguments. Expected not more than 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 组件不起作用。

【问题讨论】:

好吧,很明显 vPlayer.getVideoPlayer() 没有返回 VideoPlayer 的实例。您可以尝试像这样强制转换 innerPlayer,但除非 vPlayer.getVideoPlayer() 实际上返回一个,否则这将不起作用。没有看到更多代码 - 无法进一步评论。 @hunter - 我添加了一个 trace() 语句,似乎表明它是 VideoPlayer 的一个实例,当我强制转换时,它不会返回 null。我发布的代码几乎就是一切!我在顶部添加了一个导入语句。 哎呀 - 美元的痛苦。老实说,我总是使用 100% AS3(无组件),所以也许我不是最好的回答者。但是,我启动了 Flash CS6,并尝试了您的代码,并得到了相同的错误。我尝试直接声明和实例化一个 VideoPlayer 对象,并且 load() 函数请求了 3 个参数。通过 FLVPlayback.getVideoPlayer() 获取 VideoPlayer 对象导致 load() 仅接受 1 个参数。我知道这对您没有多大帮助,但至少您知道这不是您的组件文件出现的问题。 我会通过采取更多步骤来准确地确定您正在使用的对象来调试它。由于 trace() 输出似乎表明您有一个 VideoPlayer 对象,因此它可能是 VideoPlayer API 的某个早期版本。您可以尝试检查 describeType(innerPlayer) ... 的输出(您可以查看 load() 方法实际具有的参数,或者找到其他线索来确认该对象实际上是什么)。您还可以仔细检查您的发布设置,并确保您发布的 SWF 尽可能以最新版本的 Flash Player 为目标。 不确定这有多大帮助,但 FLVPLayback 组件有一个 VERSION 常量。文档中的版本号是 2.1.023。 trace(FLVPlayback.VERSION) 在您的环境中输出什么?您的VideoPlayer.play() 方法接受多少个参数?那应该与load() 方法具有相同的参数...最后,如果您让播放器使用visibleVideoPlayerIndex 而不是activeVideoPlayerIndex,这有什么不同吗?或者如果你设置activePlayerIndex=1(默认为0)并尝试使用它呢? 【参考方案1】:

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

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

见我的screenshot。

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

从您的库中删除 FLVPlayback 组件 - 这定义了与更新版本冲突的类。 下载我的FLVPlayback_116.swc库 或FLVPlayback_116_air.swc,如果您的目标是 Adob​​e AIR,而不是 Flash Player / web 在 Flash 中,打开 File -&gt; ActionScript Settings 对话框,在库路径选项卡下,单击“浏览到 SWC 文件”并找到您刚刚下载的 FLVPlayback_116.swc 文件。我上面的屏幕截图显示了此对话框以及添加后FLVPlayback_116.swc 文件的列出方式。 在代码中(见下文): 需要设置:fl.video.VideoPlayer.iNCManagerClass = fl.video.NCManager; 您需要使用innerPlayer = new VideoPlayer(width,height),然后使用addChild(innerPlayer)innerPlayer.play(),而不是使用innerPlayer = vPlayer.getVideoPlayer 我必须添加 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 一样对待它(除了我添加了宽度/高度构造函数参数,因为尺寸曾经来自舞台上的组件)。像这样实例化它:

  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。

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

【讨论】:

确认您的组件和示例代码工作正常。令人难以置信的工作!为了完整起见,您能否添加用于为播放器设置皮肤的代码? 仅供参考,我添加了关于使用皮肤的说明。

以上是关于FLV 播放/视频播放器:如何访问接受 5 个参数的 Video Player.load() 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HTML 视频标签中播放 FLV 视频?

EasyPlayer播放FLV的H.265编码视频时出现两个FLV请求,如何调整?

如何在移动网络浏览器上播放 flv 视频? [复制]

如何在 chrome 中使用 video.js 播放 flash(.flv) 视频

网页flv视频播放代码

以编程方式将视频转换为 FLV [关闭]