Протокол передачи изображения rtp поверх tcp. RTP и RTCP: протоколы для IP-телефонии

Детские товары 21.10.2019
Детские товары

Я начал использовать Flash давно, когда еще это была версия 3, когда Flash был воспринят как новомодный векторный редактор на основе инструмента анимации, который вскоре мог бы захватить мир веб-дизайна штурмом. На протяжении многих лет Flash вырос в полноценный многофункциональный инструмент для разработки приложений, упакованный до краев «полезностями» .

Как много людей, кажется, забывают о том, что Flash все еще инструмент дизайнера, позволяющий создавать графику и анимацию старомодным способом рисования.

Давайте начнем с того, с чего начал бы каждый в Flash (или в любом другом приложении для дизайна) — с рисования. Будь это рисование обычных форм или начертание линий, рисование — это одна из фундаментальных основ действий в Flash. Хотя, что делает Flash уникальным, так это то, каким образом создаются и редактируются формы. Программа ведет себя совсем не так, как большинство других инструментов для векторного рисования, и многие либо любят, либо ненавидят ее. Конечно, есть свои преимущества и недостатки в разделении каждой части объекта при самостоятельном редактировании. Давайте взглянем на некоторые причудливые мелочи, которые проделывает Flash и как использовать их наилучшим образом.

Хотя этот урок был написан для Flash Professional CS5, большинство советов должны будут работать прекрасно и в более старых версиях. Я постараюсь сделать акцент везде, где будет что-то очень специфическое в последних версиях Flash.

В этом уроке мы рассмотрим:

Правильные формы и формы-примитивы

Как правило, когда вы рисуете правильную форму (прямоугольник или эллипс) в Falsh, создается объект с настройками выбранной заливки и контура. Затем вы можете выбрать заливку и/или контур индивидуально и отредактировать их свойства. В Flash CS3, Adobe представил то, что они называют инструментами «примитивных» форм. В отличие от инструментов форм по умолчанию, которые отделяют контур от заливки, эти инструменты создают форму, которая выбирается и редактируется как единое целое.

Хотя для ветеранов-дизайнеров Fhash это может быть и раздражающим изменением, но оно привносит уровень контроля, который не был виден в Flash в ранних версиях. Вы можете неожиданно изменить свойства объекта численно через панель свойств, добавить скругленные углы и конвертировать окружности в пироги с точностью десятичной точки. Существует не так много причин, чтобы вернуться к традиционным инструментам создания форм, как только вы начнете использовать примитивы, но многие дизайнеры, которых я знаю, продолжают пользоваться старомодным способом. Часть проблемы может быть ошеломляющее решение фирмы Adobe оставить простые формы в качестве инструментов по умолчанию, убрав примитивы в выпадающее меню панели инструментов.

Пример: создайте точную круговую диаграмму, используя примитивные формы

Давай попробуем использовать примитивные формы в реальной ситуации, где применение традиционных инструментов для форм может быть доказано как упражнение в таскании за волосы. Допустим, вы хотите создать точную круговую диаграмму с помощью действительных чисел — рынок акций мобильных операционных систем в 2010 году, например.

Как только мы получим проценты (которые добавляют до 100), мы умножим каждый на 3,6 , чтобы приравнять их к общему градусу 360 в окружности. Затем, это просто вопрос вставки шести окружностей друг над другом и назначения соответствующих стартовых и конечных углов для каждого из них, полученных на основе вычислений. Смотрите математические данные в таблице ниже, так же как и свойства для каждой круговой диаграммы, для лучшего понимания.

Свободная трансформация форм при помощи мыши

По своей природе, объекты в Flash свободно редактируемые всеми видами доступных способов. Вы можете выбрать заливку или контур формы, перетащить их и они окажут воздействие на все другие формы в этой области, пока находятся на той же плоскости. То, что произойдет, когда вы выбираете и/или перетаскиваете элемент, зависит от того, на что вы кликаете и где. Давайте взглянем на различные возможности:

  • Выбор и перетаскивание формы, которая уже выбрана, будет просто двигать ее туда, куда вы передвинете мышь.
  • Выбор и перетаскивание внутри заливки формы — даже если она не выбрана — выберет и передвинет ее. Заметьте, что это только двигает заливку, но не двигает контур. Если вы отпустите заливку поверх контура, то любая часть контура, которая будет находиться под заливкой, удалится.
  • Нажатие мышью на прямой линии и перетаскивание сделает ее искривленной. Чем дальше вы перетаскиваете линию, тем круче будет изогнутая линия.
  • Нажатие мышью и перетаскивание существующей изогнутой линии изменит ее кривизну.
  • Нажатие мышью и перетаскивание угловой точки переместит только точку. Если включен параметр snapping (привязка), то точка будет притягиваться к любому другому углу рядом.

