import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;
import org.bytedeco.opencv.opencv_videoio.VideoCapture;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class VideoConferenciaApp extends Application {
private VideoCapture capture;
private CanvasFrame canvasFrame;
public static void main(String[] args) { launch(args);
}
@Override
public void start(Stage primaryStage) { primaryStage.setTitle("App de videoconferencia");
// Botón para iniciar la videoconferencia
Button startButton = new Button("Iniciar videoconferencia"); startButton.setOnAction(e -> iniciarVideoconferencia());
// Botón para detener la videoconferencia
Button stopButton = new Button("Detener videoconferencia"); stopButton.setOnAction(e -> detenerVideoconferencia());
VBox vbox = new VBox(startButton, stopButton);
Scene scene = new Scene(vbox, 300, 150);
primaryStage.setScene(scene);
primaryStage.show();
}
private void iniciarVideoconferencia() { capture = new VideoCapture(0); // 0 indica la cámara predeterminada
canvasFrame = new CanvasFrame("Videoconferencia", CanvasFrame.getDefaultGamma() / capture.get(6));
// Configurar el tamaño del frame
canvasFrame.setCanvasSize((int) capture.get(3), (int) capture.get(4));
// Configurar el tamaño de captura para reducir la carga de procesamiento
capture.set(3, 640);
capture.set(4, 480);
// Iniciar un hilo para leer y mostrar el video
new Thread(() -> { Mat frame = new Mat();
while (canvasFrame.isVisible() && capture.read(frame)) { canvasFrame.showImage(frame);
}
}).start();
}
private void detenerVideoconferencia() { if (capture != null && capture.isOpened()) { capture.release();
}
if (canvasFrame != null) { canvasFrame.dispose();
}
}
@Override
public void stop() { detenerVideoconferencia();
}
}