обнаружение движения VLCj

Я пишу приложение для записи с веб-камеры, используя VLCj API. Мне нужна помощь по обнаружению движения в видеопотоке с веб-камеры. Если в видеопотоке не обнаружено движение, то запись останавливается.

Я пытался использовать --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"  };

С нетерпением жду вашего ответа. Заранее спасибо.


person iltaf khalid    schedule 14.03.2012    source источник


Ответы (1)


Вы неправильно передаете массив строк опций команды 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"
person ecle    schedule 14.03.2012
comment
Спасибо за ответ. Я попробовал это, но это не работает для меня. Теперь поток даже не сохраняется в файл. Я надеюсь, вы прочитали, что я пытаюсь создать кросс-платформенное приложение VLCj, которое будет записывать с веб-камеры и останавливать запись, когда в видео не будет обнаружено движение. - person iltaf khalid; 15.03.2012
comment
@iltafkhalid Странно ... у меня это работает с VLCJ 1.2.0 и libVLC 1.1.11. Я вижу блоки обнаружения движения в видео, воспроизводимом с использованием метода VLCJ playMedia(mrl, options) с включенной опцией :video-filter=motion. - person ecle; 15.03.2012
comment
@iltafkhalid Приведенный выше пример кода — это только мой пример. Вам нужно адаптировать его в соответствии с вашими требованиями, которые должны включать ваш вариант :sout, чтобы он работал. - person ecle; 15.03.2012
comment
Ваша запись останавливается, когда в видео нет движения, и есть ли способ удалить прямоугольник? Я использую VLCj 2.0 - person iltaf khalid; 15.03.2012
comment
@iltafkhalid Да, он не появляется, когда нет движения. Зачем вам нужно активировать фильтр движения в записанном видео? - person ecle; 15.03.2012
comment
Я попробовал южную цепь, как она есть, но все равно это не сработало. Не могли бы вы поделиться со мной своим кодом, всем? - person iltaf khalid; 15.03.2012
comment
Это задание разработать приложение для веб-камеры, которое будет записывать только там, где есть движение в видео, и останавливаться там, где нет движения, например, 5 секунд или любое другое время, заданное для тайм-аута отсутствия движения в видеопотоке. - person iltaf khalid; 15.03.2012
comment
Я думаю, что фильтр движения не будет отображаться в записанном видео; он появляется только при воспроизведении видео на дисплее. - person ee.; 16.03.2012
comment
но запись не останавливается, даже если я позволяю записи воспроизводиться в течение 1 минуты. Могу ли я настроить время остановки записи, если в потоке не обнаружено движения, например, остановить запись через 5 секунд, если движения нет? - person iltaf khalid; 16.03.2012
comment
Не могли бы вы поделиться своим кодом здесь, так как это облегчит задачу? - person iltaf khalid; 16.03.2012
comment
Я могу обнаружить движение с помощью vlc в командной строке с помощью следующей команды: 'code' vlc --video-filter=motiondetect a.mpg 'code' или 'code' vlc --video-filter=motion a.mpg 'code ' ...................... но то же самое не работает, когда я пытаюсь это сделать с VLCj программно, как описано выше. - person iltaf khalid; 20.03.2012
comment
Наконец-то это сработало. Мне пришлось удалить все аргументы libVLC, которые я передал, и оставить только: vlcArgs.add(--video-filter=motiondetect); - person iltaf khalid; 20.03.2012
comment
Но есть одна проблема, запись видео не останавливается, когда нет движения. Я хочу, чтобы видео останавливалось, когда нет движения. Пожалуйста помоги. - person iltaf khalid; 21.03.2012
comment
Наконец-то я разработал решение, позволяющее останавливать видеозапись при отсутствии движения. Я получил сравнение изображений по ссылка и создал тему. Но на этот раз я не использовал медиаплеер VLCj, а использовал DirectMediaPlayer, который дал мне доступ к видеобуферу и, следовательно, к кадрам. - person iltaf khalid; 30.03.2012