Пример: Сделаем волны простым способом

Давайте попробуем применить эти знания, чтобы сделать сложные волновые линии простым способом — при помощи прямых зигзагообразных линий. Начнем с простого рисования прямых линий, чтобы определить приблизительный размер и форму волны. Убедитесь, что линия не выделена. Затем, выберите и перетащите каждый сегмент линии, чтобы сделать изогнутость для волны. И наконец, выберите угловые точки и передвиньте их вверх или вниз до тех пор, пока они не притянутся и сделают изогнутую, плавную с обеих сторон.

Сглаженные закругленные углы

По какой-то причине, лучше всего известной Adobe, они никогда не решали унаследованную проблему с визуализацией скругленных углов в Flash. Если контур прямоугольника с закругленными углами — нечетное число (1, 3, 5, и т.д.), то углы, как правило, имеют уродливые артефакты, которые делают изображение размытым. Типичная уловка, которую я использовал и которую видел в действии, это убедился в том, что контуры прямоугольника с закругленными углами всегда равны 2, 4, 6 или любому другому числу. Но эта уловка по-прежнему не работает, если форма находится на подпиксельной координате — или x или y координата равна десятичному значению (2.6, 4.12, 98.57 и т.д.) — но эту проблему намного легче решить.

Но, что делать, если нужно, чтобы контур был размером в один пиксель? Один из способов, который я недавно нашел и широко применяю с этого времени, следующий:

  • Нарисуйте прямоугольник, используя инструмент примитивный прямоугольник и установите ему любой размер, который нужен. Убедитесь, что координаты x и y прямоугольника являются целочисленными значениями без десятичных точек в них.
  • Измените закругленность на свое усмотрение.
  • Закрасьте объект цветом, который вам нужен для контура прямоугольника.
  • Скопируйте и вставьте прямоугольник на это же место, затем подтолкните его на один пиксель вправо и вниз.
  • Уменьшите высоту и ширину нового прямоугольника на два пикселя меньше, чем у оригинального, и измените заливку на тот цвет, который вам нужен для формы.
  • Мы еще не закончили. Уменьшите закругленность нового прямоугольника на один меньше, чем у контура. Так как Flash назначает закругленность по пикселям, а не в процентах, наличие того же самого значения закругленности для обоих прямоугольников вызовет незначительные несоответствия по направлению к центру искривленности каждого.

Хотя этот метод должен работать в большинстве случаев, он не без ошибок. В нем нет смысла, например, в тех ситуациях, когда нужно, чтобы объект был полупрозрачным. Снижение альфа-канала заливки у прямоугольника отобразит только больше цвета контура от прямоугольника сзади. Уловка получить закругление может испортить оба прямоугольника (конвертировать их в обычные формы).

Вы также можете рассмотреть возможность использования параметра «stroke hinting» , который будет направлять при рисовании контуров на сцене.

Распределение градиентов между объектами

Кто же не любит градиенты? Дизайны в наши дни немного несовершенны без хотя бы слабого намека на градиент, который придает реалистичный и часто современный вид. Не смотря на проблему с тем, как Flash управляет формами, то, что каждая самодостаточная часть — это форма и имеет свои собственные свойства. Вы не можете применить градиентную заливку на группы объектов и нет способа «соединить» две различные формы. Что произойдет, потом, когда нужно, чтобы градиент распределился через несколько объектов — скажем, все слова в логотипе, сделанном на заказ?

Хорошо, «заблокируйте заливку» для помощи. При использовании инструмента «Paint Bucket» вы увидите значок внизу палитры инструментов с градиентом и замочком на нем. Выберите формы, которые нужно закрасить, переключите значок «Lock Fill» (заблокировать заливку), выберите градиент из палитры цветов заливки и кликните внутри любой выбранной формы. Не беспокойтесь, если не видите весь примененный градиент. Довольно часто незаблокированная заливка простирается далеко за пределы выбранных форм и необходимо использовать инструмент «Gradient Transform» , чтобы изменить размер градиента так, как вам это нужно.

