我过去曾使用他们的 LimeLight 服务器为客户端创建了一个播放器来流式传输视频并且之前没有遇到问题,但是对于使用不同 LimeLight 服务器的新客户端,视频似乎过早结束 3-4 秒。
我在我测试的 3 个截然不同的视频上的痕迹:
metadata duration = 32 // 32 secs long, ends at 27
Stop [27.350 seconds] = 4.65
metadata duration = 17 // 17 secs long, ends at 12
Stop [12.852 seconds] = 4.148
metadata duration = 258 // 258 secs long, ends at 255
Stop [255.861 seconds]
在我检查的视频播放器中,NetStream.Play.Stop
然后在其中放置一个“重置”类型的功能。然而,由于这个奇怪的错误,这个函数触发得太早了。有没有人见过这个?
private function netStatusHandler(event:NetStatusEvent):void
{
trace("connected is: " + nc.connected );
switch (event.info.code)
{
case "NetConnection.Connect.Success":
trace("Connected");
connectStream();
break;
case "NetStream.Play.Start":
trace("********** Start [" + ns.time.toFixed(3) + " seconds]");
break;
case "NetStream.Play.Stop":
trace("‹ ----------- Playback has stopped. ----------- ›");
trace("Stop [" + ns.time.toFixed(3) + " seconds]");
if (nsBuffering){ removeChild(bufferAni); }
nsBuffering = false;
videoStatus = "NotPlaying";
resetVideo(); //<- Video ends so go back to start
// ^ This triggers too early
break;
}
}
我看到的唯一解决方法是保存从元数据持续时间获得的初始数字,并运行一个计时器来不断检查当前 ns.time 何时与元数据匹配,然后运行我的重置功能。