我无法使用命令exec启动重新流。我还试过exec_pull。没什么用。我的目标是将rtmp://ktv.s4c.link/live/livestream url重新流到本地的nginx,再流到rtmp://localhost:1935/hls。/tmp/logs/ffmpeg.log是空的。我想exec甚至没有打电话来,但为什么?
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
allow play all;
live on;
record off;
#pull rtmp://ktv.s4c.link/live/livestream;
exec ffmpeg -i rtmp://localhost:1935/live -f flv rtmp://localhost:1935/hls 2>>/tmp/logs/ffmpeg.log;
}
application hls {
allow play all;
live on;
record off;
}
}发布于 2017-05-19 04:49:51
因此,首先,请注意,Nginx以nobody用户的身份运行所有的exec命令。您必须在命令行中像这样测试它:
sudo -u nobody ffmpeg -i rtmp://ktv.s4c.link/live/livestream -f flv rtmp://localhost:1935/hls然后,如果这个命令行工作-打印到nginx.conf。
第二,使用完整的路径。它是非常重要的,因为比Nginx运行的子进程具有与当前用户环境不同的环境。
sudo -u nobody /usr/bin/ffmpeg -i rtmp://ktv.s4c.link/live/livestream -f flv rtmp://localhost:1935/hls第三,我的错误是我使用了存储库中的FFmpeg,而FFmpeg有2.8.11-0ubuntu0.16.04.1版本。与这个回答 FFmpeg相关的是可以用图书馆员编译的,这就是为什么FFmpeg可以要求live=1和引号(“)。
sudo -u nobody /usr/bin/ffmpeg -i "rtmp://ktv.s4c.link/live/livestream live=1" -f flv rtmp://localhost:1935/hls我的最后一个nginx.conf
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
pull rtmp://ktv.s4c.link/live/livestream;
exec_play /usr/bin/ffmpeg -i "rtmp://ktv.s4c.link/live/livestream live=1" -f flv rtmp://localhost:1935/hls 2>>/tmp/ffmpeg-$name.log;
}
application hls {
live on;
record off;
}
}正如您所提到的,我添加了FFmpeg日志2>>/tmp/ffmpeg-$name.log。
https://stackoverflow.com/questions/43993105
复制相似问题