Тем не менее этот метод не без недостатков. Вот некоторые вещи, о которых нужно помнить при использовании заблокированных заливок:

  • Заблокированные заливки работают только с обычными формами. Если вы используете примитивные формы, то вам нужно будет разбить их на части, чтобы иметь возможность применить градиент между несколькими объектами.
  • Если вы выберите одну форму из группы с заблокированной заливкой, а затем измените ее свойства, то эта форма отсоединится от группы.
  • Как я говорил ранее, границы градиента в заблокированной заливке, как правило, становятся больше, чем область форм. Просто используйте инструмент «Gradient Transform» , выберите любую из форм и отрегулируйте границы градиента. Вам, возможно, понадобится немного уменьшить масштаб, чтобы видеть управляющие элементы градиента.

Поиграйте с пользовательскими контурами

Flash поставляется с набором стилей контуров по умолчанию — сплошной (solid), пунктирный (dashed), с точками (dotted), неровный (ragged), пунктир с точками (stripples) и со штриховкой (hatched) — которые в основном работают прекрасно. Для ситуаций, где вам нужно больше контроля над контуром, есть довольно мощный редактор контуров, который идет в поставке с Flash. Чтобы по-настоящему поиграть с контурами, нажмите на значок «edit» (редактирование) рядом со списком «Style» в панели свойств «Properties» выбранного контура.

Допустим, вам нужно нарисовать пунктирную линию, но знаки тире в настоящее время находятся слишком близко в стиле по умолчанию «dashed» . В панели «Edit Stroke» (редактирование контура), просто увеличьте число во втором поле ввода рядом с «dash» пока не получите нужный эффект. И в это же время установите параметр «sharp corners». Если вам надоели странные углы, которые вы получаете вместе с пунктирной линией, заданной по умолчанию в Flash, то это все исправит.

Полезные подсказки

Вот еще несколько полезных подсказок, чтобы помочь оптимизировать рабочий процесс при использовании форм в Flash.

  • Из-за способа, которым Flash управляет формами, нажатие мышью на контур выделяет только одну линию контура, а не весь контур. Дважды кликните мышью на область контура, чтобы выбрать все его соединенные части сразу.
  • Двойное нажатие мышью по заливке выделяет заливку и все области вокруг нее.
  • Если вы хотите разделить форму вместе с некоторым пространством между двумя частями формы, то:
    1. Нарисуйте линию там, где нужно разделение.
    2. Отрегулируйте толщину линии в зависимости от того, сколько пространства нужно между частями формы.
    3. Убедитесь в том, что линия выделена; затем перейдите «Modify -> Shapes» в панели меню и выберите «Convert Lines to Fills» (преобразовать линии в заливку).
    4. Удалите линию.
  • По умолчанию, в Flash у линий закругленные концы и углы, но если вам нужно, чтобы края были грубыми по каким-либо причинам, то вы можете установить значения свойств «Cap» и «Joint» в панели свойств «Properties» выбранной линии.

Вывод

Пока что все для первой части в данной серии статей о советах Flash-дизайнерам. Надеюсь, что эти хитрости помогут вам улучшить и оптимизировать свой рабочий процесс в Flash в долгосрочной перспективе. Пожалуйста, не стесняйтесь, поделитесь своими советами и практикой в разделе комментариев. Если вам понравился урок, расскажите о нем в социальных сетях (значки внизу), это поможет продвижению сайта. В следующей части урока мы рассмотрим советы о том, как управлять текстом и символами в Flash.

И знаете этой программы. Теперь поговорим о том, как в этой программе делать изображения. Для начала разберемся со .

Colors (цвета)

Для выбора цвета линии и заливки предназначена область в середине панели инструментов, под названием Colors . Значок с изображением карандаша и иконка выбора цвета в первом ряду этой области определяют цвет линии (Stroke colors ), а значок с изображением опрокинутого ведра и иконка выбора цвета во второй линии определяют цвет заливки (Fill color ).

Line (линия)

Инструмент Line служит для проведения прямых линий. Выберите этот инструмент, нажмите курсором в рабочей области там, где будет начальная точка линии, затем, не отпуская клавишу мыши, тяните курсор туда, где будет конечная точка линии. Если нужно провести линию под углом, кратным 45 градусов, нажмите при этом на кнопку Shift . Цвета создаваемых линий определяются цветом инструмента Stroke color .

Oval (овал) и Rectangle (прямоугольник)

Выбираете точку, соответствующую углу прямоугольника либо воображаемого прямоугольника, в который вписан овал, и протягиваете, при нажатой клавиши мыши, курсор по диагонали этого прямоугольника. Цвет линии и заливки соответствует выбранным цветам Stroke colors и Fill color .

Прямоугольник может иметь радиус скругления на углах. Для скругления нужно нажать в свойствах прямоугольника (в нижней части панели инструментов) на иконку с радиусом (Set Corner Radius ), и выбрать значение радиуса.

