我正在尝试实现来自覆盆子圆周率摄像头的直播视频。我是一名java开发人员,对Linux知之甚少。
我使用下面的命令成功地实现了raspivid命令,在网页上直播视频;
raspivid -t 0 -w 960 -h 540 -fps 25 -b 500000 -vf -o - | ffmpeg -i - -vcodec copy -an -f flv -metadata streamName=myStream tcp://0.0.0.0:6666我正在尝试添加一些控制运行现场视频流,如增加对比度和亮度等
--contrast, -co Set image contrast (-100 to 100)
--brightness, -br Set image brightness (0 to 100)但它需要重新启动完整的raspivid命令才能在web上生效,就像首先要杀死raspivid进程,添加相应的控件,然后再次重新启动完整的raspivid命令。可以为raspivid控件运行单独的命令吗?我是说,不同的raspivid命令可以启动流式传输,不同的raspivid命令可以在不中断先前命令的情况下增加对比度和亮度。如果不是,那我们该怎么做呢?
有没有办法在主进程中写入子进程,这样我们就可以在不影响主进程运行的情况下重启子进程?
提前感谢
发布于 2014-08-22 09:19:44
如果您只想在不同的进程中触发命令,则此线程可能会有所帮助。然而,我不确定这是否能解决问题。我也会阅读rapsivid的信息文档,因为信息文档通常比手册页更容易阅读。只需在命令提示符下输入info rapsivid即可。
发布于 2014-08-24 19:29:02
为了接受(附加的)外部控制,raspvid应用程序必须用这样的逻辑编写。更简单的方法是:
重新读取参数
目前它不是这样设计的。这里有一个想法,暂停/运行signa SIGUSR1上的程序,但重新读取它的运行时参数。因此,你不能用一种简单的方式做你想做的事情。
你真正能做的是:
第一-最好的方法:
raspvid以允许上述功能。它是用C写的,所以需要实现两个subroutines:- one for reading arguments from an file
- subroutine for signal handling for the `SIGUSR2`
可能不是很难,但您必须了解C并理解raspvid是如何工作的。
第二:
,或bash或任何编程语言),在某些时间间隔(或在某些信号上)将读取带有arguments
的进程存在- kill it
因此,主要的循环将是:
在1)
的情况下),
第二个解决方案很容易做到--你应该用谷歌搜索"bash信号挂起“或"bash陷阱信号”……网上已经有很多例子了。
发布于 2014-08-27 22:40:34
执行此操作的唯一方法是使用命名FIFO
在您的示例中可能是这样的:
$ mkfifo /tmp/FIFOVIDEO
$ raspivid -t 0 -w 960 -h 540 -fps 25 -b 500000 -vf -o /tmp/FIFOVIDEO &
$ ffmpeg -i /tmp/FIFOVIDEO -vcodec copy -an -f flv -metadata streamName=myStream tcp://0.0.0.0:6666在这种情况下,您可以在短时间内停止和启动2号进程。
请注意,指定的FIFO有一定数量的缓冲区需要填充,如果它已满,第一个进程很可能会死。
https://stackoverflow.com/questions/25257077
复制相似问题