![]() |
|
||||||||||
|
|
|
|||||
|
Добрый день,
Cтолкнулся вот с какой проблемой: Средствами NetStream воспроизвожу видео (локально или с любого возможного адреса). Некоторое видео содержит Метадату. Из метадаты получаю массив в котором есть array значение seekpoints. Значение имеет такой вот вид: seekpoints(:Array) = [
[0] = {offset: 3209009, time: 0},
[1] = {offset: 3662767, time: 10},
[2] = {offset: 4084599, time: 20},
[3] = {offset: 4165723, time: 21.72},
...
]
Но - безрезультатно (( Так же безрезультатен переход в любые другие позиции которые описаны в массиве, но что странно что это проблема только когда я пытаюсь делать переход вперед от текущей позиции, переход в обратную сторону (назад) работает, ...но как то странно, с неточным отступом. Хотелось бы разобраться как в "паузе" осуществить переход в любую позицию видео строго по значению минута:секунда. Подскажите - есть ли возможность перемещать позицию в видео средствами seek, к примеру, на +/- пол секунды? Буду благодарен за информацию о тонкостях позиционирования! |
|
|||||
|
На сколько я знаю, перематывает только на положение кейфрейма. Чем реже кейфреймы в видео тем менее точно может быть сделан seek.
Почему не работает seek вперед - хз... у меня такое было только с недогруженным видео. У вас прогрессивная загрузка или потоковое вещание? перемотка на +-0.5 сек: |
|
|||||
|
Modus ponens
|
На сколько я понимаю, то для этого нужно, чтобы видео было в буффере. В смысле то место, куда вы собираетесь переходить. Если оно еще не загрузилось, то как бы не получится... А вообще, если вы можете использовать эту фичу, т.е. версия плеера позволяет, так я бы делал URLStream + appendBytes, так хоть контроль есть за тем что и когда загружается. Ю-тьюб тоже так делает. Доверять адобовским АПИ в том что связано с точностью или надежностью, уже столько раз обжигался, что ну его задумываться
Как правило все все равно заканчивается тем, что нужно делать используя какие-то обходные пути с минимальной привязкой к высокоуровневым АПИ. (Уже не говоря о маразматическом дизайне - какого-то лешего размер буффера в Адоби считают в секундах ожидания загрузки - это ж еще додуматься до такого надо было...)
__________________
Hell is the possibility of sanity |
|
|||||
|
Чего-чего?
![]() Чуть подробнее пожалуйста. |
|
|||||
|
Мной описанная проблема возникает даже при локальном проигрывании видео файла! Т.е. я осуществляю переход на необходимые мне позиции в видео ролике тогда когда bytesLoaded == bytesTotal. Даже когда буфер заполнен, переход вперед - не работает. Если произвольно баловаться с величиной отступа (nsNetStream.time + N) иногда срабатывает, иногда - нет (т.е. - остаюсь в той же позиции, от которой пытался перематывать). Я так понял что еще многое зависит от видео исходника (загружаемого .flv, .mp4). Видимо величина отступа между keyframe`ами задается еще на стадии кодирования. Пока что во всех моих случаях даже на вооружении с данными из metadata - все равно ничего не хочет работать, или работает - но с какими то видео роликами - да, а с какими то - нет. Найти золотую середину - не получается, ...хотя даже если я задам отступ на +/- 15 секунд то это не решает мою задачу. Основное требование - это смещение кадров хотя бы на пол секунды вперед/назад. Это вообще возможно?
|
|
|||||
|
Цитата:
Корректно ли ролики воспроизводятся другими проигрывателями? |
|
|||||
|
Воспроизведение корректно!!! Все замечательно показывает, проблема только с функцией seek(). Мне нужно создать покадровый переход вперед/назад с отступом минимум в пол секунды. Т.е. я перехожу в режим паузы и начинаю seek`ать видео - ...и вот на этом самом месте встречаюсь с кучей трудностей.
|
|
|||||
|
Modus ponens
|
ERrorMAKros
Вам нужно смотреть всякие backBufferLength, backBufferTime, bufferLength, bufferTime, bufferTimeMax и т.п. В том смысле, что это не важно откуда вы его проигываете. Буфер - это очень простая концепция, это просто колличество байт которые хранятся в оперативной памяти, и из которых плеер может тут же забрать и (возможно декодировать, а может и нет) видео. kackbip Я это говорю к тому, что мне совсем не интересны свойства типа bufferTimeMax / maxPauseBufferTime - потому что они все в секундах. Мерять буффер в секундах, это все равно, что мерять расстояние в литрах. Но я не могу задать размер буффера в байтах, никак. Именно по-этому я еще не видел ни одного адекватного плеера во флеше, который мог бы внятно сообщить о том, что он загружает, сколько уже загрузилось, сколько осталось, сколько я уже могу посмотреть и т.п. Почему идиотский дизайн - потому что буфер - это очень просто, и у него технически нет столько параметров и методов, которые откуда-то есть у NetStream, но в совокупности все методы этого класса не позволяют осуществить мимально нужную работу на вменяемом уровне. maxPauseBufferTime - кроме всего остального, ничего вообще не говорит о буфере. Смысл этого свойства - сколько "времени" загружать наперед, если плейбек поставлен на паузу. Естественно, что я не знаю и знать не могу, и без того, что я буду знать сколько байтов нужно для того, чтобы воспроизвести одну "секунду", я могу этот параметр установить только наугад. Я даже порядок не смогу предположить, то ли 1 секунду, то ли 10, то ли 100...
__________________
Hell is the possibility of sanity |
|
|||||
|
Реализовал загрузку netStream.appendBytes() - в процессе загрузки получаю onMetaData,
видео благополучно проигрывается от начала до конца. При выполнении netStream.Seek(time + 10) даже в полностью забуференном видео получаю: NetStatusEvent: "NetStream.Seek.Notify" cо значением seekPoint: time + 10 и - все! Больше ничего не происходит! netStream буфер (в соответствии с документацией) - после Seek(); ...сбрасывается, а что мне в NetStream.Seek.Notify делать что бы возобновить проигрывание с нужного участка времени? |
|
|||||
|
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|