【发布时间】:2013-11-29 09:27:43
【问题描述】:
早安,
我正在开发视频 Flash 播放器以进行流式传输。我想要做的是显示流的总时间,而不是用户观看流的时间。 我现在有一个问题,当我暂停然后播放视频时,当前时间会重新开始。 您有什么想法可以解决我的问题并解决另一个问题吗? :)
**我正在使用 NetStream
【问题讨论】:
标签: actionscript-3 flash timer stream netstream
早安,
我正在开发视频 Flash 播放器以进行流式传输。我想要做的是显示流的总时间,而不是用户观看流的时间。 我现在有一个问题,当我暂停然后播放视频时,当前时间会重新开始。 您有什么想法可以解决我的问题并解决另一个问题吗? :)
**我正在使用 NetStream
【问题讨论】:
标签: actionscript-3 flash timer stream netstream
好的,对于第一个问题,您要做的是设置一个函数来接收视频的元数据并将该值保存在某个地方。
首先,当您创建您的 NetStream 对象时,您需要将一个客户端添加到引用函数 onMetaData 的 NetStream。
var ns:NetStream; //your NetStream Object
var client:Object = new Object(); //Create an Object that represents the client
client.onMetaData = onMetaData; //reference the function that catches the MetaData of the Video
ns.client = client; //assign our client Object to the client property of the NetStream
//Once MetaData is available, it'll call onMetaData with all of the information
function onMetaData(metaData:Object):void
{
duration = metaData.duration; //duration is the variable that is supposed to total length of the video
}
现在使用duration 值,您可以获得当前正在使用该 NetStream 对象播放的电影的总播放时间。
您可以通过多种方式解决第二个问题,例如:
只需保留一个名为 pause 的 Boolean 变量,用于跟踪视频当前是否正在播放。
var paused:Boolean = false; //assuming the video is currently playing
var currentTime:Number = 0;
var button:Button; //some kind of play/pause button
button.addEventListener(MouseEvent.CLICK,onButtonClick);
function onButtonClick(event:MouseEvent):void
{
if(paused)
{
paused = false;
ns.resume();
//ns.play(currentTime) //this also works
}
else
{
paused = true;
ns.pause();
currentTime = ns.time;
}
}
【讨论】:
您必须从文件的元数据中提取信息。
【讨论】:
谢谢你的回答:)。
DodgerThud,我今天早上就我的第二个问题尝试了你的解决方案。我试过你的解决方案,我得到了这个:持续时间:NaN。如果我理解得很好,我的问题是我没有流的元数据......
if(isLiveStream == false) {
if(title == preroll || Number(duree) <= 0) {
duration=infoObject.duration+timeOffset;
} else {
duration=Number(duree);
}
}
这些行在 onMetaData 函数上。
谢谢你帮助我。 祝你有美好的一天。
【讨论】: