Синхронизация бегунка на одном устройстве с воспроизведением видео на другом

У меня есть два устройства iOS, и на обоих есть копии одного и того же видео. Оба устройства обмениваются данными по Bluetooth. Видео воспроизводится только на одном устройстве, а другое - на пульте дистанционного управления. Устройству «дистанционного управления» нужен ползунок, показывающий, где по продолжительности находится видео.

Как лучше всего синхронизировать ползунок с воспроизведением видео?

Я использую AVPlayer для воспроизведения видео и Gamekit для соединения Bluetooth.


person Luke    schedule 14.02.2013    source источник
comment
Заставьте устройство игрока отправлять максимум текущего местоположения. Обновляйте скруббер в зависимости от затраченного времени и используйте текущее местоположение для настройки местоположения скруббера. Затем все, что вам нужно сделать, это реагировать на остановки, паузы, перезапуски и т. д. Насколько детальным вы хотите, чтобы элемент управления был, должен ли ползунок также контролировать положение воспроизведения видео или он должен просто указывать местоположение?   -  person Bergasms    schedule 14.02.2013
comment
Он должен указывать местоположение, а также контролироваться. Устройство, воспроизводящее видео, не имеет контроля. Устройство дистанционного управления будет запускать/останавливать видео. Проблема, в которой я не совсем уверен, заключается в задержке в сети - к тому времени, когда устройство дистанционного управления говорит о воспроизведении, есть время для получения сообщения и время для фактического начала воспроизведения. Мне нужно, чтобы пользователь не заметил никакого несоответствия.   -  person Luke    schedule 14.02.2013


Ответы (1)


хех, ну будет весело поработать. Задержка — это то, что вы всегда будете получать, поэтому вам нужны некоторые стратегии смягчения. Я бы предложил посмотреть на определенные способы, которыми люди справляются с отставанием. Я могу предложить вам разделить два типа сообщений на критические и некритические. так, например, команда остановки/паузы/воспроизведения/перезапуска была бы для меня критической. Вы хотите, чтобы это сообщение дошло до вас, и вы будете продолжать попытки, пока это не произойдет.

Такие сообщения, как изменение положения ползунка в обоих направлениях (от игрока к удаленному, от удаленного к игроку), не являются критическими. Вы отправляете их, но вам не следует тратить время на подтверждение ответов или проверку их доставки. Вроде как разница между UDP и TCP. Они будут просто отправлены по соединению, и у меня в основном пакет будет не сложнее, чем (scrubberposition, position_as_time, идентификатор_номер). Запишите последний полученный вами идентификационный номер (идентификационный номер — это монотонно возрастающее число) и отбросьте все сообщения с номерами ниже этого, а также обновите позицию для любых более высоких номеров и обновите сохраненный идентификатор_номер.

Я надеюсь, что это имеет смысл / помогает, дайте мне знать, если мне нужно что-то объяснить, и удачи

person Bergasms    schedule 14.02.2013
comment
Должен ли я использовать addPeriodicTimeObserverForInterval на стороне игрока и отправлять сообщение UDP для каждого обновления, или я должен использовать NSTimer на удаленной стороне для имитации движения ползунка и, возможно, внесения небольших исправлений? При использовании addPeriodicTimeObserverForInterval я думаю, что для 5-секундного видео было около 1000 сообщений. - person Luke; 14.02.2013
comment
Вероятно, вам не нужно отправлять так много сообщений. Люди не смогут отличить скруббер от 50 обновлений за 5 секунд, не говоря уже о 1000. Вам, вероятно, придется поэкспериментировать, как лучше всего это сделать. Мое одно слово: не позволяйте скрубберу двигаться назад, если не включена перемотка. Люди не заметят, если скруббер будет время от времени замедляться/останавливаться, но они заметят, если он пойдет назад, когда этого не должно быть. ваше решение должно будет использовать комбинацию двух. Кроме того, Bluetooth потребляет энергию, поэтому рекомендуется ограничить количество сообщений. - person Bergasms; 14.02.2013
comment
Я только что понял, что вы можете настроить интервал addPeriodicTimeObserverForInterval. Я смотрел на AVPlayerDemo. Пример кода регулирует интервал в соответствии с шириной ползунка и продолжительностью видео. Чем длиннее видео, тем больше интервал. Кажется, что с более короткими видео вы получаете более частые интервалы. Например, я просто сделал MAX(0.25f, interval). Дальнейшее тестирование покажет, каким должно быть значение. - person Luke; 18.02.2013
comment
ах, приятно знать. Рада, что у вас есть какие-то результаты :) - person Bergasms; 18.02.2013