JavaFx Webview未在本地主机服务器上加载html5视频
我设法运行简单的JavaFx Webview应用程序,在运行在嵌入式jetty容器中的micro服务的本地主机上呈现html文件。我的问题是JavaFx Webview在使用chrome时无法识别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
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好