ESPN DeportesCucurella explica intento del Real Madrid por fichar a RodriThe Jerusalem PostCourt adds two years to sentence of man who stole cars from Kibbutz Be'eri after Oct. 7ESPNGame Day Kickoff: Knee-jerk reactions and September lies; what does Week 4 have in store?InquirerBill fixing term of barangay, SK officials for Marcos’ signature – GatchalianBollywood HungamaSalman Khan and Arvind Swamy shoot massive train action sequence for Monster; source reveals details of Mumbai scheduleDaily MaverickTHE TIES THAT BIND US: Ramaphosa uses Heritage Day address to condemn gender-based violence after Ekurhuleni killings한겨레이 대통령 “북한 포로 송환 비공개 합의 어긴 우크라에 아쉬워”Billboard‘Ozzy & Black Sabbath: Back to the Beginning’ Trailer Captures Emotional Punch of Metal Icon’s Final Show: WatchThe Hollywood ReporterBob Iger Reveals That He Wrote a Six-Page Letter to Josh D’Amaro and Left It In His DeskABC NewsFDA commissioner nominee Dr. Heidi Overton appears for confirmation hearingVanguardNigeria, US sign pact to boost $700bn mining investmentInteriaSpotkanie Trump-Xi, emocje w Białym Domu. Doszło do incydentu
The Daily Newsstand · Free, Always
Thursday, September 24, 2026

Трансляция видео в Angie

Translate

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

Навигация по циклу

  1. Почему стоит переходить на Angie.

  2. Установка Angie из пакетов и в докере.

  3. Переезд с Nginx на Angie. Пошаговая инструкция.

  4. Настройка location в Angie. Разделение динамических и статических запросов.

  5. Перенаправления в Angie: return, rewrite и примеры их применения.

  6. Сжатие текста в Angie: статика, динамика, производительность.

  7. Серверное кэширование в Angie: тонкости настройки.

  8. Настройка TLS в Angie: безопасность и скорость.

  9. Настройка Angie в роли обратного HTTP‑прокси.

  10. Балансировка нагрузки для HTTP(S) в Angie.

  11. Мониторинг Angie с помощью Console Light и API.

  12. Балансировка и проксирование L4-трафика в Angie.

  13. Клиентское кэширование в Angie.

  14. Динамические группы проксируемых серверов в Angie.

  15. Мониторинг Angie с Prometheus и Grafana.

  16. Отказоустойчивый кластер Angie с VRRP и Keepalived.

  17. Контроль доступа в Angie.

  18. Аутентификация клиентов в Angie с помощью TLS‑сертификатов.

  19. Кастомизация Angie (njs, Lua, Perl).

  20. Запуск CGI‑скриптов в Angie.

  21. Защита от DoS‑атак в Angie стандартными модулями.

  22. Защита от DoS‑атак в Angie (дополнительные средства).

  23. Автоматические TLS‑сертификаты в Angie с модулем ACME.

  24. HTTP/2 и HTTP/3: настройка, достоинства и недостатки.

  25. Работа с картинками в Angie.

  26. Инструменты для бенчмарка веб‑сервера.

  27. Тест современных компрессоров для HTTP.

  28. Визуализация кастомных метрик Angie в Grafana.

  29. Влияние TLS‑библиотек и настроек на производительность.

  30. Сборка Angie из исходных кодов.

  31. Оптимизация Angie для высоких нагрузок.

  32. Логирование в Angie.

  33. Работа с переменными в Angie.

  34. Работа с HTTP-заголовками запроса и ответа.

  35. Настройка DNS over HTTPS с ACME сертификатами в Angie.

  36. Трансляция видео в Angie.

Видеоверсия

Для вашего удобства подготовлена видеоверсия этой статьи, доступна на Rutube, VKVideo и YouTube.

Общие основы передачи видео в вебе

На первый взгляд разместить видео на странице веб-сайта сегодня просто: достаточно разместить видеофайл на сервере и использовать какой-либо тип плеера на странице со ссылкой на этот файл. 

На деле всё сложнее, появляются дополнительные требования:

  • возможность быстрой и удобной перемотки видео;

  • просмотр ролика без полного скачивания;

  • переключение качества видео в зависимости от канала;

  • различные форматы и кодеки для каждого типа устройств;

  • трансляция живого потока;

  • оптимизация нагрузки на сервер (канал, диски, процессор).

