Команда ffmpeg exec не работает в nginx rtmp

Я использую модуль nginx и rtmp для потоковой передачи в реальном времени hls и mpeg-dash. вот моя команда rtmp в nginx .conf

rtmp {
server {
    listen 1936;


    application mypull {
    live on ;
    meta copy;
    allow play all;

    pull rtmp://184.72.239.149/vod/BigBuckBunny_115k.mov name=test live=1;


    exec_push   /usr/bin/ffmpeg -re -i rtmp://localhost:1936/mypull/$name -vcodec libx264 -acodec libmp3lame -f flv rtmp://localhost:1936/hls/$name;


}


application dash {
        live on;
        dash on;
        dash_path /tmp/dash;
        dash_nested on;
        dash_fragment 5s;
        dash_playlist_length 30s;
    }
     application hls {
        live on;
        hls on;
    hls_playlist_length 30s;
    hls_fragment 5s;
        hls_path /tmp/hls;
    }
}
}

но это не играет. похоже, что команда ffmpeg даже не запущена. а папки hls и dash пусты. может ли кто-нибудь помочь мне с этим?


person evan    schedule 22.02.2017    source источник
comment
После замены переменных фактическим идентификатором потока ваша команда ffmpeg работает из командной строки?   -  person Gergely Lukacsy    schedule 22.02.2017
comment
это настоящий идентификатор, мой nginx.conf в точности такой. он не производит никакого вывода. @GergelyLukacsy   -  person evan    schedule 22.02.2017
comment
Нет. Идентификатор потока подставляется в переменную $name. Когда вы открываете поток, URL-адрес выглядит следующим образом: rtmp://server.com:1935/mypull/12345, где 12345 - идентификатор вашего потока. Я думаю, вы можете заменить что угодно в этом случае, поэтому попробуйте, что это ваша консоль: ffmpeg -re -i rtmp://localhost:1936/mypull/123 -vcodec libx264 -acodec libmp3lame -f flv rtmp://localhost:1936/hls/123 Также убедитесь, что порт открыт в настройках вашего брандмауэра. Почему вы используете 1936 год для RTMP? По умолчанию - 1935 год.   -  person Gergely Lukacsy    schedule 22.02.2017
comment
Кроме того, какая часть системы не работает? Вы перечислили здесь три разных приложения. RTMP? ЗОЖ? HDS?   -  person Gergely Lukacsy    schedule 22.02.2017
comment
мой идентификатор потока - test. Я объявил это в name = test, а также открыл порт (1936 г.). мое приложение hls не работает, и похоже, что оно не создает сегменты и файл m3u8, потому что, когда я пытаюсь воспроизвести его на онлайн-плеере, с F12 он дает 404 для test.m3u8 @GergelyLukacsy   -  person evan    schedule 22.02.2017


Ответы (3)


Отредактируйте файл nginx.conf и введите первую строку:

user  root;

Это запустит вашу команду как root

person Ridha Ben Njima    schedule 25.08.2017

Поместите команду ffmpeg в сценарий bash. Например, мой сценарий bash называется ff.sh и хранится в папке / files

Поместите в скрипт всю команду ffmpeg и сделайте ее исполняемой:

chmod +x /files/ff.sh

exec_push скрипт в nginx.conf

application origin {
live on;
 exec_push /files/ff.sh;
}

Вы можете обнаружить, что это работает для вас.

person Paul    schedule 24.05.2017

Убедитесь, что пользователь, запускающий nginx, может выполнять команды. Часто ему не назначается оболочка.

person keeshux    schedule 05.06.2020