Nginx RTMP / HLS - поток в ffmpeg и вывод HLS - PullRequest
0 голосов
/ 21 октября 2018

На данный момент мое решение работает, но только как RTMP, я могу отлично смотреть мой поток, используя URL:

rtmp://X.X.X.X:1935/show/name

Но проблема в том, что мой LG Smart Tv, который использует WebOS, не поддерживаетRTMP и я бы очень хотел сыграть там мой поток.Единственное решение, которое я вижу сейчас, - это использование HLS.С HLS все тоже отлично работает, но мне нужно выполнить мою команду ffmpeg перед тем, как открыть поток HLS на ТВ, иначе он не создаст файлы, необходимые для отображения потока на моем телевизоре.

Поэтому моя цель состоит в том, чтобыобслуживать поток как HLS без необходимости запускать конечную точку RTMP или FFMPEG вручную.

Я действительно борюсь с этим, тратя 3 дня, пытаясь заставить его работать: (

http 
{
location /hls 
{
    # 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;
        video/mp2t ts;
    }

    root /mnt/;
    }
}

}
rtmp {
server {
    listen 1935;

    chunk_size 4000;
    buflen 5s;

    application show {
        live on;

    exec_pull ffmpeg -re -i http://stream-coming.com/$name.ts -c:v libx264 -preset faster -pix_fmt yuv420p -c:a aac -f flv rtmp://localhost/show/$name;

        # Turn on HLS
        hls on;
        hls_path /mnt/hls/;
        hls_fragment 3;
        hls_playlist_length 60;
        # disable consuming the stream from nginx as rtmp
        deny play all;
    }
}

}

Спасибо за ваше время;)

1 Ответ

0 голосов
/ 21 ноября 2018

Попробуйте вместо этого что-то вроде этого:

rtmp {
    server {
        listen 1935;

        application show {
            live on;

            exec_push ffmpeg -re -i rtmp://stream-coming.com:1935/$name.ts
            -c:v libx264 -preset faster -pix_fmt yuv420p -c:a aac -f flv rtmp://localhost:1935/hls/$name;
            exec_kill_signal term;
        }

        application hls {

            # Turn on HLS
            live on;
            hls on;
            hls_path /mnt/hls/;
            hls_fragment 3;
            hls_playlist_length 12;
            # disable consuming the stream from nginx as rtmp
            allow publish 127.0.0.1;
            deny play all;
        }
    }
}
...