运动检测VLCj

5
我正在使用VLCj API编写一个网络摄像头录制应用程序。我需要关于视频流中运动检测的帮助。如果视频流中没有检测到任何运动,则录制将停止。
我尝试在sout链中使用“-video-filter=motion”,但没有检测到任何动作。
我的sout链:
String[] options = {
                    ":sout=#transcode{vcodec=mp2v,vb=4096,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=file{dst=" + fileName + "},dst=display,select=noaudio,video-filter=motion} --video-filter=motion",":input-slave=alsa://hw:0,0"  };

期待您的回复。提前感谢。

1个回答

3
您错误地传递了VLC命令选项字符串数组;应该按照以下示例进行(每个VLC命令选项应作为数组元素处理):
String[] options = {
    ":rtsp-mcast", 
    ":sharpen-sigma=2.0", 
    ":video-filter=motion",
    ":blur-factor=127", 
    ":ipv4-timeout=3000", 
    ":no-video-title-show", 
    ":loop", 
    ":sout-all",
    ":sout-keep"
};

下面的选项字符串不起作用,因为它将两个VLC命令合并到一个字符串中::sout命令和--video-filter=motion命令:
":sout=#transcode{vcodec=mp2v,vb=4096,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=file{dst=" + fileName + "},dst=display,select=noaudio,video-filter=motion} --video-filter=motion"

应该如下所示:

它应该是这样的:

":sout=#transcode{vcodec=mp2v,vb=4096,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=file{dst=" + fileName + "},dst=display,select=noaudio,video-filter=motion}",
"--video-filter=motion"

谢谢您的回复。我尝试了,但对我没有用。现在,流甚至没有保存到文件中。我希望您已经阅读了我正在尝试创建跨平台的VLCj应用程序,该应用程序将从网络摄像头录制,并在视频中未检测到运动时停止录制。 - iltaf khalid
@iltafkhalid 上面的示例代码只是我的一个例子。您需要根据自己的要求进行调整,其中应包括您的 :sout 选项才能使其正常工作。 - ecle
你的录像是否会在视频中没有动作时停止,有没有办法去掉矩形框?我正在使用VLCj 2.0。 - iltaf khalid
我认为动态滤镜不会出现在录制的视频中,它只会出现在回放的显示视频中。 - ee.
我能够使用以下命令在命令行上使用 VLC 检测动作: 'code' vlc --video-filter=motiondetect a.mpg 'code' 或 'code' vlc --video-filter=motion a.mpg 'code'.............. 但是当我尝试使用上面解释的 VLCj 进行编程时,同样的方法不起作用。 - iltaf khalid
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接