Как использовать функцию play2 () для быстрого переключения потокового видео? - PullRequest
50 голосов
/ 27 июля 2011

В настоящее время я работаю над Flash-плеером с функцией переключения разрешения. Я пытаюсь использовать функцию play2() класса NetStream в Actionscript.

Проблема, с которой я сталкиваюсь, заключается в том, что видео не меняется быстро. Для тех, кто знаком с функцией play2(), я считаю, что игрок выполняет "standard switch", а не "fast switch."

В документации сказано, что , когда параметр смещения равен -1, происходит быстрое переключение. Что на самом деле происходит, хотя после получения события "NetStream.Play.Transition" игрок ждет, пока не наступит время, обозначенное ns.time + ns.bufferLength, прежде чем выполнить переключение.

Я думал, что быстрое переключение очистило буфер, но при проверке на ns.backbufferlength я обнаружил, что все еще кэшируется. Также упоминается: «Когда смещение равно -1, переключение происходит на первом доступном ключевом кадре после netstream.time + 3», поэтому я запутался.

Любая помощь / понимание по этому вопросу будет высоко ценится.

Вот фрагмент кода, описывающий происходящее (newStream() вызывается, когда пользователь нажимает, чтобы перейти к новому разрешению, стиль youtube):

public function newStream(address:String):void
{
    var opts:NetStreamPlayOptions = new NetStreamPlayOptions();
    opts.streamName = address;
    opts.transition = NetStreamPlayTransitions.SWITCH;
    opts.offset = -1;
    ns.play2(opts);
}

private function nsCallback(event:NetStatusEvent)
{
    switch(event.info.code)
    {
        case "NetStream.Play.Transition":
        {
            trace("Current time (on Transition): " + 
                  ns.time, "Buffer: " + ns.bufferLength);
            var estTime:Number = ns.time + ns.bufferLength;
            trace("Estimated Completion Time: " + estTime);
            break;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 30 января 2013

Возможно, что сервер пытается найти ближайший i-кадр к текущему смещению, и это занимает время.Если вы знаете, что такое FPS и время между двумя i-кадрами, вы можете попытаться найти время, очень близкое к следующему или предыдущему i-кадру, что ускорит поиск и обслуживание.информация о i-frame: http://en.wikipedia.org/wiki/Video_compression_picture_types

1 голос
/ 28 декабря 2012

Как сказано в Документации : «Значение смещения по умолчанию равно -1, что по умолчанию переключает поведение на стандартное. В этом режиме сервер определяет хорошую точку перехода между потоками вперед во времени отточка, в которую он получает вызов переключателя, и переключается в этой точке. "

Таким образом, вы должны изменить параметр 'offset' на значение выше текущего времени воспроизведения (Netstream.time).Если значение меньше, отправляется событие состояния NetStream.Play.Failed.

...