Для ответа на подобные требования разработаны протоколы передачи видео, различные кодеки для сжатия видео и аудиопотока. Как минимум, нам пригодятся следующие варианты протоколов: RTMP, HLS, DASH. 

Real-Time Messaging Protocol (RTMP) — один из первых протоколов передачи видео в вебе, разработанный компанией Adobe для работы с форматом Flash Video (FLV). Сейчас он используется преимущественно для передачи потока трансляции на сервер (где поток перекодируется и распределяется по клиентам). Есть защищенные версии (RTMPS, RTMPE), где поток шифруется. 

HTTP Live Streaming (HLS) — протокол, разработанный компанией Apple для передачи видеопотоков поверх HTTP. Исходный файл разбивается на сегменты (.ts), для которых составляется плейлист (.m3u8). Клиент получает плейлист и запрашивает нужные сегменты. Протокол поддерживает адаптивный битрейт, имеет поддержку в браузерах и часто используется видеохостнигами.

Dynamic Adaptive Streaming over HTTP (DASH) — протокол, разработанный компанией MPEG (Moving Picture Experts Group). По принципу работы похож на HLS: плейлист (.mpd) и разбитый на фрагменты (.ts) видеоролик. Также поддерживает адаптивный битрейт, различные кодеки видео (H264, H265, VP9 и т.д.) и передаёт фрагменты по HTTP.

Начнём с базовых возможностей Angie для видео и его встроенных модулей.

Возможности встроенных модулей MP4 и FLV

Модуль FLV реализует отдачу видео с указанной в параметре start временной меткой. Как понятно из названия, он работает с форматом Flash Video (FLV). Директиву flv можно включить в контексте локации:

location /video/ {
	flv;
}

Более широкими возможностями обладает модуль MP4. Помимо отдачи выбранного фрагмента файла (поддерживаются параметры start и end), модуль умеет ограничивать скорость отправки видео относительно битрейта файла.  Рассмотрим пример использования модуля MP4:

location ~ \.mp4$ {
  mp4;
  mp4_buffer_size     1M;
  mp4_max_buffer_size 3M;
  mp4_limit_rate	    2;
  mp4_limit_rate_after 10s;
}

В примере мы создаём локацию на основе регулярного выражения, в неё будут попадать файлы с расширением mp4. Директива mp4 включает обработку файлов с помощью модуля, а также мы ограничиваем скорость отправки видео до двух битрейтов (mp4_limit_rate), лимит начинает работать после первых 10 секунд проигрывания видео. В примере также настроены буферы для обработки файлов: начальный (mp4_buffer_size) и максимальный (mp4_max_buffer_size). В Angie все эти возможности доступны в открытой версии, в Nginx ограничение скорости доступно только в коммерческой.

Переходим к более мощным решениям для работы с видео, первым будет модуль RTMP.

Модуль RTMP

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

Установить модуль можно из репозитория Angie:

apt install angie-module-rtmp

Загрузка модуля как обычно располагается в контексте main:

load_module modules/ngx_rtmp_module.so;

Рассмотрим самый простой вариант конфигурации: живая трансляция потока без записи. Для начала создадим конфигурацию в Angie (модуль RTMP имеет собственный контекст rmtp):

rtmp {
  server {
  listen 1935;
  	application live {
  	   		live on;
  	}
  }
}

Здесь мы создали сервер для трансляции живого потока, указали сокет (TCP 1935) и название (live). Чтобы протестировать этот конфиг, потребуется видеофайл и утилита ffmpeg.

Запустим в качестве входного потока трансляции зацикленный файл через ffmpeg:

ffmpeg -re -i "/video/mi2.mp4" -c:v copy -loop 1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp://localhost/live/bbb

