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();
}
}