Также в Macromedia Flash Professional 8 можно создавать правильные круги и квадраты, если нажать кнопку Shift при протягивании. При создании овала или прямоугольника появляются два связанных графических элемента, которые можно выделять и редактировать отдельно.

Selection (выделение)

Используется в программе Macromedia Flash Professional для выделения и изменения графики. Выделенные элементы графики отображаются точечным рисунком.

Свойства инструмента Selection

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

Smooth (сглаживание) вызывает появление в выделенной области более плавных кривых. При повторном выборе кривые продолжают сглаживаться.

Straighten (спрямление) вызывает появление в выделенной области более спрямленных кривых. При повторном выборе кривые продолжают спрямляться.

Видео о том, как рисовать в программе Macromedia Flash Professional 8

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

Также Вы можете подписаться на блог, и узнавать о всех новых статьях.
Это не займет много времени. Просто нажмите на ссылку ниже:

Когда вы будете изготавливать свои фотореалистические рисунки, приготовтесь к тому что на них потребуется потратить значительно больше времени чем на обычные рисунки, но зато вам не нужно импровизировать, и придумывать, так же такой рисунок, можно будет распечатать на очень и очень большом формате и он будет выглядеть замечательно (в отличии от фотографии)

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

итак начнём. первое что нужно сделать создатть 4 дополнительных слоя, вам больше и не понадобиться.

Первое с чего я начинаю рисовать - представляю модель рисуемого объекта. само собой если мне нужно
фотореалистическое отображение. Я долгое время очень внимательно смотрю на фотографию. стараясь спланировать каждый шаг, который собираюсь сделать. для меня это, как играть в шахматы. если поторопиться, скорее всего вы проиграете, но если подумать на перёд, поразмышлять, тогда игра ваша. Итак позволте я посоветую вам на чём стоит
сконцентрировать свои мыслительные процессы.

Перед тем как действительно сделать что-нибудь, вам следует понять важность исходной фотографии. В действительности,
чем она больше тем лучше! почему это так важно, ну хотябы потому, что вы хотите получить высокодетализированную
векторную графику в конце, а для этого вам нужно разглядеть много деталей. Всё что вам нужно это чистый чёткий
снимок, высокого разрешения. начните хотя бы с фотографии в 1024х768 (не меньше)
в дополнениии, попытайтесь найти фотографию со студийным освещением. Тенями и подсветками которые чётко
просматриваются, картинка в целом что бы тоже чётко просматривалась. Более важная вешь, я думаю, отсутствие
какихнибудь странных отражений окружающей среды на снимке (можно конечно и с ними справиться, но для начала лучше их избегать).

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

красные линие указывают на основной рисунок. Или, другими словами, показывают область которая будет находиться на самом первом слое (ниже всех сотальных). Остальные тени и подсветки будут накладываться на него

эта часть основного освещения

пример теней, лежаших на третем слое. Они добавляются ко второму слою, и создают более сложную форму

и наконец, различные детали освещения. Всё что я не смогла охватить третим слоем, будет лежать здесь (на 4м). Это значит что четвёртый слой не так уж необходим, потому как освещение обычно не такое сложное, и второго с третим слоем будет достаточно для создание модели с различным освещением.

Только для пояснения. Здесь контуры всех слоёв. В конце, вы будете иметь что-то похожее.

основной слой:

слой с основными тенями и подсветками:

дополнительное освещение (создание смешанного освещения фотореалистического рисунка)

и вот добавочные незначительные детали

как я уже говорил, основной слой, самый важный. Ошибки на нём испортят всю работу в целом и вот почему я всегда уделяю особое внимание уменно этому слою

Первое что нужно сделать это создать контуры используя инструмент линии или карандаш (я предпочитаю первое). Сейчас контуры отделяют различные цвета друг от друга.

Я начинаю с наружи диска

В этой часте много различных сегментов цвета, и я собираюсь их отделить друг от друга (что бы потом закрасить градиентом). Вам в действительности не надо делать это, тк вы можете назначить до 8 цветов перехода градиента , но это занимает много времени на точное регулирования пространства между различными цветами. Это просто засоряет мне работу, и я решила не использовать градиент с более чем двумя цветами.
Имея это в виду, моё разделение на контуры выглядит следующим образом:

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

Процес разукрашивания:
первое что я делаю, очищаю всё из панели цветовой палитры (color swatches) всё равно стандартные цвета мне больше не нужны, без них у моя цветовая палитра будет более упорядоченной.
Затем я начинаю собирать цвета с фотографии (как показанно ниже). и на пробу пытаюсь закрашивать этими цветами свой основной слой.

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

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

