В прошлом я создал проигрыватель для клиента, использующего его сервер 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 метаданных, а затем запуска функции сброса.