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()
特别是,startTime
和 duration
参数似乎是我需要的,但我收到的错误似乎表明我没有正确的对象/版本,即使 Adobe 文档说它应该工作。这是我的步骤:
创建一个新层并在第 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,如果您的目标是 Adobe AIR,而不是 Flash Player / web 在 Flash 中,打开File -> 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();
此外,您可以看到我的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 一样对待它(除了我添加了宽度/高度构造函数参数,因为尺寸曾经来自舞台上的组件)。像这样实例化它:
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() 方法?的主要内容,如果未能解决你的问题,请参考以下文章
EasyPlayer播放FLV的H.265编码视频时出现两个FLV请求,如何调整?