2016-08-12 6 views
2

마이크로 서비스로 실행되는 로컬 호스트에서 간단한 JavaFx Webview 응용 프로그램을 실행하는 로컬 호스트에서 html 파일을 렌더링했습니다. 내 문제 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); 
    } 
} 

나는 다음과 같은 디버깅하고 조금 더 노력하고 발견

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

내 마지막 코멘트 후 index.html을 :

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가 전체 파일을 한 조각으로로드하지 않는다는 사실과 결합 된, 스파크의 누락 된 기능 일뿐입니다. 데이터가 인터넷을 통해 제공되는 미디어이기 때문입니다.

Sp 가장 적합한 솔루션은 미디어를 제공 할 다른 서버를 찾고있을 수 있습니다. 또는이 기능을 통합 할 수 있다면 Per Wendel에 기고하거나 요청하여이 기능을 시작하십시오. 해결 방법으로

+0

P.J.Meisch가 귀하의 지원에 감사 드리며, Spark가이를 염두에두고 있습니다. – Saad

4

는 :

나는 jooby에게 자바 FX의 웹보기와 완벽하게, 웹 서버로 <video> 태그 작업의 Netty의 네트워크 응용 프로그램을 사용하는 다른 마이크로 웹 프레임 워크를 사용했다. 당신이SparkTest.java을 삭제하고 치어를 편집 할 필요가 제외

작업 공간 lyaout 및 파일은 같은 있습니다.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

관련 문제