Прямо сейчас, градиент закрашивает в неправельном направлении и переход цвета не такое как я задумывала. Чтобы изменить это, мне нужно использовать инструмент трансформации градиента (gradient transform tool). Пожалуй не нужно объяснять что этот инструмент делает, его имя говорит само за себя. когда выбрав этот инструмент вы счёлкаете на градиенте, появляются две голубые линии - пока это линейный градиент - два регулятора. Кружок меняет направление градиента, а квадратик меняет ширину.

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

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

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

если у вас какието проблемы с нахождением контуров, я покажу как они выглядят у меня:

ещё одна деталь. Как вы успели заметить, в центральной часте диска есть эмблема Mercedes Benz и на ней кое какой текст, тоже. У вас есть два варианта что бы справиться с текстом: вы можете напичатать текст в ручную, разбить его на части (Modify - Break Apart или Ctrl + B), и выровнять его с текстом на фотографии и в конце просто применить градиентную или обычную заливку для каждой буквы, или вы можете также просто оконтурить их, и так далее как с остальной частью изображения. Я предпочитаю последнее. Это может занять немного больше времени и сил, но зато я могу быть уверенна что результат будет действительно близок к оригиналу.

В любом случае, это зависит от вас. Я знаю некоторые люди предпочитают просто напичатать текст и всё и они обычно получают хороший результат.

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

сложно описать как выглядит форма тени - и я думаю вы и сами можете её видеть.
давайте нарисуем контуры этой тени

выберите два цвета и сделайте линейную градиентную заливку контура.

или круговую градиентную заливку,значения не имеет всё равно на оригинал сильно походить не будет

Что мы делаем сейчас - отделим разные части тени. мне кажется что наша тень состоит из 3х частей.

В главной части два полу круга, идут от центра на право, и маленький элипс слева, указывающий на другую часть диска. Это значит, что мы должны расположить эти части на разных слоях
на втором слое, мы можем разместить основную форму (два полу круга) а на третий слой, положить маленький элипс указывающий наверх. Есть одна проблемка у нас уже есть основная часть расположенная на основном слое.
Нам восновном надо один цвет градиента и что в действительности не существует. мы можем просто взять цвет и закрасить им форму, но тк цвет должен плавно проявляться, закрашивая основной слой. И для этого во флэше есть одна отличная вешь для таких вещей - использование прозрачного градиента.
Так что измените контуры второго слоя. Мы можем на самом деле сделать их даже побольше. всё равно края будут не видимы.

выберите цвет и вернитесь к панели смешивания цветов (color mixer). Сделайте radial gradient c цветом которые вы выбрали.второй такойже цвет с установленной прозрачностью до 0%. обе части контуров залейте таким градиентом.

теперь трегулируйте градиент с помошью инструмента трансформации градиента (gradient transformation tool). у вас должно получиться что-то типа этого

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

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

В приложениях реального времени отправитель генерирует поток данных с постоянной скоростью, а получатель (или получатели) должен предоставлять эти данные приложению с той же самой скоростью. Такие приложения включают, например, аудио- и видеоконференции, живое видео, удаленную диагностику в медицине, компьютерную телефонию, распределенное интерактивное моделирование, игры, мониторинг в реальном времени и др.

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

Эту задачу и призван решить новый транспортный протокол реального времени - RTP (Real-Time Transport Protocol), который гарантирует доставку данных одному или более адресатам с задержкой в заданных пределах, т. е. данные могут быть воспроизведены в реальном времени.

Принципы построения протокола RTP

RTP не поддерживает каких-либо механизмов доставки пакетов, обеспечения достоверности передачи или надежности соединения. Эти все функции возлагаются на транспортный протокол. RTP работает поверх UDP и может поддерживать передачу данных в реальном времени между несколькими участниками RTP-сеанса.

Примечание

Для каждого участника RTP сеанс определяется парой транспортных адресов назначения пакетов (один сетевой адрес - IP и пара портов: RTP и RTCP).

Пакеты RTP содержат следующие поля: идентификатор отправителя, указывающий, кто из участников генерирует данные, отметки о времени генерирования пакета, чтобы данные могли быть воспроизведены принимающей стороной с правильными интервалами, информация о порядке передачи, а также информация о характере содержимого пакета, например, о типе кодировки видеоданных (MPEG, Indeo и др.). Наличие такой информации позволяет оценить величину начальной задержки и объема буфера передачи.

Примечание

В типичной среде реального времени отправитель генерирует пакеты с постоянной скоростью. Они отправляются через одинаковые интервалы времени, проходят через сеть и принимаются получателем, воспроизводящим данные в реальном времени по их получении. Однако ввиду изменения времени задержки при передаче пакетов по сети, они могут прибывать через нерегулярные интервалы времени. Для компенсации этого эффекта поступающие пакеты буферизуются, придерживаются на некоторое время и затем предоставляются с постоянной скоростью программному обеспечению, генерирующему вывод. Поэтому для функционирования протокола реального времени необходимо, чтобы каждый пакет содержал временную метку- таким образом получатель может воспроизвести поступающие данные с той же скоростью, что и отправитель.

Поскольку RTP определяет (и регулирует) формат полезной нагрузки передаваемых данных, с этим напрямую связана концепция синхронизации, за которую частично отвечает механизм трансляции RTP - микшер. Принимая потоки пакетов RTP от одного или более источников, микшер, комбинирует их и посылает новый поток пакетов RTP одному или более получателям. Микшер может просто комбинировать данные, а также изменять их формат, например, при комбинировании нескольких источников звука. Предположим, что новая система хочет принять участие в сеансе, но ее канал до сети не имеет достаточной емкости для поддержки всех потоков RTP, тогда микшер получает все эти потоки, объединяет их в один и передает последний новому члену сеанса. При получении нескольких потоков микшер просто складывает значения импульсно-кодовой модуляции. Заголовок RTP, генерируемый микшером, включает идентификатор отправителя, чьи данные присутствуют в пакете.

Более простое устройство - транслятор, создает один исходящий пакет RTP для каждого поступающего пакета RTP. Этот механизм может изменить формат данных в пакете или использовать иной комплект низкоуровневых протоколов для передачи данных из одного домена в другой. Например, потенциальный получатель может оказаться не в состоянии обрабатывать высокоскоростной видеосигнал, используемый другими участниками сеанса. Транслятор конвертирует видео в формат более низкого качества, требующий не такой высокой скорости передачи данных.

Методы контроля работы

Протокол RTP используется только для передачи пользовательских данных - обычно многоадресной - всем участникам сеанса. Совместно с RTP работает протокол RTCP (Real-time Transport Control Protocol), основная задача которого состоит в обеспечении управления передачей RTP. RTCP использует тот же самый базовый транспортный протокол, что и RTP (обычно UDP), но другой номер порта.

RTCP выполняет несколько функций:

  1. Обеспечение и контроль качества услуг и обратная связь в случае перегрузки. Так как RTCP-пакеты являются многоадресными, все участники сеанса могут оценить, насколько хороши работа и прием других участников. Сообщения отправителя позволяют получателям оценить скорость данных и качество передачи. Сообщения получателей содержат информацию о проблемах, с которыми они сталкиваются, включая утерю пакетов и избыточную неравномерность передачи. Обратная связь с получателями важна также для диагностирования ошибок при распространении. Анализируя сообщения всех участников сеанса, администратор сети может определить, касается данная проблема одного участника или носит общий характер. Если приложение-отправитель приходит к выводу, что проблема характерна для системы в целом, например, по причине отказа одного из каналов связи, то оно может увеличить степень сжатия данных за счет снижения качества или вообще отказаться от передачи видео - это позволяет передавать данные по соединению низкой емкости.
  2. Идентификация отправителя. Пакеты RTCP содержат стандартное текстовое описание отправителя. Они предоставляют больше информации об отправителе пакетов данных, чем случайным образом выбранный идентификатор источника синхронизации. Кроме того, они помогают пользователю идентифицировать потоки, относящиеся к различным сеансам.
  3. Оценка размеров сеанса и масштабирование. Для обеспечения качества услуг и обратной связи с целью управления загруженностью, а также с целью идентификации отправителя, все участники периодически посылают пакеты RTCP. Частота передачи этих пакетов снижается с ростом числа участников. При небольшом числе участников один пакет RTCP посылается максимум каждые 5 секунд. RFC-1889 описывает алгоритм, согласно которому участники ограничивают частоту RTCP-пакетов в зависимости от общего числа участников. Цель состоит в том, чтобы трафик RTCP не превышал 5% от общего трафика сеанса.

Формат заголовка протокола RTP

RTP - потоко -ориентированный протокол. Заголовок RTP-пакета создавался с учетом потребностей передачи в реальном времени. Он содержит информацию о порядке следования пакетов, чтобы поток данных был правильно собран на принимающем конце, и временную метку для правильного чередования кадров при воспроизведении и для синхронизации нескольких потоков данных, например, видео и аудио.

Каждый пакет RTP имеет основной заголовок, а также, возможно, дополнительные поля, специфичные для приложения.