Эта команда использует входной файл и без перекодирования отправляет его в контейнере flv на адрес нашего RTMP-сервера (rtmp://localhost/live/). Получить поток с сервера можно плеером с поддержкой RMTP, например mplayer:

mplayer rtmp://192.168.0.1/live/bbb

Здесь и далее адрес сервера будет 192.168.0.1. На выходе мы получим трансляцию зацикленного файла, который передаёт в сервер ffmpeg. Однако, чистый протокол RTMP ограниченно применим в вебе. Поэтому дополним конфигурацию протоколом HLS:

rtmp {
  server {
    listen 1935;
		application live {
    		live on;
  			hls on;
           	hls_path /var/www/html/stream/hls;
           	hls_fragment 3;
           	hls_playlist_length 60;
		}
   	}
}

Здесь мы подключили протокол HLS для фрагментов потока и плейлиста к ним. Но на этом конфигурация не закончена. Нужно создать обычный сервер в контексте http для отдачи фрагментов и плейлистов.

server {
    listen 8088;
    location / {
        add_header Access-Control-Allow-Origin *;
        root /var/www/html/stream;
    }
}

Сервер создан (не забудьте также заранее создать директорию /var/www/html/stream). Теперь мы можем найти плейлист на трансляцию и открыть его в совместимом плеере (например, VLC). Адрес плейлиста будет следующим:

http://192.168.0.1:8088/hls/bbb.m3u8

Также несложно добавить поддержку протокола DASH, полная конфигурация теперь будет такой:

rtmp {
  server {
  listen 1935;
  	application live {
   		live on;
  		hls on;
       	hls_path /var/www/html/stream/hls;
       	hls_fragment 3;
       	hls_playlist_length 60;
        dash on;
        dash_path /var/www/html/stream/dash;
  	}
  }
}

Адрес плейлиста для DASH следующий:

http://192.168.0.1:8088/dash/bbb.mpd

Для корректной работы плейлиста нужно прописать его MIME-тип (обычно в/etc/angie/mime.types):

application/dash+xml mpd;

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

rtmp {
  server {
  listen 1935;
  	application live {
  		live on;
  		...
    	record all;
    	record_path /tmp/rec;
  		record_suffix _recorded.flv;
  		record_unique on;
  	}
  }
}

Для успешной записи заранее создаём директорию и назначаем права для записи от пользователя, с которым работает Angie (пусть это будет www-data):

mkdir /tmp/rec
chown -R www-data:www-data /tmp/rec

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

Модуль RTMP является универсальным комбайном для работы с видео. Для сравнения кратко рассмотрим сторонний модуль VOD, который частично перекрывается по функциональности с RTMP-модулем.

Модуль VOD

Сторонний модуль VOD (Video On Demand) предназначен для раздачи видео из файлов. Он поддерживает протоколы RTMP, HLS и DASH, есть поддержка адаптивного битрейта видео, генерации миниатюр из видео.

В модуле предусмотрены три режима работы:

  • локальный (local): трансляция файлов с диска;

  • удалённый (remote): раздача файлов, доступных по HTTP;

  • ассоциативный (mapped): раздача в соответствии с JSON-файлом.

Начнём с установки модуля из репозитория Angie:

apt install angie-module-vod

Подключаем модуль в main-контексте.

load_module modules/ngx_http_vod_module.so;

Рассмотрим пример конфигурации сервера с модулем VOD:

http {
  vod_mode                           local;
  vod_metadata_cache                 metadata_cache 16m;
  vod_response_cache                 response_cache 512m;
  vod_last_modified_types            *;
  vod_segment_duration               9000;
  vod_align_segments_to_key_frames   on;
  vod_dash_fragment_file_name_prefix "segment";
  vod_hls_segment_file_name_prefix   "segment";
  vod_manifest_segment_durations_mode accurate;
  
  server {
     listen 8090;
     server_name localhost;
     root /var/www/html/vod;
     add_header Access-Control-Allow-Headers '*';
     add_header Access-Control-Allow-Origin '*';
     add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS';
     location /hls/ {
             vod hls;
             alias /var/www/html/vod/;
     }
     location /thumb/ {
             vod thumb;
             alias /var/www/html/vod/;
     }
     location /dash/ {
             vod dash;
             alias /var/www/html/vod/;
     }
  }
}

В этом примере мы можем раздавать локальные файлы по протоколам HLS и DASH, а также создаём локацию для генерации миниатюр видео (/thumb/). 

Также в общей части конфигурации (контекст http) мы задаём локальный режим работы, размеры кэшей и настройки сегментирования видеофайлов.

Поддержки живых трансляций в рамках этого модуля нет, для них авторы рекомендуют использовать продукт Kaltura Media Framework.

Подведём итоги статьи.

Итоги

Сервер Angie наделён базовыми способностями работы с видео с помощью встроенных модулей. Однако, подключение сторонних модулей (например, RTMP) открывает возможности для создания полноценного видеосервиса на основе Angie и открытого софта (ffmpeg, открытые библиотеки видеокодирования и т.д.) Даже если не стоит задачи создавать полноформатный видеохостинг, работа с видео пригодится для локальных корпоративных задач. 

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.