Модуль nginx rtmp не может передавать потоковый формат MP4 - PullRequest
0 голосов
/ 24 апреля 2019

У меня медиа-сервер работает на модуле rtmp Nginx + ffmpeg. Он работает на 100% нормально с форматом FLV, но с MP4 он не создает файл .m3u8 и чанки потока.Вот файл nginx.conf:

worker_processes  auto;

events {
    worker_connections  1024;
    multi_accept on;
}

rtmp {
  server {
    listen 1935;
    chunk_size 4000;

    application live {
        live on;
        record off;

        hls on;
    hls_path        /HLS/live;

        hls_keys on;
        hls_key_path       /HLS/keys;
        hls_key_url        https://fakeurl:8441/keys/;
    hls_fragments_per_key   10;

        hls_fragment 3s;
        hls_playlist_length 10s;
        deny play all;
    }
  }
}

http {
    include       mime.types;
    tcp_nopush on;
    directio 512;
    default_type  application/octet-stream;
    sendfile      off;

    server {
        listen       8441 ssl;
    server_name  fakeurl;

        ssl_certificate /home/ubuntu/Keys/server.crt;
        ssl_certificate_key /home/ubuntu/Keys/server.key;

        location /keys {
            root /HLS/;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /live {

            # Disable cache
            add_header 'Cache-Control' 'no-cache';

            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';

            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }

            types {
                application/vnd.apple.mpegurl m3u8;
            }

            root /HLS/;
        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

, и это команда FFmpeg для создания преобразования моего потока RTP в MP4 и передачи его на RTMP-сервер:

ffmpeg -protocol_whitelist 'file,udp,rtp' -i input.sdp -c:v libx264 -pix_fmt yuv420p -profile:v baseline -level 3.0 -g 30 -r 30 -c:a aac -b:v 400k -preset ultrafast -tune zerolatency -movflags frag_keyframe -f mp4 rtmp://0.0.0.0:1935/live/stream1

Я могу подтвердить, что ffmpeg работаетнормально и стабильно с входным потоком, если я изменяю формат вывода на flv, сервер rtmp создает файл stream1.m3u8 и все в порядке.Но в форматах mp4, mov или m4v nginx ничего не создает.

...