如何在javafx中调海康Sdk播放录像视频?

我是用的是java 海康摄像头录像机的sdk 如今搭建新的javafx项目想在javafx中播放视频,但播放无法显示
海康的回放接口需要传入组件的Hwnd ,我在javafx中用swingnote存放swing的jpanel。jpanel中放awt的panel。然后 调native获取huwnd。执行播放 组件却没有回显录像!
给海康设置回调函数是看到有流的 ,当我传javafx顶级容器stage的hwnd时候是可以实现播放的 这时整个页面都是录像这不是我想要的
我的理解是可能 javafx pane组件没有句柄的概念导致系统无法从stage遍历到 panel。不知道是不是这样
有办法解决吗 或者其他方法实现javafx播放海康视频

该回答引用chatgpt:
在JavaFX中播放海康SDK录像视频需要先解决组件无法回显的问题,下面提供一种可能的解决方案:

在JavaFX中创建一个Canvas组件,用于显示视频画面。
通过JNI(Java Native Interface)调用海康SDK中的函数获取视频数据,将视频数据绘制在Canvas上。
在Canvas上添加鼠标事件监听器,通过调用JNI函数实现视频播放控制,如播放、暂停、快进等。
具体实现过程如下:

创建Canvas组件


Canvas canvas = new Canvas(640, 480);

通过JNI调用获取视频数据,并将数据绘制在Canvas上



// 获取海康SDK中的HWND句柄
long hwnd = getHwnd();

// 获取视频数据
byte[] data = getVideoData();

// 将数据绘制在Canvas上
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.drawImage(new WritableImage(640, 480), 0, 0);

// 调用JNI函数绘制视频
drawVideo(hwnd, data);

添加鼠标事件监听器,实现视频播放控制


// 添加鼠标事件监听器
canvas.setOnMouseClicked(event -> {
    // 调用JNI函数实现视频播放控制
    switch (event.getButton()) {
        case PRIMARY:
            play();
            break;
        case SECONDARY:
            pause();
            break;
        case MIDDLE:
            fastForward();
            break;
    }
});

注意:上述代码仅为示例,具体实现需要根据海康SDK的函数进行调整。

另外,如果您需要在JavaFX中使用swing的JPanel,可以使用SwingNode将其嵌入到JavaFX中:


JPanel panel = new JPanel();
SwingNode swingNode = new SwingNode();
swingNode.setContent(panel);

然后将Canvas添加到JPanel中即可。

希望能对您有所帮助