HD видео или что-то около того…
Сегодня интернет у большинства быстрый, сети растут, провайдеры пухнут (некоторые — от голода, но туда им и дорога). При достаточно серьезном канале среднестатистический сферический пользователь в вакууме не то что не заморачивается всяческими там программками для скачивания и кавалерийским галопом по сайтам, а частенько все потребляет из сети напрямую. Где-то оттуда же растут ноги явления IPTV.
Возьмём простейший видеопрокат. Там все банально — заплатил денежку, посмотри фильм. Что мешает повторит подобное в сети? Правильно, ничего, кроме злобных пиратов, которые тут же стырят видео и начнут клонировать везде где только можно. Остаётся уповать на привередливость и законопослушность потребителя. Впрочем, все это лирика, перейдём к технике.
У нас есть самый удобный механизм распространения видео, встроенный почти в каждый браузер — это Flash Player, способный проигрывать видео в формате FLV (Macromedia в свое время сделали удачную ставку на это). Беда в другом — являясь, по сути, контейнерным форматом, FLV может содержать в себе не так много разнообразных медиаданных, иными словами — набор поддерживаемых кодеков для сжатия аудио и видео потока сильно ограничен. На данный момент в 9-й версии поддерживается только H.263, On2 VP6, H.264, ADPCM, MP3, AAC, при этом H.264 добавлен совсем недавно. Поэтому приемлемого качества картинку можно было получить при помощи только VP6, который является закрытым, а компания, его разработавшая, целиком переориентировалась на следующую версию кодека VP7.
Тем не менее, добавление в список поддерживаемых кодеков H.264, обеспечивающего лучшую по качеству картинку, нежели MPEG-4 и MPEG-2 при той же ширине потока, и позволяет нам реализовать проект по распространению видео высокого разрешения в массы.
Как можно догадаться, перед создателями видеосервиса стоят три основные задачи:
- где взять контент;
- как привести видео к единому формату;
- как донести видео до потребителя;
- как сформировать вокруг ресурса сообщество потребителей, обеспечивающих постоянный и гарантированный доход.
При этом задачи 1 и 4 являются исключительно организаторскими, а задачи 2 и 3 — наоборот, техническими. Вот их и рассмотрим.
Начнём с приведения к единому формату. Тут у нас есть два варианта: а) воспользоваться множеством программного обеспечения, предлагаемого той же компанией Adobe (и другими компаниями), позволяющим из всего что угодно сделать FLV-файл; б) применить открытое ПО. Если с первым вариантом все понятно, то второй требует небольшого пояснения.
В ffmpeg возможность сопряжения flv формата и H.264-кодека (реализуемого через libx264) добавлена только в самых последних версиях, так что рекомендую собрать пакет из исходников с Subversion-репозитария. Методом проб и ошибок выяснилось, что вполне удобоваримые результаты получаются при помощи следующей комбинации:
1 | ffmpeg -i source.mov -qmin 1 -qmax 15 -b 880K -s 640x336 -vcodec libx264 -ab 64K -ar 44100 -ac 2 result.flv |
где
- source.mov — исходный файл;
qmin 1 — максимально допустимое качество (1 — лучше всего … 31 — хуже всего);
qmax 15 — минимально допустимое качество;
b 880K — битрейт (скорость видеопотока);
s 640×336 — линейный размер видео в пикселях (в 3 раза меньше традиционного HDTV — этого вполне достаточно);
vcodec libx264 — видео-кодек H.264;
ab 64K — битрейт аудио (можно повысить до 128);
ar 44100 — частота дискретизации (во Flash не может быть больше 44100, в HDTV — как правило — 48000);
ac 2 — количество аудио-каналов (2 — стерео);
result.flv — имя результирующего файла.
Впрочем, можно еще поиграться с параметрами. И, разумеется, не помешает одеть сверху метаданные. Правда, yamdi нам уже тут не поможет, зато есть flvtool++, доведённая до ума разработчиками FaceBook, как раз для наших целей.
Далее, организация доставки видео до потребителя. Тут у нас опять есть варианты (и это очень хорошо, когда они есть): а) воспользоваться потоковым вещанием посредством RTMP (закрытого прокола Adobe); б) применить псевдо-потоковое вещание. На сайте Adobe сильно склоняют ко второму.
Потоковых серверов, вещающих по протоколу RTMP, также существует несколько:
- Adobe Flash Media Server — есть версия под Windows и Linux. Streaming версия содержит 2 модуля — live (для проигрывания потока вещания) и vod (Video on Demand, для потоковой трансляции роликов). Во втором случае достаточно перенести получившиеся в процессе конвертации файлы в каталог /opt/adobe/fms/applications/vod/media — и телемаркет, можно приступать к тонированию проигрывателя. Вариант поставки для разработчиков бесплатен, главное — при установке не забыть использовать параметр -platformWarnOnly, потому как изначально сервер ориентирован на коммерческие версии Linux.
- Wowza Media Server — простой в использовании RTMP-сервер, написанный на Java. В комплекте сразу предоставляются примеры на все случаи жизни, что очень удобно. Если планировать дальнейшее расширение в сторону интерактива — данное решение будет оптимальным.
- Red5 — OpenSource, а-ля J2EE-приложение. По сравнению с предыдущим вариантом, на мой взгляд, весьма монструозное (на мой замутнённый взгляд).
Иной способ решить задачу — использование либо PHP-сценариев, либо возможностей lighttpd по обеспечению псевдовещания. Наиболее популярные Flash-проигрыватели (такие как JW Media Player и FlowPlayer) поддерживают эти возможности, разработчику остаётся лишь спрятать прямую ссылку на файл, чтобы любителям нарушать авторские права было не так комфортно.

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


Очень хорошее и понятное начало статьи и прекрасное но уже не такое понятное для неискушенного интернет-деятеля как я продолжение. Ну а полностью готовое решение предлагается? Например у меня есть вэб сайт со ссылками российских каналов и каналов стран СНГ. Там в основном MMS потоки. Качество не отличное, но возможно приемлимое. Задача стоит такая: Получить из этих ссылок хорошие видеопотоки, которые бы можно было с удовольствием смотреть через компьютер или подав сигнал через STB на телевизор через HDMI кабель.
С уважением
Михаил