Как захватить и записать видео с веб-камеры с помощью JavaCV

Я новичок в JavaCV, и мне сложно найти хорошие учебники по различным вопросам, которые меня интересуют. Мне удалось реализовать потоковое видео в реальном времени с моей веб-камеры, но проблема в том, что я использую этот фрагмент кода, который я нашел в сети:

@Override
    public void run() {

        FrameGrabber grabber = new VideoInputFrameGrabber(0);//1 for next
                                                               //camera
        int i = 0;
        try {
            grabber.start();
            IplImage img;
            while (true) {
                img = grabber.grab();
                if (img != null) {
                    cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise
                    cvSaveImage((i++) + "-aa.jpg", img);
                   //show image on window
                    canvas.showImage(img);
                }

что приводит к нескольким файлам jpg.

То, что я действительно хочу сделать, это захватить вход в веб-камеру и показать ее, я хочу сохранить ее в соответствующем видеофайле. Я узнал о FFmpegFrameRecorder , но не знаю, как его реализовать. Кроме того, мне было интересно узнать, какие параметры формата видеофайла существуют, потому что flv может быть более полезным для меня.

3
nl ja de
Извините, мне пришлось отказаться от своих экспериментов из-за слишком большого количества новых вещей, чтобы учиться на работе. Однако вы всегда можете присоединиться к группе Google на странице groups.google.com/group/javacv/topics есть много информации и мало кто может вам помочь.
добавлено автор Leron, источник
Если вам удалось получить видео, не могли бы вы поделиться с нами ссылкой на минипроект?
добавлено автор Lunatikul, источник

1 ответы

Это было довольно путешествие. Еще несколько вещей, которые я не уверен, что за ними стоит, но вот рабочий пример для захвата и записи видео с веб-камеры с использованием JavaCV:

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FFmpegFrameRecorder;
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.cpp.avutil;
import com.googlecode.javacv.cpp.opencv_core.IplImage;

public class CameraTest {

    public static final String FILENAME = "output.mp4";

    public static void main(String[] args) throws Exception {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();
        IplImage grabbedImage = grabber.grab();

        CanvasFrame canvasFrame = new CanvasFrame("Cam");
        canvasFrame.setCanvasSize(grabbedImage.width(), grabbedImage.height());

        System.out.println("framerate = " + grabber.getFrameRate());
        grabber.setFrameRate(grabber.getFrameRate());
        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(FILENAME,  grabber.getImageWidth(),grabber.getImageHeight());

        recorder.setVideoCodec(13);
        recorder.setFormat("mp4");
        recorder.setPixelFormat(avutil.PIX_FMT_YUV420P);
        recorder.setFrameRate(30);
        recorder.setVideoBitrate(10 * 1024 * 1024);

        recorder.start();
        while (canvasFrame.isVisible() && (grabbedImage = grabber.grab()) != null) {
            canvasFrame.showImage(grabbedImage);
            recorder.record(grabbedImage);
        }
        recorder.stop();
        grabber.stop();
        canvasFrame.dispose();
    }
}

It was somewhat hard for me to make this work so in addition to those that may have the same issue, if you follow the official guide about how to setup JavaCV on Windows 7/64bit and want to capture video using the code above you should create a new directory in C:\ : C:\ffmpeg and extract the files from the ffmped release that you've been told to download in the official guide. Then you should add C:\ffmpeg\bin to your Enviorment variable PATH and that's all. About this step all credits go to karlphillip

and his post here

4
добавлено
Привет @Leron Я протестировал один образец javacv для потоковой передачи, и это нормально работает. Но поток не сохраняется на стороне сервера автоматически. Я установил настройки для записи потока. Здесь ссылка github.com/vanevery/JavaCV-0.5-StreamTest
добавлено автор Saveen, источник
исправлена ​​моя проблема, изменив PIX_FMT_YUV420P на AV_PIX_FMT_YUV420P
добавлено автор 89n3ur0n, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async