Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.06.2011, 15:39
ERrorMAKros вне форума Посмотреть профиль Отправить личное сообщение для ERrorMAKros Посетить домашнюю страницу ERrorMAKros Найти все сообщения от ERrorMAKros
  № 1  
Ответить с цитированием
ERrorMAKros
 
Аватар для ERrorMAKros

Регистрация: May 2008
Адрес: Земля.Украина.Одесса
Сообщений: 219
Отправить сообщение для ERrorMAKros с помощью ICQ Отправить сообщение для ERrorMAKros с помощью Skype™
Question Не работает NetStream.Seek()

Добрый день,
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},
...
]
В забуференном участке видео пытаюсь переходить на существующие (руководствуясь значениями в массиве) временные отрезки:
Код AS3:
nsNetStream.inBufferSeek = true;
nsNetStream.seek(seekpoints[3].time); // переход на 21.72
Но - безрезультатно (( Так же безрезультатен переход в любые другие позиции которые описаны в массиве, но что странно что это проблема только когда я пытаюсь делать переход вперед от текущей позиции, переход в обратную сторону (назад) работает, ...но как то странно, с неточным отступом. Хотелось бы разобраться как в "паузе" осуществить переход в любую позицию видео строго по значению минута:секунда.

Подскажите - есть ли возможность перемещать позицию в видео средствами seek, к примеру, на +/- пол секунды?
Буду благодарен за информацию о тонкостях позиционирования!

Старый 14.06.2011, 15:59
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 2  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
На сколько я знаю, перематывает только на положение кейфрейма. Чем реже кейфреймы в видео тем менее точно может быть сделан seek.
Почему не работает seek вперед - хз... у меня такое было только с недогруженным видео.

У вас прогрессивная загрузка или потоковое вещание?

перемотка на +-0.5 сек:
Код AS3:
ns.seek(ns.time+-0.5);

Старый 14.06.2011, 16:00
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
На сколько я понимаю, то для этого нужно, чтобы видео было в буффере. В смысле то место, куда вы собираетесь переходить. Если оно еще не загрузилось, то как бы не получится... А вообще, если вы можете использовать эту фичу, т.е. версия плеера позволяет, так я бы делал URLStream + appendBytes, так хоть контроль есть за тем что и когда загружается. Ю-тьюб тоже так делает. Доверять адобовским АПИ в том что связано с точностью или надежностью, уже столько раз обжигался, что ну его задумываться Как правило все все равно заканчивается тем, что нужно делать используя какие-то обходные пути с минимальной привязкой к высокоуровневым АПИ. (Уже не говоря о маразматическом дизайне - какого-то лешего размер буффера в Адоби считают в секундах ожидания загрузки - это ж еще додуматься до такого надо было...)
__________________
Hell is the possibility of sanity

Старый 14.06.2011, 16:05
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 4  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Цитата:
Сообщение от wvxvw Посмотреть сообщение
размер буффера в Адоби считают в секундах ожидания загрузки
Чего-чего?
Чуть подробнее пожалуйста.

Старый 14.06.2011, 16:12
ERrorMAKros вне форума Посмотреть профиль Отправить личное сообщение для ERrorMAKros Посетить домашнюю страницу ERrorMAKros Найти все сообщения от ERrorMAKros
  № 5  
Ответить с цитированием
ERrorMAKros
 
Аватар для ERrorMAKros

Регистрация: May 2008
Адрес: Земля.Украина.Одесса
Сообщений: 219
Отправить сообщение для ERrorMAKros с помощью ICQ Отправить сообщение для ERrorMAKros с помощью Skype™
Мной описанная проблема возникает даже при локальном проигрывании видео файла! Т.е. я осуществляю переход на необходимые мне позиции в видео ролике тогда когда bytesLoaded == bytesTotal. Даже когда буфер заполнен, переход вперед - не работает. Если произвольно баловаться с величиной отступа (nsNetStream.time + N) иногда срабатывает, иногда - нет (т.е. - остаюсь в той же позиции, от которой пытался перематывать). Я так понял что еще многое зависит от видео исходника (загружаемого .flv, .mp4). Видимо величина отступа между keyframe`ами задается еще на стадии кодирования. Пока что во всех моих случаях даже на вооружении с данными из metadata - все равно ничего не хочет работать, или работает - но с какими то видео роликами - да, а с какими то - нет. Найти золотую середину - не получается, ...хотя даже если я задам отступ на +/- 15 секунд то это не решает мою задачу. Основное требование - это смещение кадров хотя бы на пол секунды вперед/назад. Это вообще возможно?

Старый 14.06.2011, 16:22
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 6  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Цитата:
Я так понял что еще многое зависит от видео исходника (загружаемого .flv, .mp4). Видимо величина отступа между keyframe`ами задается еще на стадии кодирования.
Да, это так. Думаю проблема именно в исходнике файла. Попробуйте скачать с ютуба пару тройку файликов и проверьте на них. Если проблема не воспроизведтся то вполне возможно у вас битые файлы.
Корректно ли ролики воспроизводятся другими проигрывателями?

Старый 14.06.2011, 17:35
ERrorMAKros вне форума Посмотреть профиль Отправить личное сообщение для ERrorMAKros Посетить домашнюю страницу ERrorMAKros Найти все сообщения от ERrorMAKros
  № 7  
Ответить с цитированием
ERrorMAKros
 
Аватар для ERrorMAKros

Регистрация: May 2008
Адрес: Земля.Украина.Одесса
Сообщений: 219
Отправить сообщение для ERrorMAKros с помощью ICQ Отправить сообщение для ERrorMAKros с помощью Skype™
Воспроизведение корректно!!! Все замечательно показывает, проблема только с функцией seek(). Мне нужно создать покадровый переход вперед/назад с отступом минимум в пол секунды. Т.е. я перехожу в режим паузы и начинаю seek`ать видео - ...и вот на этом самом месте встречаюсь с кучей трудностей.

Старый 14.06.2011, 18:05
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
ERrorMAKros
Вам нужно смотреть всякие backBufferLength, backBufferTime, bufferLength, bufferTime, bufferTimeMax и т.п. В том смысле, что это не важно откуда вы его проигываете. Буфер - это очень простая концепция, это просто колличество байт которые хранятся в оперативной памяти, и из которых плеер может тут же забрать и (возможно декодировать, а может и нет) видео.

kackbip
Я это говорю к тому, что мне совсем не интересны свойства типа bufferTimeMax / maxPauseBufferTime - потому что они все в секундах. Мерять буффер в секундах, это все равно, что мерять расстояние в литрах. Но я не могу задать размер буффера в байтах, никак. Именно по-этому я еще не видел ни одного адекватного плеера во флеше, который мог бы внятно сообщить о том, что он загружает, сколько уже загрузилось, сколько осталось, сколько я уже могу посмотреть и т.п.
Почему идиотский дизайн - потому что буфер - это очень просто, и у него технически нет столько параметров и методов, которые откуда-то есть у NetStream, но в совокупности все методы этого класса не позволяют осуществить мимально нужную работу на вменяемом уровне.
maxPauseBufferTime - кроме всего остального, ничего вообще не говорит о буфере. Смысл этого свойства - сколько "времени" загружать наперед, если плейбек поставлен на паузу. Естественно, что я не знаю и знать не могу, и без того, что я буду знать сколько байтов нужно для того, чтобы воспроизвести одну "секунду", я могу этот параметр установить только наугад. Я даже порядок не смогу предположить, то ли 1 секунду, то ли 10, то ли 100...
__________________
Hell is the possibility of sanity

Старый 14.03.2012, 20:08
ERrorMAKros вне форума Посмотреть профиль Отправить личное сообщение для ERrorMAKros Посетить домашнюю страницу ERrorMAKros Найти все сообщения от ERrorMAKros
  № 9  
Ответить с цитированием
ERrorMAKros
 
Аватар для ERrorMAKros

Регистрация: May 2008
Адрес: Земля.Украина.Одесса
Сообщений: 219
Отправить сообщение для ERrorMAKros с помощью ICQ Отправить сообщение для ERrorMAKros с помощью Skype™
Реализовал загрузку netStream.appendBytes() - в процессе загрузки получаю onMetaData,
видео благополучно проигрывается от начала до конца.

При выполнении netStream.Seek(time + 10) даже в полностью забуференном видео получаю:
NetStatusEvent: "NetStream.Seek.Notify"
cо значением seekPoint: time + 10

и - все! Больше ничего не происходит!
netStream буфер (в соответствии с документацией) - после Seek(); ...сбрасывается,
а что мне в NetStream.Seek.Notify делать что бы возобновить проигрывание с нужного участка времени?

Старый 15.03.2012, 11:37
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 10  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
netStream.seek(netStream.time-3);
netStream.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.