2016-08-12 60 views
2

我设法运行简单的JavaFx Webview应用程序在本地主机上运行一个html文件,运行在微服务Spark web framework在嵌入式jetty容器中使用我的问题是JavaFx Webview无法识别视频文件来源的html5视频标签,而使用铬,即,和其他主流浏览器页面完美呈现和视频文件正在工作。JavaFx Webview不在本地主机服务器上加载html5视频

我现在不是现在,如果它是一个错误,或者是我已经搞砸了东西。

这里是我的问题的工作卡:

工作区文件lyaout:

Workspace/Work-directory 
    . 
    ├── public 
    | └── index.html 
    | └── video.mp4 
    └── src 
     └── main 
     | └── java 
     |  └── com 
     |   └── mycompany 
     |    └── MainTest.java 
     |    └── SparkTest.java 
     └── pom.xml 

相关性(pom.xml中):

<dependency> 
    <groupId>com.sparkjava</groupId> 
    <artifactId>spark-core</artifactId> 
    <version>2.5</version> 
</dependency> 

SparkTest.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"); 
    } 
} 

MainTest.java

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

的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> 

here you can find .mp4 video file

+0

我看不到你做一些错误;我自己尝试过,并且可以确认:当页面由spark提供时,它可以与普通浏览器一起使用,但不适用于JavaFx WebView。但是,当页面使用本地文件URI加载到WebView中时,视频将播放。所以WebView可以播放视频,在sparkjava/jetty和WebView之间的通信中必须有一些东西,但我还没有找到它可能是什么。 –

回答

2

我最后的评论之后,我调试,并尝试多一点,发现如下:

WebView浏览器尝试通过使用范围 http标头来加载文件,以加载块;从火花服务器日志,我可以看到下面的请求:

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 

星火目前不支持使用范围头的大文件,有一个open issue关于失踪的功能。

所以你没惹的东西,它只是从火花缺少功能,与事实的WebView不加载整个文件在一块合并,我想这是因为被媒体担任过网的数据。

为您的媒体提供最佳解决方案或许正在寻找不同的服务器。或者尝试通过贡献或询问Per Wendel是否可以整合这个功能来使这个功能变成火花。

+0

P.J.Meisch感谢您的支持,Spark很高兴有这个想法。 – Saad

4

作为一种变通方法:

我以前jooby是使用JavaFX web视图一个Netty网络应用程序作为Web服务器,则<video>标签工作完美另一微web框架。

工作区lyaout和文件是相同的,除非你需要删除SparkTest.java和编辑POM。XML

为Jooby/Netty的(pom.xml文件)的依赖:

<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> 

JoobyTest.java

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); 
    } 
} 
+0

Jooby/Netty绝对比Spark更好:D – dns

相关问题