Интервал обновления заголовка воспроизведения FLV в миллисекундах, т.е. поиск не ключевого кадра

У меня проблемы с обнаружением событий обновления точки воспроизведения в миллисекундном диапазоне. Это касается воспроизведения FLV загруженного фильма в формате FLV. Согласно документации, функция seek () ищет ключевые кадры, для ввода требуется время с точностью до миллисекунд. У меня есть функция, называемая следующий кадр, где я приостанавливаю видео и пытаюсь перейти к заданному времени воспроизведения

    function onNextFrame(event:Event)
    {
        if (video1.playing)
        {
            video1.stop();
        }
        playHeadTime=Number(playHeadTime.toFixed(2));
        trace("Calling nextFrame :::",playHeadTime);
        trace(" Before seek ",video1.playheadTime);
        video1.seek(playHeadTime);
        playHeadTime +=  0.1;
    }

У меня также есть событие поиска, которое обновляется не для каждого поиска, а только при появлении ключевого кадра в видео FLV.

function onseeked(event:Event)
        {
            trace("seeked",video1.playheadTime);
        }

У меня также есть событие обновления точки воспроизведения для отслеживания движения точки воспроизведения, но оно не обновляется при использовании функции следующего кадра. работает только при нормальном воспроизведении видео.

video1.playheadUpdateInterval = 30;
video1.seekToPrevOffset = 0.01;
video1.addEventListener(VideoEvent.SEEKED,onseeked);
video1.addEventListener(VideoEvent.PLAYHEAD_UPDATE,onPlayHeadUpdate);
function onseeked(event:Event)
        {
            trace("seeked",video1.playheadTime);
        }

У меня вопрос

  • Как сделать так, чтобы точка воспроизведения обновлялась с точностью до миллисекунд, когда видео приостанавливается / останавливается и выполняется поиск по времени.
  • Как мне обновить точку воспроизведения в первую очередь, когда кажется, что поиск работает только по ключевому кадру. Как мне перейти к времени без ключевого кадра?

Соответствующее обсуждение этого, но которое также не дает никакого решения, является

Как перейти к неключевому кадру в проигрывателе flv


Обновление: даже с netstream.seek () каждый последующий вызов функции не показывает изменения в video.playheadtime. Он работает так же, как video.seek ().

video.playheadtime=0.1

Такое назначение также не работает при изменении / обновлении свойства точки воспроизведения.

Как добиться быстрой перемотки вперед / назад?


person Aditya P    schedule 23.03.2011    source источник
comment
Разве это не полностью зависит от того, сколько ключевых кадров у вас есть в закодированном FLV? Чем больше ключевых кадров = больший размер файла = больше точности для поиска, верно?   -  person jpea    schedule 23.03.2011
comment
В документации говорится, что поиск будет идти по ближайшему ключевому кадру. Если вы хотите большей точности, вам нужно будет перейти к предыдущему ключевому кадру, воспроизвести его, прослушать события обновления точки воспроизведения, проверить время воспроизведения и приостановить его сразу после того, как пройдет нужное вам время. Для дополнительной точности времени обновления точки воспроизведения установите для playheadUpdateInterval значение 1000 / stage.framerate, потому что по умолчанию это четверть секунды (250 мс), что очень точно.   -  person Triynko    schedule 27.09.2012


Ответы (1)


проверьте, есть ли в метаданных flv canseekontime = false
, также проверьте, работает ли NetStream.seek(12.222/*milliseconds/1000*/) с тем же flv

person www0z0k    schedule 23.03.2011
comment
получать keyframes = [object Object] (times, filepositions) в метаданных? - person www0z0k; 28.03.2011
comment
отследить отметку времени позиций ключевых кадров и использовать ее для поиска? мы не получим промежуточных. быстро / медленно - person Aditya P; 28.03.2011