2016-08-12 62 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

相關問題