Чем открыть udp поток
Шаг 2
Найдите мультимедийный файл, используя вкладки «Файл», «Диск» или «Сеть», в зависимости от местоположения файла. Нажмите на кнопку «Поток» после того, как файл был выбран. Выберите «Далее» после подтверждения выбора правильного источника.
API Reliable UDP
Для взаимодействия с протоколом передачи данных имеется открытый класс Reliable Udp, являющийся оберткой над блоком управления передачей. Вот наиболее важные члены класса:
Шаг 1
Откройте VLC и выберите «Media», а затем «Streaming» из меню.
Полезные ссылки и статьи
Update: Спасибо mayorovp и sidristij за идею добавления task'а к интерфейсу. Совместимость библиотеки со старыми ОС не нарушается, т.к. 4-ый фреймворк поддерживает и XP и 2003 server.
Требования к протоколу
Для понимания данных требований, давайте рассмотрим временные диаграммы передачи данных между двумя узлами сети по протоколам TCP и UDP. Пусть в обоих случаях у нас будет потерян один пакет.
Как видно из диаграммы, в случае потери пакетов, TCP обнаружит потерянный пакет и сообщит об этом отправителю, запросив номер потерянного сегмента.
UDP не предпринимает никаких шагов по обнаружению потерь. Контроль ошибок передачи в UDP протоколе полностью возлагается на приложение.
Обнаружение ошибок в TCP протоколе достигается благодаря установке соединения с конечным узлом, сохранению состояния этого соединения, указанию номера отправленных байт в каждом заголовке пакета, и уведомлениях о получениях с помощью номера подтверждения «acknowledge number».
Дополнительно, для повышения производительности (т.е. отправки более одного сегмента без получения подтверждения) TCP протокол использует так называемое окно передачи — число байт данных которые отправитель сегмента ожидает принять.
Более подробно с TCP протоколом можно ознакомиться в rfc 793, с UDP в rfc 768, где они, собственно говоря, и определены.
Шаг 6
Введите в поле «udp: // @» и нажмите «Играть».
Как транслировать RTSP с VLC
VLC, или VideoLAN, является популярным кроссплатформенным мультимедийным проигрывателем, который поставляется с простым в использовании интерфейсом для потоковой передачи живого видео через Интернет. Пока самый распространенный .
Глубже в код. Состояния
Состояния реализуют конечный автомат протокола Reliable UDP, в котором происходит основная обработка пакетов. Абстрактный класс ReliableUdpState предоставляет интерфейс для состояния:
Всю логику работы протокола реализуют представленные выше классы, совместно со вспомогательным классом, предоставляющим статические методы, такие как, например, построения заголовка ReliableUdp из connection record.
Далее будут рассмотрены в подробностях реализации методов интерфейса, определяющих основные алгоритмы работы протокола.
Метод DisposeByTimeout
Метод ProcessPackets
Метод ProcessPackets отвечает за дополнительную обработку пакета или пакетов. Вызывается напрямую, либо через таймер ожидания пакетов.
В состоянии Assembling метод переопределен и отвечает за проверку потерянных пакетов и переход в состояние Completed, в случае получения последнего пакета и прохождения успешной проверки
Метод ReceivePacket
В состоянии SendingCycle этот метод переопределен для приема подтверждений о доставке и запросов повторной передачи.
Метод SendPacket
Глубже в код. Восстановление передачи данных
Как уже обсуждалось в закрытии соединения по тайм-ауту, по истечению рабочего таймера у получателя произойдет проверка на потерянные пакеты. В случае наличия потерь пакетов будет составлен список номер пакетов, не дошедших до получателя. Данные номера заносятся в массив LostPackets конкретного соединения и выполняется отправка запросов на повторную доставку.
Отправитель примет запрос на повторную доставку и вышлет недостающие пакеты. Стоит заметить, что в этот момент у отправителя уже запущен таймер закрытия соединения и, при получении запроса, он сбрасывается.
Тайм-ауты и таймеры протокола
Существует несколько причин, по которым не может быть установлено соединение. Например, если принимающая сторона вне сети. В таком случае, при попытке установить соединение, соединение будет закрыто по тайм-ауту. В реализации Reliable UDP используются два таймера для установки тайм-аутов. Первый, рабочий таймер, служит для ожидания ответа от удаленного хоста. Если он срабатывает на стороне-отправителе, то выполняется повторная отправка последнего отправленного пакета. Если же таймер срабатывает у получателя, то выполняется проверка на потерянные пакеты и отправляются запросы на повторную доставку.
Второй таймер – необходим для закрытия соединения в случае отсутствия связи между узлами. Для стороны-отправителя он запускается сразу после срабатывания рабочего таймера, и ожидает ответа от удаленного узла. В случае отсутствия ответа за установленный период – соединение завершается и ресурсы освобождаются. Для стороны-получателя, таймер закрытия соединения запускается после двойного срабатывания рабочего таймера. Это необходимо для страховки от потери пакета подтверждения. При срабатывании таймера, также завершается соединение и высвобождаются ресурсы.
Заголовок Reliable UDP
Вспомним, что UDP дейтаграмма инкапсулируется в IP дейтаграмму. Пакет Reliable UDP соответственно «заворачивается» в UDP дейтаграмму.
Структура заголовка Reliable UDP достаточно простая:
Как я могу транслировать потоковую передачу со своего компьютера?
Прямая трансляция - это термин, используемый для описания потоковой передачи видео и / или аудио в Интернет для широкой публики или для выбранной аудитории. Здесь очень много.
Диаграмма состояний передачи Reliable UDP
Принципы работы протокола реализованы в конечном автомате, каждое состояние которого отвечает за определенную логику обработки пакетов.
Диаграмма состояний Reliable UDP:
Closed – в действительности не является состоянием, это стартовая и конечная точка для автомата. За состояние Closed принимается блок управления передачей, который, реализуя асинхронный UDP сервер, перенаправляет пакеты в соответствующие соединения и запускает обработку состояний.
В нем проверяется корректность начала передачи, создаются необходимые структуры, и отправляется подтверждение о приеме первого пакета.
Шаг 5
Откройте VLC на компьютере, который будет принимать поток UDP, и нажмите «Медиа» и «Открыть сетевой поток» в меню.
Глубже в код. Блок управления передачей
Один из ключевых элементов Reliable UDP – блок управления передачей. Задача данного блока – хранение текущих соединений и вспомогательных элементов, распределение пришедших пакетов по соответствующим соединениям, предоставление интерфейса для отправки пакетов соединению и реализация API протокола. Блок управления передачей принимает пакеты от UDP уровня и перенаправляет их на обработку в конечный автомат. Для приема пакетов в нем реализован асинхронный UDP сервер.
Как транслировать видео из windows 10 в chromecast с помощью vlc
Недавно популярный бесплатный медиаплеер VLC был обновлен до версии 3.0 Vetinari, в которую добавлена поддержка Chromecast. Вот как это работает.
IPTV
версия: 6.1.11
Последнее обновление программы в шапке: 20.10.2021
Краткое описание:
Просмотр IP-телевидения на Android.
Смотрите IPTV Вашего интернет-провайдера или телевидение из любого другого интернет-источника на телефоне или планшете!
В теме присутствует разработчик alders Варез запрещен!
- для Windows: UDP-to-HTTP прокси можно скачать по ссылке http://borpas.info/download/UdpProxy.exe либо выбрать соответствующую опцию при установке IP-TV Player. Подробную инструкцию по настройке смотрите в обзоре, раздел "Настройка UDP-to-HTTP прокси".
- для Linux: udpxy
- на многие роутеры можно установить udpxy при использовании альтернативной прошивки DD-WRT или OpenWrt
- некоторые Wi-Fi роутеры имеют встроенный udpxy
В списке приведены устройства со стандартными заводскими прошивками, в случае кастомных прошивок поведение может отличаться.
- Устройства Samsung (известные исключения: Galaxy Tab 10.1, Galaxy Tab 7.7, Galaxy S3, Galaxy Nexus на стоковой прошивке 4.2.1)
- Samsung/Google Nexus 10
- LG P970
- PocketBook A7 и A10
- Cube U9GT2
- Zenithink C71 ICS
- ZTE Libra (он же Киевстар Spark)
- Sony Ericsson WT19i Walkman
- Acer Iconia Tab А501 с официальной прошивкой 4.0.3 (версия ядра 2.6.39.4+)
- DIGMA iDj7n
- Fly IQ451 Vista
- Fly IQ 256
- Wexler tab 7100
- Wexler Tab 7 id
- Все телефоны HTC
- Samsung Galaxy Tab 10.1, Galaxy Tab 7.7, Galaxy S3, Galaxy Nexus на стоковой прошивке 4.2.1
- Acer Iconia Tab A500/A501 (требуется уточнение, с новыми прошивками может работать, см. выше)
- Sony Ericsson XPERIA pro
- IconBit NetTab Matrix
- ASUS Transformer Pad TF300T с официальной прошивкой Android 4.2.1
- Highscreen Boost II SE
Почему на одном телефоне/планшете работает без прокси, а на другом нет?
К сожалению, многие Андроид-устройства не могут принимать мультикаст, это ограничение прошивки, и ничего с этим поделать нельзя. Используйте прокси или ищите альтернативную прошивку с поддержкой мультикаста.
Приложение перестало работать после обновления прошивки телефона/планшета, почему?
Такое может произойти, если вы смотрите IP-телевидение от интернет-провайдера в мультикасте без использования прокси. Так как возможность приема мультикаст-потоков - это свойство прошивки, то вполне возможно, что новая прошивка не умеет принимать мультикаст. Используйте прокси или ищите альтернативную прошивку с поддержкой мультикаста.
Вчера все работало, сегодня нет, почему? Прошивка не менялась.
Если вы используете открытый плейлист с форумов, то это обычное явление, т.к. открытые плейлисты очень часто банятся провайдерами при увеличении нагрузки на сервер. Если вы смотрите телевидение от интернет-провайдера через UDP-прокси, то убедитесь, что прокси запущен и работает, и IP-адрес компьютера с прокси не изменился. Также, вполне возможно, что проблемы на стороне провайдера, для проверки откройте этот же плейлист на компьютере при помощи IP-TV Player для Windows.
Постоянно пропадает файл плейлиста с sd-карты, почему это происходит и как с этим бороться?
Дело в том, что Android сам сканирует содержимое файлов m3u, при этом он "чистит" плейлисты, удаляя ссылки на несуществующие файлы. В нашем же случае в плейлисте лежат не файлы, а веб-ссылки, и все они удаляются Андроидом, после чего сам файл тоже удаляется, т.к. становится пустым. Для того чтобы такого не происходило, нужно создать пустой файл ".nomedia" в какой-либо директории, и в эту же директорию положить плейлист. Тогда содержимое директории не будет сканироваться, и файл не будет удаляться. Еще один способ - это положить плейлист в директорию, начинающуюся с точки. Можно вообще не копировать плейлист на sd-карту, а положить его в любое онлайн-хранилище с прямыми ссылками, Dropbox public link вполне подойдет.
Программа работает везде где есть Wi-Fi или только в локальной сети конкретного провайдера?
Зависит от плейлиста. С плейлистами интернет-провайдеров скорее всего будет работать только в локальной сети провайдера. С открытыми плейлистами, с плейлистами сервисов типа Батон-ТВ и т.д. работать будет везде, где есть Wi-Fi. С некоторыми плейлистами возможна работа даже по 3G.
В чем разница между про-версией и обычной?
IPTV - есть реклама, история плейлистов ограничена 5-ю элементами.
IPTV Pro - нет рекламы, история плейлистов ограничена 250-ю элементами, есть возможность автостарта приложения при загрузке устройства (полезно для приставок).
В дальнейшем список отличий может меняться.
Хочу купить платную версию. Если я решу перепрошить устройство, нужно ли будет мне покупать приложение снова? Если я захочу использовать приложение еще на одном устройстве, нужно ли будет его покупать еще раз?
Все платные приложения, купленные на Google Play, привязываются к вашему Google-аккаунту. Т.е. купив приложение один раз, вы сможете использовать его на всех устройствах, связанных с данным аккаунтом. После перепрошивки устройства вам нужно будет залогиниться в Google Play. Если вы войдете, используя старый аккаунт, то сможете использовать уже купленную версию. Если же заведете новый аккаунт - придется покупать снова.
Общие принципы работы протокола
Сторона-получатель принимает пакеты. Каждый пакет проверяется на попадание в окно передачи. Не попадающие в окно пакеты и дубликаты отсеиваются. Т.к. размер окна сторого фиксирован и одинаков у получателя и у отправителя, то в случае доставки блока пакетов без потерь, окно сдвигается для приема пакетов следующего блока данных и отправляется подтверждение о доставке. Если окно не заполнится за установленный рабочим таймером период, то будет запущена проверка на то, какие пакеты не были доставлены и будут отправлены запросы на повторную доставку.
Видео: Онлайн вещание в несколько кликов (Май 2022).
В последние годы цифровая библиотека с тысячами медиафайлов стала обычным явлением. Возможность воспроизведения мультимедийных файлов на одном компьютере не так удобна, как раньше, поэтому было бы неплохо иметь возможность потоковой передачи мультимедийных файлов из центрального расположения на ноутбук или портативное устройство. VLC имеет надежную поддержку потоковой передачи мультимедиа по сети.Среди многих протоколов, которые он поддерживает, есть UDP, который широко поддерживается и требует меньше настроек, чем другие протоколы.
VLC поддерживает потоковую передачу мультимедийных файлов на другие устройства в сети.
Multicast и Unicast вещание с помощью VLC media player (vlc multicast and unicast stream)
Запуск вещания VoD (Video on Demand) — Видео по запросу
Для примера возьмем сервер с unicast IP-адресом 172.16.10.14, вещаем с порта 5554
Консоль сервера:
===========
1. vlc --ttl 12 --color -I telnet --telnet-password 123 --rtsp-host 172.16.10.14:5554
2. telnet localhost 4212
3.
> new Test vod enabled
> setup Test input /path/to/file.avi
На клиенте:
=======
запускаем vlc проигрыватель
нажимаем «Файл» -> «Открыть URL»
в строке MRL пишем: rtsp://172.16.10.14:5554/Test
жмем «ОК» — смотрим фильм «по запросу»
Multicast вещание нескольких видео файлов на multicast IP-адреса 239.255.1.1 и 239.255.1.2
Вещаем по RTP, консоль сервера:
===========
1. vlc --ttl 12 --color -I telnet --telnet-password 123
2. telnet localhost 4212
1. vlc --ttl 12 --color -I telnet --telnet-password 123
2. telnet localhost 4212
Если мы хотим зациклить проигрывание файлов до бесконечности «по кругу» то добавим:
> setup channel1 loop
> setup channel2 loop
На клиенте:
========
запускаем vlc проигрыватель
нажимаем «Инструменты» -> «Настройки» , там, в нижнем левом углу жмем в «Показывать настройки» на «Все» , затем раскрываем «Вывод потока» , а там ищем «Модули вывода» , в поле «Интерфейс вывода IPv4 multicast» пишем IP-адрес, который прописан на вашей сетевой карте ( смотрящей в сторону сервера вещающего поток) , жмем «Сохранить»
Для просмотра потока по RTP:
После того как выполнили настройки: «Файл» -> «Открыть URL»
в строке MRL пишем:
udp://@239.255.1.1:5004 (что бы посмотреть видео из файла file_1.avi)
или
udp://@239.255.1.2:5004 (что бы посмотреть видео из файла file_2.avi соответственно)
Для просмотра потока по UDP:
в строке MRL пишем:
udp://@239.255.1.1 (что бы посмотреть видео из файла file_1.avi)
Так же запустить вещание в один поток по UDP можно так:
На клиенте:
========
код страницы для отображения вещания + ссылка на запуск WMP:
10.10.16.71 — IP-адрес сервера, с которого вещается поток
8080 — порт куда вещается поток
VLC Multicast to Unicast
Принимаем поток по multicast, а отдаем по unicast
224.0.42.49:5000 — адрес потока откуда берем multicast
192.168.1.15 — адрес клиента куда отправляем unicast
Будьте внимательны с указанием портов для потоков.
Если на сервере несколько сетевых карт и соответственно IP-адресов, то указать через какую карту брать поток можно прописав маршрут (роутинг) через IP-адрес сервера на нужной вам сет. карте, например на сервере одна из сет. карт это em0 с IP-адресом 192.168.1.1:
route add 224.0.42.49/32 192.168.1.1
Добавив маршрут сервер будет пытаться получить multicast поток через em0, что можно видеть с помощью tcpdump:
09:24:34.475683 IP XX.XX.100.182.32857 > 224.0.42.49.5000: UDP, length 1316
09:24:34.478554 IP XX.XX.100.182.32857 > 224.0.42.49.5000: UDP, length 1316
09:24:34.481677 IP XX.XX.100.182.32857 > 224.0.42.49.5000: UDP, length 1316
Отправка unicast потока клиенту (192.168.1.15) будет выглядеть примерно так:
09:26:11.374433 IP 192.168.1.1.61320 > 192.168.1.15.1234: UDP, length 1316
09:26:11.376441 IP 192.168.1.1.61320 > 192.168.1.15.1234: UDP, length 1316
09:26:11.378381 IP 192.168.1.1.61320 > 192.168.1.15.1234: UDP, length 1316
На клиенте:
=======
запускаем vlc проигрыватель
нажимаем «Файл» -> «Открыть URL»
в строке MRL пишем: udp://@192.168.1.15
жмем «ОК» — смотрим unicast поток отправляемый сервером
Сжимаем выходной поток:
«vb=» — Эта опция позволяет установить bitrate видио потока в kbit/s
«ab» — TЭта опция позволяет установить bitrate аудио потока в kbit/s
VLC и несколько сетевых интерфейсов
Вопрос:
У меня в компьютере несколько сетевых интерфейсов, как указать VLC чтобы multicast шел через нужный мне, например 192.168.1.15 ?
Ответ:
Это можно сделать указав IP-адрес нужного вам сетевого интерфейса в настройках VLC.
Теперь IGMP запросы будут уходить с сетевого интерфейса с IP-адресом 192.168.1.15
Если вещание производится из консоли сервера (например сервер с OS FreeBSD) и в нем несколько сетевых интерфейсов, то указать через какой интерфейс пускать поток multicast (udp) можно прописав статический маршрут, например:
224.0.42.49 — адрес потока который собираемся вещать
192.168.1.15 — IP-адрес на одной из сетевых карт сервера
route add 224.0.42.49/32 192.168.1.15
Теперь поток multicast (udp) будет уходить с сетевого интрфейса с IP-адресом 192.168.1.15
В этой части мы рассмотрим «Простой Стриминг» через GUI для домохозяек, а для примера нам послужат ситуации:
1. Когда мы выступаем в роли локального транслятора, для людей с лимитированным интернетом, с отключенным интернетом, или для тех, кто считается с вашим вкусом и хочет смотреть то, что вы им порекомендуете.
3. Если вы захотите передавать видео со своей вебкамеры, просто цифровой камеры и любых других подобных устройств, через DirectShow.
Комментарии:
1. Для удобства, в случае если вы будете засовывать множества файлов, советую заранее подготовить плейлист в формате M3U.
2. В последних версиях VLC, стрим можно смело настроить на вещание практически по всем протоколам сразу, если конечно это потребуется.
3. Для отладки и изучения, рекомендую начинать работу с VLC используя модуль «logger»
vlc -extraintf logger
4. Для наложения логотипа на стрим используйте фильтр logo, лучше в формате PNG.
5. В качестве альтернативных плееров для воспроизведения потоков с VLC брали Windows и Winamp Media Player.
Для всех типов вещание начальный GUI-диалог выглядит одинаково:
File: Достаточно выбрать плейлист или любой файл (Аудио/Видео), а зависимости от того, что вы собираетесь вещать в сеть.
Disk: DVD. AudioCD. VCD, здесь же можно отключить вывод меню, выбрать привод, и главу.
Network: здесь мы можем выбрать любой протокол и адрес входящего потока, который будем ретранслировать/конвертировать/сохранять (например с Youtube), Также вчера было проверено, что VLC отлично справляется с RTMP потоками, так что можете вещать видео со своей веб-камеры, поток которой идет на любой сервис управляемый red5.
Capture Device: Здесь можно выбрать, при наличии такового, любое устройство которое работают через Direct Show, Камеру, Вебкамеру, Цифровое или Спутниковое ТВ, а также Ваш Рабочий стол (Будет вещаться все, что происходит у вас на экране монитора).
После того как вы определились с выбором входящего потока, достаточно нажать кнопку «Stream». После чего откроется новое диалоговое окно, которое одновременно работает как настройка стриминга и/или конвертации, и конечный результат зависит от внесенных здесь настроек. Нажимаем кнопку Next, или вкладку Destination.
Как показано на рисунке, и как я уже упоминал, мы можем вести трансляции по всем поддерживаемым протоколам одновременно, в данном примере я показываю пример трансляции по HTTP/MMS.
Выбираем:
New Destination — HTTP, нажимаем Add, вбиваем адрес (0.0.0.0, или смотрим по ipconfig), указываем порт. Если нам нужны еще протоколы, то просто нажимаем "+".
Transcoding Options: Выбираем метод транскодинга из готовых профилей, или создаем свой (а также можно пустить поток без обработки для клиентского VLC).
Этот же метод можно использовать для людей у которых вообще нет медийного плеера, для просмотра/прослушивания стрима с вашего веб сайта (локального, или если у вас Внешний IP, то этот метод так же сработает на сайт в сети интернет).
Для этого создайте документ с расширением *.asx, например stream.asx и поместить туда код:
Где HREF, — Ваш IP и порт. Поместите этот файл на сервер, например в папку /stream/, а в html файле, где бы вы хотели отобразить стрим, напишите следующее:
В случае же если у клиентов стоит Mplayer или VLC, то можно поиграть с другими типами инкапсуляций и кодеков, таких как TS и h264 соответственно.
В таком случае мы получим меньшую нагрузку на систему, большую на канал, но при этом клиенты получают оригинальное видео.
Следующая/последняя вкладка Options не обязательна, в нее стоит заглянуть только для тех кто будет настраивать Анонсы, или захочет посмотреть сгенерированный скрипт, который можно будет в дальнейшем использовать из командной стройки, так же полезен если вы будете запускать вещания по «Крону». О том как использовать я уже писал.
Нажимаем последний раз "Stream" и приглашаем друзей.
Выводы: Качество стрима и его приема может быть достигнуто только при наличии VLC или Mplayer с обоих сторон, так как в случае с VLC не потребует заморочек с плагинами и кодеками, Все, что он стримает по любому протоколу, он быстро и безболезненно подхватывает и на стороне клиента, вне заисимости от кодеков и инкапсуляций и прочих раздражающих факторов. Данный вывод основан только на том факте, что рассматриваемый метод хорош для «домохозяек», и людей которые не умеют пользоватся консолями и командными строками. В следющей части мы попробуем раскрыть тему и возможности вещания на основе «Command Line», которые увеличивают спектр возможностей по стрмингу.
UPD: Для передачи потока по UDP unicast
со стороны сервера необходимо указать IP и порт назначения. Например:
Сервер (192.168.0.1), Клиент (192.168.0.2)
На сервере в настройках стриминга указать
Media — Stream — UDP, 192.168.0.2:1234
У клиента для просмотра потока:
Media — Open Network Stream — UDP, @:1234
UDP Multicast
В multicast, стрим вещается на multicast IP адреса (IP адреса зарезервированные для этих целей, диапазон которых от 224.0.0.0 до 239.255.255.255). Затем, любая машина в сети, может присоединится к multicast группе, посылая запрос в сеть, автоматически получит транслируемый поток.
Потом отправляет запрос об остановке воспроизведения потока и выходит из данной группы. Преимущество multicast стрима, в том, что поток получают только те машины, которые хотят его получать, а сервер вещает только один поток, который получают все участники группы.
Активация multicast, происходит также как в случае с unicast, только во вкладке Options необходимо указать количество TTL* (например 50) IP пакетов, Это означает, что multicast поток сможет пересекать 50 маршрутизаторов.
* — Time To Live
А со стороны клиента, достаточно просто открыть поток в любом плеере который поддерживает multiсast и в строке имени потока указать
udp://@_IP_:port
Более подробно multicast мы рассмотрим в теме продвинутого стриминга с использованием командной строки и телнета
Такая архитектура Интернета достаточно правильна для клиент-серверного взаимодействия, когда клиенты могут находиться в частных сетях, а серверы имею глобальный адрес. Но она создает трудности для прямого соединения двух узлов между различными частными сетями. Прямое соединение двух узлов важно для «peer-to-peer» приложений, таких как передача голоса (Skype), получение удаленного доступа к компьютеру (TeamViewer), или онлайн игры.
Один из наиболее эффективных методов для установления peer-to-peer соединения между устройствами находящимися в различных частных сетях называется «hole punching». Этот техника чаще всего используется с приложениями на основе UDP протокола.
Но если вашему приложению требуется гарантированная доставка данных, например, вы передаете файлы между компьютерами, то при использовании UDP появится множество трудностей, связанных с тем, что UDP не является протоколом гарантированной доставки и не обеспечивает доставку пакетов по порядку, в отличие от TCP протокола.
В таком случае, для обеспечения гарантированной доставки пакетов, требуется реализовать протокол прикладного уровня, обеспечивающий необходимую функциональность и работающий поверх UDP.
Сразу хочу заметить, что существует техника TCP hole punching, для установления TCP соединений между узлами в разных частных сетях, но ввиду отсутствия поддержки её многими NAT устройствами она обычно не рассматривается как основной способ соединения таких узлов.
Далее в этой статье я буду рассматривать только реализацию протокола гарантированной доставки. Реализация техники UDP hole punching будет описана в следующих статьях.
Глубже в код. Закрытие соединения по тайм-ауту
Отработка тайм-аутов важная часть Reliable UDP. Рассмотрим пример, в котором на промежуточным узле произошел сбой и доставка данных в обоих направления стала невозможной.
Как видно из диаграммы, рабочий таймер у отправителя включается сразу после отправки блока пакетов. Это происходит в методе SendPacket состояния SendingCycle.
Периоды таймера задаются при создании соединения. По умолчанию ShortTimerPeriod равен 5 секундам. В примере он установлен в 1,5 секунды.
У входящего соединения таймер запускается после получения последнего дошедшего пакета данных, это происходит в методе ReceivePacket состояния Assembling
Во входящем соединении за время ожидания рабочего таймера не пришло больше пакетов. Таймер сработал и вызывал метод ProcessPackets, в котором были обнаружены потерянные пакеты и первый раз отправлены запросы на повторную доставку.
Переменная TimerSecondTry установилась в true. Данная переменная отвечает за повторный перезапуск рабочего таймер.
Со стороны отправителя тоже срабатывает рабочий таймер и повторно отсылается последний отправленный пакет.
Период ожидания таймера закрытия соединения равен 30 секундам по-умолчанию.
Через непродолжительное время, повторно срабатывает рабочий таймер на стороне получателя, вновь производится отправка запросов, после чего запускается таймер закрытия соединения у входящего соединения
По срабатыванию таймеров закрытия все ресурсы обоих connection record освобождаются. Отправитель сообщает о неудачной доставке вышестоящему приложению (см. API Reliable UDP).
Глубже в код. Создание и установление соединений
Теперь, когда мы познакомились с основными состояниями и методами, используемыми для обработки состояний, можно разобрать немного подробнее несколько примеров работы протокола.
После отправки первого пакета отправитель переходит в состояние SendingCycle – ожидать подтверждения о доставке пакета.
Сторона-получатель, с помощью метода EndReceive, принимает отправленный пакет, создает новую connection record и передает данный пакет, с предварительно распарсенным заголовком, в обработку методу ReceivePacket состояния FirstPacketReceived
Шаг 3
Выберите «UDP (legacy)» из выпадающего меню и нажмите «Добавить».
Заключение
Спасибо за внимание, жду Ваших комментариев и замечаний.
P.S. Для тех, кто интересуется подробностями или просто хочет протестировать протокол, ссылка на проект на GitHube:
Проект Reliable UDP
Шаг 4
Введите IP-адрес компьютера, который будет принимать сетевой поток, и нажмите «Поток».
Читайте также: