Прежде всего, давайте определимся с тем, что же такое потоковая передача данных? Это способ передачи (в данном случае - видео и аудио), при котором транспортировка и воспроизведение мультимедийных данных на удаленном компьютере осуществляются практически в режиме реального времени.
Например, компьютер пользователя находится в удаленном сегменте локальной сети (или даже в другом городе). Данные, в виде серии последовательных пакетов, подготовленных специальным образом, передаются на вход сетевой карты его ПК, где происходит их декодирование. После чего пакеты "собираются" в исходный материал, который и выводится на монитор пользователя в виде исходной последовательности видео или аудио.
Ярким примером этого может служить, набирающий сейчас популярность, Интернет-стриминг, когда оператор в режиме реального времени транслирует изображение со своей камеры в сеть Интернет, а оттуда его уже "подхватывают" пользователи, подключившиеся к трансляции. Можно обеспечить и потоковую передачу материала, уже сохраненного на жестком диске компьютера (запустить в сеть трансляцию нового фильма ужасов или клипа любимой рок-группы) :) Или организовать прямую трансляцию с веб-камеры, подключенной к USB порту нашего ПК.
Общая схема этого действия при этом выглядит следующим образом:
Но обо всем по порядку! Сегодня мы будем говорить о передаче именно потокового видео. Существуют специальные протоколы передачи потоковых данных: RTMP, PNM, RTSP, MMS, RTSPU, RTSPT, MMS, MMST и т.д. Они "на лету" преобразуют исходные данные таким образом, что они могут быть переданы в сеть, как непрерывная последовательность. Использование передовых технологий сжатия и буферизации позволяет просамтривать потоковый контент с любого места, не дожидаясь его полной загрузки на компьютер пользователя.
Предлагаю на этом покончить с теорией и посмотреть на практике, что же это такое потоковая передача видео? А там уж сами для себя решите, нужна лично Вам эта технология или нет, ок?
Сегодня я хочу рассказать Вам об одном замечательном продукте: «Unreal Media Server». Честно скажу, я просто балдею от этого программного комплекса! :) Не знаю, как обстоят сейчас дела на "фронтах" потоковой передачи мультимедиа, но когда я активно интересовался этим вопросом (перепробовал множество решений), то "адекватного" ПО можно было пересчитать по пальцах одной руки. То сервер принципиально платный (не попробуешь), то - не работает, то работает, но - "криво", видео передается с дикими задержками и "тормозами", какие-то решения откровенно тяжелы в настройке, что и разбираться не охота и т.д.
И вот, случайно натыкаюсь я на это замечательное решение. Размер сервера - всего несколько мегабайт, плеера - 500 килобайт! Все работает, видеопоток проигрывается плавно и без задержек. Лишних (избыточных и малоиспользуемых) функций нет, интуитивно понятный графический интерфейс. Короче говоря, куда ни посмотри - одни сплошные плюсы. Минусов даже не нашел :)
Помню, я использовал еще четвертую версию данного ПО. Скачав и установив последнюю версию (специально для написания этой статьи - десятую), я был приятно удивлен тем, что за это время проект не приобрел целого "букета" очень "нужных" фишек и "прибамбасов", очень часто только имитирующих развитие проекта и безосновательно усложняющих введение его в эксплуатацию. Размер дистрибутива остался практически таким же компактным, все, как и прежде, интуитивно понятно, а работает - отлично!
После этого я убедился: «Unreal Media Server» достоин отдельной развернутой статьи на нашем сайте! :) Итак, давайте зайдем на сайт разработчиков данного ПО: umediaserver.net В верхнем левом углу мы увидим ссылку «Produkts», нажимаем на нее. В появившемся списке выбираем «Unreal Media Server».
Затем, в правом боковом меню ищем пункт «Download» (загрузить).
Попадаем на страницу, с которой можем скачать себе на компьютер необходимые дистрибутивы и дополнительные компоненты (плагины).
Нас, в первую очередь будут интересовать базовые компоненты, показанные на фото выше:
- Unreal Media Server - сам потоковый медиа-сервер
- Unreal Live Server - компонент для организации прямой трансляции с IP или веб-камер
-
Streaming Media Player - плеер, который позволяет просматривать видео
Обратите внимание на размеры дистрибутивов программного комплекса! Итак, загружаем все три компонента себе на компьютер:
Давайте, для начала, установим основной модуль - «UMedia Server». Сам процесс инсталляции я не буду описывать и приводить его скриншоты (просто не хочу раздувать статью). Он сводится к нескольким нажатиям на кнопку «Next» и не представляет ничего сложного.
После завершения установки, нажмем на кнопку "Пуск" в панели задач и выберем "Все программы". Среди прочего, мы увидим новую группу «Unreal Streaming», куда и будут добавляться все устанавливаемые компоненты нашего комплекса.
Media Server Configurator позволяет нам производить основную настройку приложения. Возможно, это покажется шуткой, но наш потоковый видеосервер уже готов к работе и может транслировать видео в сеть! Без всякой дополнительной конфигурации! Вот за это мне он тоже нравится :)
Но мы, я надеюсь, хотим твердой рукой сами управлять всеми процессами и понимать что происходит? Тогда давайте запасемся терпением и рассмотрим основные компоненты всего программного комплекса потокового видео. Запускаем Media Server Configurator и видим его главное окно.
Обратите внимание на секции «File Resources» «Live broadcasts». Первая отвечает за воспроизведение по сети файлов, уже хранящихся в специальной папке сервера и готовых к их потоковой трансляции (видеоклипы, фильмы, презентации), а вторая секция используется при организации "живого" (Live) вещания с IP или веб-камеры.
Сейчас мы рассмотрим первый вариант передачи видео, которое хранится на нашем компьютере. Обратите внимание на папку «MediaRoot», которая по умолчанию уже создана на сервере (скриншот выше). Нажав на нее, в правой части окна мы можем увидеть полный путь к ней.
Можем зайти по этому адресу и увидим там один файл test.avi, показанный на фото выше. Именно в эту папку нам нужно будет "складировать" все наши видеофайлы, которые мы хотим транслировать по сети.
Сейчас, не откладывая в долгий ящик, предлагаю организовать просмотр этого тестового файла test.avi на удаленном компьютере. Для этого настроим сеть между двумя нашими ПК: на том, где мы будем инсталлировать серверные компоненты установлена 32-х разрядная Windows 7, а "клиентом" у нас будет выступать старая-добрая Windows ХР.
Примечание: как настроить сеть между двумя компьютерами мы подробно разбирали в одном из наших уроков, поэтому не будем на этом останавливаться.
На компьютер с ХР мы установим Streaming Media Player (установка также очень проста и не требует дополнительных пояснений). Значок плеера, как всегда, ищем под кнопкой "Пуск".
Запускаем его и пробуем проиграть на нем файл test.avi, расположенный на первом нашем компьютере. Для этого нажимаем в верхнем меню на надпись «Play» и из появившегося списка выбираем команду «Play file» (проиграть файл).
В появившемся окне нам надо будет указать базовые настройки подключения. Это - логично, ведь плеер "не знает", где у нас расположен сервер потокового видео и какой именно файл нужно с него проиграть? Вот это нам и нужно ему "объяснить".
В поле «Media Server IP address» указываем сетевой адрес сервера (зависит от того, какой IP мы присвоили компьютеру на этапе настройки сети), в поле «Port» - значение порта, по которому будет осуществляться взаимодействие (обычно он прописан здесь про умолчанию, но, на всякий случай, запомните его номер: 5119).
Примечание: что такое "порты" и зачем они нужны, мы также рассматривали в одном из наших уроков, так что на этом моменте не будем отдельно останавливаться.
Продолжим! Опции «Protocol» нужны для выбора типа сетевого протокола, который будет использоваться для передачи данных. Можете оставить по умолчанию - TCP (Transmission Control Protocol - протокол управления передачей данных).
Поле «File name including virtual folder» служит для указания виртуальной папки хранения наших файлов потокового видео. Как мы помним, это папка «MediaRoot», рассмотренная нами на одном из предыдущих скриншотов. Через слэш указываем имя и расширение файла, который мы хотим получить (воспроизвести) с сервера и нажимаем кнопку «ОК».
Если мы сделали все правильно, то после небольшого ожидания, необходимого плееру для буферизации (первоначального накопления в буфер воспроизведения кадров видео, для последующего плавного их воспроизведения), мы получим доступ к нашему файлу test.avi.
Как видите, все на самом деле очень просто :)
Примечание: При тестировании данного программного комплекса можете располагать все его компоненты на одном компьютере. Сеть между двумя ПК мы создавали здесь только для того чтобы продемонстрировать, как это все работает в условиях, приближенных к "боевым".
Вы можете задать очевидный вопрос: а какие форматы (расширения) видеофайлов поддерживаются данным сервером потокового видео? Отвечу скриншотом, который можно найти на официальном сайте проекта:
На фото выше слева перечислены типы файлов, которые могут быть использованы как для прямой (Live) трансляции непосредственно с камеры, так и для заранее подготовленных файлов, готовых для распространения через сеть. Справа на фото показаны приложения, которые могут "принимать" видеопоток трансляции.
Давайте рассмотрим некоторые настройки, которые мы, при желании, можем изменить в нашем сервере. Что мы можем сделать? Можем, к примеру, изменить виртуальную директорию для хранения и распространения нашего контента. Это делается в главном окне сервера с помощью меню «File» и опции «Nev virtual folder» (новая виртуальная папка).
Откроется окно с настройками. В нем нас (в рамках данной задачи) будут интересовать только первые при поля:
- Folder name - имя новой виртуальной папки (задаем произвольно)
-
Browse - выбираем папку для привязки виртуальной директории (можете создать любую). Можете указать полный путь к уже существующей -
C:\\Program Files\UnrealStreaming\UMediaServer\MediaRoot -
Description - описание папки (задается по желанию)
Для сохранения настроек нажимаем «ОК» и видим, что в "дереве" каталогов у нас появилось новое виртуальное "хранилище" для наших видеофайлов.
Таким образом, можно создать несколько тематических хранилищ и распределить по ним видеоконтент. В любой момент можно просто удалить или временно отключить любую папку, нажав на ней правой кнопкой мыши и выбрать из появившегося списка команду «Delete virtual folder» (удалить виртуальную папку) или «Disable virtual folder» (отключить виртуальную папку).
Теперь, при подключении к серверу потокового видео вместо папки MediaRoot (используемой по умолчанию), мы должны будем в поле «File name including virtual folder» вручную указать новое название: в моем случае - my_video (запрашиваемый файл test.avi остается без изменений).
Надеюсь, сама концепция передачи потокового видео стала более понятна тем нашим читателям, которые раньше с ней не сталкивались? Для людей же, имеющих опыт в этом деле, - знакомство с новым ПО, что само по себе тоже неплохо :)
Продолжим! Сейчас давайте запаролим доступ к воспроизведению файлов. Зачем? Не знаю, но можно при случае воспользоваться :) Опять обратимся к меню «File» - опция «Properties» (свойства).
Появится вот такое серьезное окно:
Примечание: в любом "серьезном" окне главное найти и сконцентрироваться на той его части, которая отвечает за нужную нам на данный момент функцию. Остальное нужно игнорировать! :)
На скриншоте выше я хочу обратить Ваше внимание на места, отмеченные красным. Прежде всего, - это два информационных поля, где записаны номера портов по которым осуществляется передача видеопотока. Рекомендую их запомнить или просто вспомнить в нужный момент, где их можно подсмотреть? :) Порт 5119 - для Unreal плеера и 5130 - для сервера живой (Live) трансляции с камеры (об этом мы поговорим отдельно).
Итак, все что нам нужно от этого окна для организации доступа к видео по паролю, так это кнопка «Add User» и переключатель «Internal Authentication» (Внешняя аутентификация). Переключаем, нажимаем на «Add User» и видим вот такое окно:
На фото выше указываем произвольное имя пользователя для доступа к видеопотоку и придумываем пароль, подтверждая его дважды. Можем больше ничего не менять и сразу нажать «ОК».
Теперь снова запустим на удаленном компьютере Unreal плеер и попробуем "поймать" потоковое видео с сервера. Увидим вот такое приглашение на ввод логина и пароля:
Можем поставить "галочку" рядом с надписью «remember my credentials locally» (запомнить мои учетные данные локально), тогда пользователю, подключающегося повторно с этого компьютера, не нужно будет вводить пароль заново. После заполнения полей нажимаем «ОК» и наше видео успешно отображается!
Для того, чтобы удалить пользователя с сервера и отменить саму аутентификацию по паролю, нам нужно вернуться в "серьезное" окно с настройками, выделить учетную запись пользователя и нажать кнопку «Remove user» (удалить пользователя). Не забудьте вернуть переключатель в положение «Anonymous access» - анонимный доступ! Нажимаем кнопку «ОК», сохраняя настройки.
Думаю, придется разбить нашу статью на две части, а то и так уже слишком длинная "простыня" текста получается. Так и поступим! Тем более, что это будет логичным: в данной (первой) ее части мы рассмотрим организацию трансляции потокового видео из заранее подготовленных файлов, а вторую часть статьи посвятим живой трансляции с камеры и работе с Unreal Live Server.
Перед тем как мы прервемся, давайте во взаимодействии с сервером потокового видео попробуем обойтись без проприетарного (фирменного) плеера Unreal, а задействовать стандартный медиаплеер Windows. Да, он такое умеет! :) Запускаем наш плеер: «Пуск» - «Все программы» - «Проигрыватель Windows Media». Выбираем меню «Файл» (если такового нет, нажимаем клавишу «Alt» на клавиатуре) и из появившегося списка - «Открыть URL-адрес».
Примечание: Windows медиаплеер умеет открывать (подключаться) к потокам видео, распространяемым через сеть. Вот этой его функцией мы и воспользуемся!
В появившемся окне нам нужно будет указать протокол подключения, адрес и порт сервера потокового видео, путь к виртуальной папке и запрашиваемый файл с указанием расширения.
Присмотревшись внимательно, мы обнаружим, что почти все составляющие адреса нам уже знакомы (мы так или иначе сталкивались с ними по ходу данной статьи). Явное исключение составляет здесь "новый" протокол передачи MMS (Microsoft Media Server протокол). Это алгоритм передачи медийного контента компании Microsoft. Сейчас на смену ему пришел более прогрессивный RTSP (Real Time Stream Protocol), но mms оставлен для обеспечения обратной совместимости.
Вот этим мы и воспользуемся! Итак, указываем протокол подключения к серверу (mms), его IP адрес (в нашем случае это 192.168.1.2), порт сервера, на котором он "ждет" подключения (5119, обратите внимание, что после IP адреса порт указывается через двоеточие), дальше прописываем виртуальную папку с видеофайлами (помните, что мы изменили ее на my_video) и в завершении - запрашиваемый нами файл с указанием поддерживаемого сервером расширения (test.avi).
Примечание: если в Windows Mediaplayer не настроены типы (привязки) файлов, может появиться соответствующий запрос. Все что от нас требуется, это несколько раз нажать на кнопку «Далее». Все остальное медиаплеер сделает сам :)
Нажимаем кнопку «ОК». Если мы все сделали правильно (о, эта сакраментальная фраза!), то запустится окно Windows медиаплеера, в котором вверху мы увидим процент буферизации (предварительной загрузки) запрашиваемого нами видео.
Когда это значение достигнет 100% (это произойдет достаточно быстро), видео начнет проигрываться.
А теперь, как и договаривались, переходим ко второй части нашей статьи, посвященной живой трансляции с использованием программного обеспечения Unreal Media Server. Нажимайте на надпись "продолжение" внизу статьи.