Использование TCP в качестве транспортного протокола для этих приложений невозможно по нескольким причинам:

  1. Этот протокол позволяет установить соединение только между двумя конечными точками, следовательно, он не подходит для многоадресной передачи.
  2. TCP предусматривает повторную передачу потерянных сегментов, прибывающих, когда приложение реального времени уже их не ждет.
  3. TCP не имеет удобного механизма привязки информации о синхронизации к сегментам - дополнительное требование приложений реального времени.

Другой широко используемый протокол транспортного уровня - LJDP не имеет части ограничений TCP, но и он не предоставляет критической информации о синхронизации.

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

Эту задачу и призван решить новый транспортный протокол реального времени - RTP (Real-time Transport Protocol), который гарантирует доставку данных одному или более адресатам с задержкой в заданных пределах, т. е. данные могут быть воспроизведены в реальном времени.

На рис. 1 представлен фиксированный RTP-заголовок, который содержит ряд полей, идентифицирующих такие элементы, как формат пакета, порядковый номер, источники, границы и тип полезной нагрузки. За фиксированным заголовком могут следовать другие поля, содержащие дополнительную информацию о данных.

0 2 3 4 8 16 31

Synchronization Source (SSRC) Identifier

Contributing Source (CSRC) Identifiers

Рис. 1. Фиксированный RTP-заголовок.

V (2 бита). Поле версии. Текущая версия - вторая.
Р (1 бит). Поле заполнения. Это поле сигнализирует о наличии заполняющих октетов в конце полезной нагрузки. Заполнение применяется, когда приложение требует, чтобы размер полезной нагрузки был кратен, например, 32 битам. В этом случае последний октет указывает число заполняющих октетов.
Х (1 бит). Поле расширения заголовка. Когда это поле задано, то за основным заголовком следует еще один дополнительный, используемый в экспериментальных расширениях RTP.
СС (4 бита). Поле числа отправителей. Это поле содержит число идентификаторов отправителей, чьи данные находятся в пакете, причем сами идентификаторы следуют за основным заголовком.
М (1 бит). Поле маркера. Смысл бита маркера зависит от типа полезной нагрузки. Бит маркера используется обычно для указания границ потока данных. В случае видео он задает конец кадра. В случае голоса он задает начало речи после периода молчания.
РТ (7 бит). Поле типа полезной нагрузки. Это поле идентифицирует тип полезной нагрузки и формат данных, включая сжатие и шифрование. В стационарном состоянии отправитель использует только один тип полезной нагрузки в течение сеанса, но он может его изменить в ответ на изменение условий, если об этом сигнализирует протокол управления передачей в реальном времени (Real-Time Transport Control Protocol).
Sequence Number (16 бит). Поле порядкового номера. Каждый источник начинает нумеровать пакеты с произвольного номера, увеличиваемого затем на единицу с каждым посланным пакетом данных RTP. Это позволяет обнаружить потерю пакетов и определить порядок пакетов с одинаковой отметкой о времени. Несколько последовательных пакетов могут иметь одну и ту же отметку о времени, если логически они порождены в один и тот же момент, как, например, пакеты, принадлежащие к одному и тому же видеокадру.
Timestamp (32 бита). Поле отметки о времени. Это поле содержит момент времени, в который первый октет данных полезной нагрузки был создан. Единицы, в которых время указывается в этом поле, зависят от типа полезной нагрузки. Значение определяется по локальным часам отправителя.
Synchronization Source (SSRC) Identifier (32 бита). Поле идентификатора источника синхронизации: генерируемое случайным образом число, уникальным образом идентифицирующее источник в течение сеанса и независимое от сетевого адреса. Это число играет важную роль при обработке поступившей порции данных от одного источника.
Contributing source (CSRC) Identifier (32 бита). Список полей идентификаторов источника, "подмешанных" в основной поток, например, с помощью микшера. Микшер вставляет целый список SSRC идентификаторов источников, которые участвовали в построении данного RTP-пакета. Этот список и называется CSRC. Количество элементов в списке: от 0 до 15. Если число участников более 15 - выбираются первые 15. Примером может служить аудио-конференция, в RTP-пакеты которой собраны речи всех участников, каждый со своим SSRC - они-то и образуют список CSRC. При этом вся конференция имеет общий SSRC.

Протокол RTCP, как и всякий управляющий протокол, значительно сложнее и по структуре, и по выполняемым функциям (сравните, например, протоколы IP и TCP). Хотя основу протокола RTCP составляет RTP, он содержит множество дополнительных полей, с помощью которых он реализует свои функции.

