ffmpeg linux后台运行
前台运行ffmpge就不说,指令一敲ok。但是如果给指令加上nohup,后面加&号码,例如
nohup ./ffmpeg -re -rtsp_transport tcp -i "rtsp://admin:123456@99.99.99.75:554/h264/ch1/main/av_stream?videoCodecType=H.264" -vcodec copy -acodec aac -f flv -y rtmp://122.51.252.37/live/livestream &
ffmpg就会自动挂起。
原因:
It hangs because after a certain point it can not write to it's output pipe any longer.
When you run a process it has 3 opened pipes for: stdin, stdout and stderr. A pipe has a memory buffer ( 4KB on Linux ) that can hold up to a certain amount of data and the next write operation will pause until some data is read from the other side of the pipe.
Since you never read from stdout and stderr of your child process and FFMpeg outputs quite a lot it will hang at some point.
(挂起是因为在某一点之后,它不能再写入它的输出管道了。 当你运行一个进程时,它有3个打开的管道:stdin,stdout和stderr。管道具有内存缓冲区(Linux上4KB),可以容纳一定量的数据,下一个写操作将暂停,直到从管道的另一侧读取一些数据。 因为你从未从stdout和stderr读取你的子进程和FFMpeg输出相当多,它会挂起)
解决方式
nohup ./ffmpeg -re -rtsp_transport tcp -i "rtsp://admin:123456@99.99.99.75:554/h264/ch1/main/av_stream?videoCodecType=H.264" -vcodec copy -acodec aac -f flv -y rtmp://122.51.252.37/live/livestream 1>/dev/null 2>&1 &
1 代表标准输出
2 代表标准错误
1>/dev/null 把标准输出导入到null设备,也就是消失不见,如果要重定向到某个文件,可以1>1.txt
2>&1 把标准错误也导入到标准输出同样的地方