Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2015, 12:53   #1
an_private
Пользователь
 
Регистрация: 17.10.2014
Сообщений: 17
По умолчанию Плавное изменение скорости воспроизведения видео

Есть задача - синхронизировать воспроизведение видео на нескольких компах. Один является мастером, остальные слейвы. Текущая позиция мастера забирается слейвами по сети - здесь никакой проблемы нет. Проблема встала при синхронизации. Предполагался следующий алгоритм:
- смотрим разницу текущих позиций мастера и слейва
- если разница больше 1 секунды - делаем IMediaSeeking::SetPosition по позиции мастера
- если разница меньше секунды - плавно меняем скорость воспроизведения от 0.7 до 1.5 в зависимости от разницы и аккуратно догоняемся до нулевой разницы
- выставляем скорость 1.0 и идём синхронно с мастером

И вот тут подкралась засада. Дело в том, что оказывается - при использовании для изменения скорости IMediaSeeking::SetRate в момент изменения скорости воспроизведение останавливается. И, соответственно, мастер успевает уйти вперёд. Причем время остановки сильно варьируется - у меня получалось от 5 до 15 кадров. То есть просто откатиться чуть вперёд на фиксированное количество кадров, чтобы компенсировать задержку - не получится.
Есть ли какой-то способ изменить скорость воспроизведения мгновенно (на лету)? Или какие другие идеи?
Воспроизводить покадрово из буфера не предлагать, так как видео идёт со звуком и нормально это организовать не получится ни черта.
an_private вне форума Ответить с цитированием
Старый 27.06.2015, 20:07   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Нужно делать проверку через сервер на позицию воспроизведения, то есть клиенты примерно каждые 5 сек опрашивают сервер на позицию видео, на сервере тоже видео должно идти для синхронности и когда есть разница то клиент меняет позицию, я так для музыки у себя на работе делал вроде норм, они потом синхронно идут. Сервер клиентам отправляет номер позиции.
Но предварительно видео кэшируется на клиентах, у меня для музыки весь файл качался, а потом начинал играть с той позиции что на сервере.

Последний раз редактировалось Aliens_wolfs; 27.06.2015 в 21:15.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное изменение размеров панелей Xo66um Общие вопросы Delphi 7 04.06.2013 09:26
Плавное изменение цвета панели (Delphi) Andrey_RTF Помощь студентам 2 27.05.2012 15:47
Плавное изменение размера формы TaTT DoGG Общие вопросы .NET 5 31.03.2010 16:53
воспроизведения видео с хостинга designer999 Мультимедиа в Delphi 5 24.02.2010 11:29
проблемы воспроизведения видео _Solomon_ HTML и CSS 0 20.04.2007 08:50