JavaFx Webview未在本地主机服务器上加载html5视频

JavaFx Webview未在本地主机服务器上加载html5视频,java,video,webview,jetty,spark-java,Java,Video,Webview,Jetty,Spark Java,我设法运行简单的JavaFx Webview应用程序,在运行在嵌入式jetty容器中的micro服务的本地主机上呈现html文件。我的问题是JavaFx Webview在使用chrome时无法识别html5视频标记的视频文件源,即,和其他主要浏览器,页面呈现完美,视频文件正常工作 我现在不知道是虫子还是我弄糟了什么 以下是我这期杂志的工作快照: 工作区文件导出: Workspace/Work-directory . ├── public | └── index.htm

我设法运行简单的JavaFx Webview应用程序,在运行在嵌入式jetty容器中的micro服务的本地主机上呈现html文件。我的问题是JavaFx Webview在使用chrome时无法识别html5视频标记的视频文件源,即,和其他主要浏览器,页面呈现完美,视频文件正常工作

我现在不知道是虫子还是我弄糟了什么

以下是我这期杂志的工作快照:

工作区文件导出:

Workspace/Work-directory  
  .
    ├── public
    |   └── index.html
    |   └── video.mp4
    └── src
        └── main
        |   └── java
        |       └── com
        |           └── mycompany
        |               └── MainTest.java
        |               └── SparkTest.java
        └── pom.xml
<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby</artifactId>
    <version>1.0.0.CR7</version>
</dependency>

<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-netty</artifactId>
    <version>1.0.0.CR7</version>
</dependency>
依赖项(pom.xml):

Workspace/Work-directory  
  .
    ├── public
    |   └── index.html
    |   └── video.mp4
    └── src
        └── main
        |   └── java
        |       └── com
        |           └── mycompany
        |               └── MainTest.java
        |               └── SparkTest.java
        └── pom.xml
<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby</artifactId>
    <version>1.0.0.CR7</version>
</dependency>

<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-netty</artifactId>
    <version>1.0.0.CR7</version>
</dependency>
MainTest.java

package com.mycompany;

import spark.Spark;

public class SparkTest {
    public static void main(String[] args) {
        Spark.staticFiles.externalLocation("public");
        Spark.get("/run", (request, response) -> "Spark is Runnig");
    }
}
package com.mycompany;

import java.io.IOException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class MainTest extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        StackPane root = new StackPane();
        WebView view = new WebView();
        view.getEngine().load("http://127.0.0.1:4567/index.html");
        root.getChildren().add(view);
        Scene scene = new Scene(root, 800, 600);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) throws IOException {
        Application.launch(args);
    }
}
package com.mycompany;

import org.jooby.Jooby;

public class JoobyTest extends Jooby {
    {
        assets("/**");
    }

    public static void main(final String[] args) throws Throwable {
        run(JoobyTest::new, args);
    }
}
index.html

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <h1>html5 video</h1>
        <video controls preload="auto" width="640" height="480">
            <source src="video.mp4" type='video/mp4'>
        </video>
    </body>
</html>

html5视频

在我最后一次发表评论之后,我调试并尝试了更多,发现如下内容:

WebView浏览器尝试使用范围http头从spark加载文件,以分块加载;从spark server日志中,我可以看到以下请求:

GET //127.0.0.1:4567/big_buck_bunny.mp4 
Host: 127.0.0.1:    
X-Playback-Session-Id: 1178DCF3-69C3-4A8E-B5F6-4FD24AD3F421 
Range: bytes=0-1 
Accept: */* 
User-Agent: AppleCoreMedia/1.0.0.15G31 (Macintosh; U; Intel Mac OS X 10_11_6; de_de) 
Accept-Language: de-de
Accept-Encoding: identity 
Connection: keep-alive
Spark目前不支持对大文件使用范围标头,这是一个令人担忧的缺失特性

所以你没有弄糟什么,这只是spark缺少的一个功能,再加上WebView不能一块加载整个文件,我想这是因为数据是通过网络媒体提供的


Sp您最好的解决方案可能是寻找另一台服务器来为您的媒体服务。或者尝试通过贡献或询问Per Wendel是否可以将此功能集成到spark中。

作为解决方法:

Workspace/Work-directory  
  .
    ├── public
    |   └── index.html
    |   └── video.mp4
    └── src
        └── main
        |   └── java
        |       └── com
        |           └── mycompany
        |               └── MainTest.java
        |               └── SparkTest.java
        └── pom.xml
<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby</artifactId>
    <version>1.0.0.CR7</version>
</dependency>

<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-netty</artifactId>
    <version>1.0.0.CR7</version>
</dependency>
我使用了另一个micro web框架,它使用Netty网络应用程序作为web服务器,
标记与JavaFx Webview完美配合

除了需要删除SparkTest.java和编辑pom.xml之外,工作区和文件都是相同的

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <h1>html5 video</h1>
        <video controls preload="auto" width="640" height="480">
            <source src="video.mp4" type='video/mp4'>
        </video>
    </body>
</html>
Jooby/Netty(pom.xml)的依赖关系:

Workspace/Work-directory  
  .
    ├── public
    |   └── index.html
    |   └── video.mp4
    └── src
        └── main
        |   └── java
        |       └── com
        |           └── mycompany
        |               └── MainTest.java
        |               └── SparkTest.java
        └── pom.xml
<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby</artifactId>
    <version>1.0.0.CR7</version>
</dependency>

<dependency>
    <groupId>org.jooby</groupId>
    <artifactId>jooby-netty</artifactId>
    <version>1.0.0.CR7</version>
</dependency>

我看不出你做错了什么;我自己也尝试过,可以确认:当spark提供页面服务时,它可以在普通浏览器上运行,但不能在JavaFXWebView上运行。但是,当使用本地文件URI在WebView中加载页面时,视频将播放。所以WebView可以播放视频,sparkjava/jetty和WebView之间的通信中一定有某种东西,但我还没有找到它可能是什么。P.J.Meisch感谢您的支持,Spark考虑到这一点很好。Jooby/Netty肯定比Spark:D好