【发布时间】:2018-11-09 12:33:29
【问题描述】:
我们正在使用 JavaFx 和 JavaCv 开发视频流应用程序。 我们有 8X8 的 GridPane,每个单元格包含窗格布局和每个窗格 包含 ImageView。
每当用户将 url 拖到特定位置时,我都会调用 play 函数 细胞。 我们有 64 个 Url,所以我们调用 play 函数 64 次(所有 64 个 url 都在播放 在后台线程中)。
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
//grid08(8X8)
Pane p=new Pane();
ImageView im=new ImageView();
Label l=new Label("");
im.fitWidthProperty().bind(p.widthProperty());
im.fitHeightProperty().bind(p.heightProperty());
l.prefWidthProperty().bind(p.widthProperty());
l.prefHeightProperty().bind(p.heightProperty());
p.getChildren().addAll(im,l);
l.setVisible(false);
l.setStyle("-fx-text-fill: #fff; -fx-font-size: 12px");
l.setAlignment(Pos.CENTER);
p.setStyle("-fx-background-color: black;");
grid.add(p,j,i);//grid->instance of gridPane
p.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
if(!l.isVisible()){
event.acceptTransferModes(TransferMode.ANY);
}
}
});
p.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
play(im,event.getDragboard().getString());
}
});
}
}
play(ImageView im,String Url){
new Thread(new Runnable(){
frameGrabber = new FFmpegFrameGrabber(Url);
frameGrabber.setVideoOption("preset","ultrafast");
frameGrabber.setOption("rtsp_transport","tcp");
frameGrabber.setOption("stimeout" , "60000");
frameGrabber.setAudioChannels(0);
frameGrabber.setAudioCodec(0);
try {
frameGrabber.start();
start=true;
} catch (Exception e) {
}
JavaFXFrameConverter jconverter=new JavaFXFrameConverter();
while(true){
Frame frame = frameGrabber.grabImage();
Image image=jconverter.convert(frame);
Platform.runlater(new Runnable(){
im.setImage(image);
});
}
}).start();
}
问题: 我们正面临白屏问题,在增加一些阈值宽度和 高度。 在这里,我附加了具有不同屏幕尺寸的应用程序的 Snap;
屏幕1
由于我们长期以来一直面临这个问题。 任何潜在客户都将是非常可观的。 提前致谢。
【问题讨论】:
-
1.您可以修复代码以使其编译吗? 2. 打电话
frameGrabber.start()时是否也检查一下是否有异常? 3. 当它处于“自然”分辨率(即图像视图与图像大小相同)时,您是否看到空白屏幕?
标签: java multithreading javafx fxml javacv