Протокол резервирования ресурсов - RSVP

Решить проблему приоритетности для чувствительных к задержкам данных, в противовес традиционным данным, для которых задержки не столь критичны, призван протокол резервирования ресурсов - RSVP, находящийся в настоящее время на рассмотрении в группе инженерной поддержки Internet (IETF). RSVP позволяет конечным системам резервировать сетевые ресурсы для получения необходимого качества услуг, в особенности ресурсы для графика реального времени по протоколу RTP. RSVP касается прежде всего маршрутизаторов, хотя приложения в конечных узлах также должны знать, как использовать RSVP в целях резервирования необходимой полосы пропускания для данного класса услуг или уровня приоритета.

RTP вместе с другими описанными стандартами позволяет с успехом передавать видео и аудио по обычным IP-сетям. RTP/RTCP/RSVP - стандартизованное решение для сетей с передачей данных в реальном времени. Единственным его недостатком является то, что оно предназначено только для IP-сетей. Однако это ограничение временное: сети так или иначе будут развиваться в этом направлении. Данное решение обещает решить проблему передачи чувствительных к задержкам данных по Internet.

Литература

Описание протокола RTP можно найти в RFC-1889.


RTSP (Real Time Streaming Protocol, или, по-русски, потоковый протокол реального времени) – это прикладной протокол, в котором описаны команды для управления видеопотоком. С помощью этих команд мы можем «приказать» камере или серверу, например, начать трансляцию видеопотока. Пример запроса на начало воспроизведения выглядит так: PLAY rtsp://192.168.0.200/h264 RTSP/1.0

То есть RTSP – это просто набор команд для управления видеопотоком. Проведем эксперимент. Для этого нам понадобится IP-камера с поддержкой RTSP протокола и ее RTSP адрес. Этот адрес выглядит примерно так rtsp:///mpeg. Его можно узнать из руководства по эксплуатации камеры либо из описания API. Для удобства мы приведем RTSP адреса для ряда популярных камер в таблице. После того, как мы узнали RTSP-адрес камеры, открываем стандартный проигрыватель, поддерживающий RTSP. Это может быть одна из следующих программ: Windows Media Player, QuickTime, Media Player Classic, VLC media player, RealPlayer, MPlayer. Мы выбрали QuickTime. Открываем меню «Файл > Открыть URL» и вводим наш RTSP адрес. После чего QuickTime подключится к камере и воспроизведет «живое видео». Устройства записи, работающие в системах IP-видеонаблюдения, получают видео от камер либо с помощью протокола HTTP – то есть также, как мы скачиваем JPEG-картинки с сайтов, либо в виде потока через RTSP – то есть также как мы получили его с помощью стандартного проигрывателя в последнем примере. В настройках IP-камер потоковый вариант передачи данных может обозначаться как RTSP over , RTSP over либо просто . Итак, RTSP – это набор команд для управления потоком. Но что означают остальные аббревиатуры: TCP, RTP? TCP, и RTP — это транспортные механизмы (протоколы), которые собственно и передают видео.

Протокол TCP

Допустим, мы выбрали метод RSTP over TCP и хотим начать передачу видеопотока. Что будет происходить на уровне транспортных механизмов? Предварительно с помощью нескольких команд будет установлено соединение между отправителем и получателем. После этого начнется передача видеоданных. При этом механизмы TCP
будут следить за тем, чтобы все данные дошли до адресата без изменений и в нужной последовательности. Также TCP будет регулировать скорость передачи, чтобы передатчик не посылал данные интенсивнее, чем их может обработать приемник.

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

Можно увидеть различие в протоколах, поставив следующий эксперимент: попробуйте перевести камеру в режим RTSP over TCP и помашите рукой перед объективом — на экране монитора вы увидите задержку. А теперь проведите этот же тест в режиме RTSP over UDP. Задержка будет меньше. На время задержки влияют несколько факторов: формат сжатия, мощность компьютера, протокол передачи и особенности программного обеспечения, участвующего в декодировании видео.

RTP (Real-time Transport Protocol), или по-русски транспортный протокол реального времени. Этот протокол специально создан для передачи реалтайм трафика. Он позволяет следить за синхронизацией передаваемых данных, корректировать последовательность доставки пакетов и потому более других подходит для передачи видео- и аудиоданных. В общем случае для передачи видеопотока предпочтительнее использовать либо RTP либо UDP. Работа через TCP оправдана лишь если нам приходится работать с проблемными сетями, так как протокол TCP сможет корректировать ошибки и сбои, возникающие при передаче данных.



Рекомендуем почитать

Наверх