Подтвердить что ты не робот

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

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

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

В документации указано, что, когда параметр offset равен -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;
        }
    }
}
4b9b3361

Ответ 1

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

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

Ответ 2

Возможно, сервер пытается найти ближайший i-frame для текущего смещения, и это требует времени. Если вы знаете, что такое FPS и время между двумя i-кадрами, вы можете попытаться найти время, очень близкое к следующему или предыдущему i-кадру, что ускорит поиск и обслуживание.

Дополнительная информация о i-frame: http://en.wikipedia.org/wiki/Video_compression_picture_types