2013-07-31 2 views
4

У меня есть программа, использующая gamekit/bluetooth для передачи видео низкого качества с использованием сжатых jpegs с одного устройства iOS на другое. Я уже понимаю, что для этой цели не нужно использовать gamekit/bluetooth (для небольших фрагментов данных), но он действительно хорошо работает, транслируя 15 сжатых jpegs/second с низким качеством без малейшей задержки.iOS gamekit/bluetooth data streaming

Вопрос, который у меня есть, заключается в том, что я увеличиваю либо качество, либо частоту кадров от отправителя устройства iOS до приемника iOS, произойдет задержка или задержка и больше не будет в режиме реального времени. Если есть задержка, я хотел бы как-то заставить отправившее устройство iOS отбрасывать фреймы, чтобы получатель мог улавливать или для получателя игнорировать очередь.

В GameKit Я установил режим сеанса для использования GKSendDataUnreliable, чтобы узнать, может ли он помочь, но безрезультатно.

Если возникают задержки, какое наилучшее решение и правильный подход отбрасывать фреймы (jpegs), чтобы приемник iOS мог снова вернуться к реальному времени? Будет ли отправитель должен прекратить передачу в течение определенного периода времени или есть что-то, что получающий клиент может сделать, чтобы отменить накопительную очередь.

Я также использовал NSStream и, используя Wi-Fi, обеспечивает большую пропускную способность, та же проблема будет по-прежнему возникать в терминах задержек, если передается слишком много данных.

Заранее благодарю вас за помощь.

+0

Это может помочь увидеть некоторый код для очереди кадров и т. Д. Возможно, вы правы в том, что вам нужно либо остановить передачу, либо сбросить кадры в очереди. –

ответ

1

Не могли бы вы прикрепить временную метку к каждому jpg (возможно, время с эпохи), так что принимающий клиент будет игнорировать все изображения, которые не находятся в заданном таймфрейме.

Также вы могли бы вернуть получающий клиент с помощью простых пакетов подтверждения, указывающих, что получен JPG. Если отправляющий клиент не получил пакет подтверждения в течение заданного периода времени, он отбрасывает все изображения, которые он собирается отправлять, и начинает с нуля.

С помощью этого решения, если клиент-получатель падает на X секунд позади отправителя, он прекратит отправку пакетов подтверждения и отбросит все входящие данные, пока отправитель не выкинет все в своей очереди и не начнет снова отправлять «живые» кадры.