Ubuntuからストリーミングするにはffmpegを使用する必要があります。ストリームはbashスクリプトから開始する必要があります。
現在、私はbashスクリプトのサブルーチンの一部として次のようにffmpegを呼び出します。
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."
}
以下は、スクリプトのこの部分を実行して生成された出力です。
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.
ffmpegがすぐに停止するのはなぜですか?別の端末でffmpegを単一のコマンドで実行すると、端末ウィンドウに出力トレースがある限りブロードキャストが開始されます。
答え1
おそらく標準入力を読み取ろうとしています(ffmpegには実際に対話型コマンドが必要です...)。この機能を無効にするには、ffmpeg をオプションでバックグラウンド-nostdin
で実行できます。
-loglevel fatal
または、-loglevel error
より静かにするための他のオプション(など)を検討することもできます-nostats
。
答え2
ただstdinをリダイレクトしてください。
次のコマンドを使用してくださいffmpeg ... > output.log 2>&1 < /dev/null &
。
> output.log
標準出力をoutput.logにリダイレクトします。2>&1
stderrをstdoutにリダイレクトします(したがって、端末の代わりにログファイルに残ります)。< /dev/null
ffmpegが必要だと思うことで、標準入力/dev/null
(空のストリーム提供)をリダイレクトします。&
プロセスはバックグラウンドで実行されます。
答え3
~によるとffmpegウェブサイトのPHPの例、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/ -nostdin -nostats </dev/null >/dev/null 2>&1 &
これらの</dev/null >/dev/null 2>&1
ビットが機能します。