2017-02-17 17 views
0

Я разрабатываю приложение для Android с Unity3D (C#), которое захватывает кадры с камеры (~ 30 кадров в секунду) и отправляет их на компьютер в сети. Затем кадры, полученные компьютером, будут обрабатываться с помощью программы на основе OpenCV (C++). Мне удалось реализовать это с помощью UDP-сокета (также попробовал TCP, но некоторые кадры иногда теряются). Позже я узнал, что некоторые сети останавливают UDP-пакеты по соображениям безопасности (например, внутри моей компании), поэтому я хотел бы обобщить сообщение, создав другой интерфейс, например. через HTTP POST. Будет ли это иметь смысл? У меня нет большого опыта работы с HTTP-запросами, и я блуждал, будет ли такой подход похожим на случай TCP-сокета, который не был успешным.В реальном времени JPG-кадр, проходящий через сеть

Существуют ли другие средства связи, которые могут гарантировать производительность, такую ​​как UDP, но путем установления связи на более высоком уровне?

ответ

0

Существует два типа протоколов сокетов: TCP и UDP. HTTP - это протокол приложения, который запускается на основе данных, полученных через сокет TCP. Таким образом, вы не можете заменить TCP или UDP на HTTP. Вы будете использовать HTTP с сокетов TCP или UDP.

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

С UDP, с другой стороны, вы часто обнаружите, что многие пакеты упали. Собственно, для потоковой передачи видео это не совсем плохо. Для потоковой передачи видео вы хотите как можно меньше уменьшить задержку. TCP должен сделать много ошибок, чтобы гарантировать, что ваши пакеты не будут удалены, и поэтому TCP намного медленнее, чем UDP. Следовательно, для потоковой передачи видео вы обычно используете UDP.

В любом случае существует гораздо более эффективные библиотеки для потокового видео, чем просто попытки реализовать свои собственные с кадрами UDP и jpeg. Я бы рекомендовал вам найти тот, который соответствует вашим требованиям к платформе и языку.

+0

Спасибо за ответ. То, что я имел в виду с UDP и HTTP, заключалось в том, как отправлять кадры с высокой скоростью, переходя с низкого уровня, как UDP, на высокий уровень, как HTTP, при сохранении хорошей скорости. Причина перехода на более высокий уровень - это стать независимой от таких проблем, как заблокированная сеть UDP. В моем конкретном случае я хотел бы придерживаться потоковой передачи отдельных кадров, один за другим и один за другим, в отличие от видеопотока. Как я писал выше, я использую C# на устройстве, и я открыт для использования любого языка (например, C#, C/C++, Java, Python) на сервере, который получает кадры. – Poiex

+1

Если вы не можете использовать сокеты UDP, то вы будете использовать TCP-сокеты. Нет необходимости использовать HTTP поверх этого, если вы этого не хотите. В любом случае, какой протокол потоковой передачи является лучшим, это совсем другой вопрос. Вы должны использовать Google для чего-то вроде «протокола потокового видео с открытым исходным кодом», чтобы узнать, какой из них лучше всего подходит вашим потребностям, хотя я считаю, что большинство решений будут использовать UDP-сокеты под капотом. –

+0

Хорошо. Я попытаюсь найти обходное решение этой проблемы с помощью TCP. – Poiex