如何在单独的进程中使用 ffmpeg 进行流式传输

Max*_*lov 8 ffmpeg background-process

我需要在 Ubuntu 上使用 ffmpeg 进行流式传输。流式传输应该从 bash 脚本开始。

目前,我像这样调用 ffmpeg,作为 bash 脚本中子程序的一部分:

function startFFMpegEncoder () {
    echo "Starting Encoder..."

    killall -9 ffmpeg   

    ffmpeg -s 640x480 -f video4linux2 -i $CAM_PATH -f mpeg1video -b:v 800k -r 30 http://127.0.0.1:$FFMPEG_PORT/$VIDEO_PASSWORD/640/480/ &

    echo "Encoder started."
}
Run Code Online (Sandbox Code Playgroud)

这是脚本执行的这一部分产生的输出:

Starting Encoder...
ffmpeg: no process found
ffmpeg version N-73895-g323ec6b Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libdcadec --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab
  libavutil      54. 28.100 / 54. 28.100
  libavcodec     56. 50.101 / 56. 50.101
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 25.100 /  5. 25.100
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100

[1]+  Stopped                 ffmpeg -s 640x480 -f video4linux2 -i $CAM_PATH -f mpeg1video -b:v 800k -r 30 http://127.0.0.1:$FFMPEG_PORT/$VIDEO_PASSWORD/640/480/
Encoder started.
Run Code Online (Sandbox Code Playgroud)

为什么 ffmpeg 会立即停止?只要终端窗口中有输出跟踪,在单独的终端中作为单个命令运行 ffmpeg 就会启动广播。

der*_*ert 6

可能它正在尝试读取标准输入(ffmpeg 实际上需要交互式命令......)。要禁用它,ffmpeg 有一个-nostdin选项——应该让它在后台运行。

您还可以考虑-loglevel fatal-loglevel error以及其他一些使其更安静的选项(-nostats等)。