Глава 9. Управление сложными потоками медиа

Введение

Данная глава рассматривает медиа потоки через NGINX в форматах MPEG-4 или Flash Video. NGINX широко применяется для массивного распространения и потокового содержимого. NGINX поддерживает форматы стандартов отрасли и потоковые технологии, которые будут обсуждены в данной главе. NGINX Plus делает возможным фрагментирование содержимого на лету при помощи модуля HTTP Live Stream, а также возможность доставки HTTP Dynamic Streaming, который уже является фрагментированным медиа. NGINX естественным образом допускает пределы для полос пропускания, а расширенные свойства NGINX Plus предлагают пределы скорости передачи битов, что делает возможной доставку наиболее действенным способом при резервировании имеющихся ресурсов сервера для охвата большего числа пользователей.

Обслуживание MP4 и FLV

Задача

Вам требуется отправлять поток цифровых данных, изначально представленных в формате MPEG-4 (MP4) или Flash Video (FLV).

Решение

Обозначьте некий блок местоположения HTTP как .mp4 или .flv. NGINX будет управлять потоком этого медиа применяя прогрессивные выгрузки или псевдопотоки HTTP с поддержкой поисков:


http {
    server {
        ...

        location /videos/ {
            mp4;
        }
        location ~ \.flv$ {
            flv;
        }
    }
}
 	   

Блок местоположения данного примера сообщает что файлы в каталоге videos представлены в формате с типом MP4 и могут направляться потоком с поддержкой прогрессивной выгрузки. Второй блок местоположения указывает NGINX что все файлы, завершающиеся на .flv представлены в формате FLV и могут направляться потоком с поддержкой псевдопотоков HTTP.

Обсуждение

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

Организация потоков с помощью HLS

Задача

Вам требуется поддержка HTTP Live Streaming (HLS) для кодированного H.264/AAC содержимого, упакованного в файлы MP4.

Решение

Воспользуйтесь модулем HLS NGINX Plus с сегментацией в реальном масштабе времени, пакетизацией и мультиплексированием, а также с контролем буферизации фрагментов и многими иным в качестве аргументов перенаправления HLS:


location /hls/ {
    hls; # Use the HLS handler to manage requests

    # Serve content from the following location
    alias /var/www/video;

    # HLS parameters
    hls_fragment 4s;
    hls_buffers 10 10m;
    hls_mp4_buffer_size 1m;
    hls_mp4_max_buffer_size 5m;
}
 	   

Данный блок местоположения демонстрирует направления NGINX для потоков медиа HLS из каталога /var/www/video, причём с фрагментированием данного медиа на сегменты по четыре секунды. Общее число буферов HLS устанавливается в 10 с размером по 10 Мегабайт. Начальный размер буфера MP4 устанавливается в 1 МБ с максимальным значением в 5 МБ.

Обсуждение

Доступный в NGINX Plus модуль HLS предоставляет свои возможности для мультиплексирования транспортировки файлов с медиа MP4 на лету. Существует множество директив, которые предоставляют вам возможность контроля над тем как фрагментируется и буферизуется ваше медиа. Определённый блок местоположения должен быть настроен для обслуживания этого медиа как некого потока HLS с соответствующим обработчиком HLS. Значение фрагментации HLS устанавливается в числе секунд, что указывает NGINX на необходимость фрагментирования по длине времени. Общее число буферируемых данных устанавливается с помощью директивы hls_buffers, определяющей количество буферов и их размер. Данному клиенту разрешается начинать воспроизведение его медиа после осуществления накопления буферизации определённого объёма, определяемого hls_mp4_buffer_size. Однако может потребоваться больший размер буфера если метаданные для этого видео могут превышать первоначальный размер буфера. Такой объём блокируется сверху значением hls_mp4_max_buffer_size. Эти переменные буферизации позволяют NGINX оптимизировать практику получаемую конечным пользователем; выбор правильных значений для этих директив требует знания целевой аудитории и вашего медиа. Например, если имеющиеся пачки вашего медиа составляют видео файлы, а ваша целевая аудитория имеет широкую полосу пропускания, вы можете выполнить оптимизацию большим размером максимума буфера и фрагментированием с большей длиной. Это позволит вам изначально выгружать без ошибок метаданные относительно содержимого, а вашим пользователям получать фрагменты с большей длиной.

Организация потоков с помощью HDS

Задача

Вам требуется поддержка HDS (HTTP Dynamic Streaming) Adobe, который уже был фрагментирован и обособлен от своих метаданных.

Решение

Для предложения своим пользователям Adobe Adaptive Streaming воспользуйтесь модулем поддержки файлов FLV (F4F) из NGINX Plus:


location /video/ {
    alias /var/www/transformed_video;
    f4f;
    f4f_buffer_size 512k;
}
 	   

Данный пример указывает NGINX Plus на необходимость обслуживать изначально фрагментированное видео из некого местоположения на диске своему клиенту при помощи модуля F4F NGINX Plus. Значение размера буфера для его индексного файла (.f4x) устанавливается в 512 килобайт.

Обсуждение

Модуль F4F NGINX Plus позволяет NGINX обслуживать для конечных пользователей изначально фрагментированные медиа. Сама настройка этого проста и состоит в применении обработчика F4F внутри некого блока местоположения HTTP. Значение директивы f4f_buffer_size настраивает величину размера буфера для файла индексации данного типа медиа.

Пределы полосы пропускания

Задача

Вам требуется лимитировать полосу пропускания нисходящего медиа потока клиентов без воздействия на практику их просмотра.

Решение

Примените поддержку побитовой скорости NGINX Plus для файлов медиа MP4:


location /video/ {
    mp4;
    mp4_limit_rate_after 15s;
    mp4_limit_rate 1.2;
}
 	   

Данная настройка позволяет клиентам вашего нисходящего потока выгружать 15 секунд до применения ограничения битовой скорости. После 15 секунд данному клиенту разрешается выгружать медиа с соотношением 120% к установленной скорости обмена данных, что делает возможным этому клиенту всегда выполнять выгрузку быстрее воспроизведения.

Обсуждение

Ограничение скорости обмена NGINX Plus позволяет вашему потоковому серверу динамично ограничивать полосу пропускания для всего подлежащего обслуживанию медиа, позволяя клиентам выгрузку даже быстрее чем им это требуется чтобы обеспечить некую бесшовную практику пользователям. Обсуждаемый обработчик MP4, описанный в рецепте Обслуживание MP4 и FLV, озаглавливает этот блок местоположения для форматов MP4 медиа. Ограничивающие скорость директивы, такие как mp4_limit_rate_after, указывают NGINX ограничивать в секундах в скорости обмен только по прошествию установленного промежутка времени. Другой директивой, вовлечённой в ограничение скорости MP4 является mp4_limit_rate, которая определяет значение скорости обмена данными для данного медиа. Значение 1 предоставляемое для директивы mp4_limit_rate означает что NGINX ограничивает полосу пропускания скоростью воспроизведения этого медиа (1-к-1). Предоставление для данной директивы значения mp4_limit_rate большего единицы позволит пользователям выполнять выгрузку быстрее чем они просматривают с тем, чтобы они были способны осуществлять буферизацию своего медиа и бесшовно просматривать его в процессе его выгрузки.