【问题标题】:JavaFx Webview not loading html5 video on localhost serverJavaFx Webview 未在 localhost 服务器上加载 html5 视频
【发布时间】:2016-08-12 11:33:15
【问题描述】:

我设法运行简单的 JavaFx Webview 应用程序,在 localhost 上运行在嵌入式码头容器中使用的微服务 Spark web framework 渲染一个 html 文件我的问题是 JavaFx Webview 无法识别 html5 视频的视频文件源在使用 chrome、ie 和其他主要浏览器时标记页面完美呈现并且视频文件正在工作。

我现在不知道这是错误还是我搞砸了。

这是我的问题的工作快照:

工作区文件布局:

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

【问题讨论】:

  • 我看不出你做错了什么;我自己尝试过,可以确认:当页面由 spark 提供时,它适用于普通浏览器,但不适用于 JavaFx WebView。但是当页面在带有本地文件 URI 的 WebView 中加载时,视频就会播放。所以WebView可以播放视频,sparkjava /jetty和WebView的通信肯定有问题,但是我没找到可能是什么。

标签: java video webview jetty spark-java


【解决方案1】:

解决方法:

我使用jooby另一个使用Netty网络应用程序作为Web服务器的微型Web框架,&lt;video&gt;标签与JavaFx Webview完美配合。

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

【讨论】:

  • Jooby/Netty 绝对比 Spark 好:D
【解决方案2】:

在我上次发表评论后,我调试并尝试了更多,发现以下内容:

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

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 目前不支持对大文件使用范围标头,有一个 open issue 与该缺失功能有关。

所以你没有搞砸什么,这只是 spark 缺少的一个功能,再加上 WebView 不会将整个文件加载到一个整体的事实,我想这是因为数据是通过网络提供的媒体服务。

您最好的解决方案可能是寻找不同的服务器来为您的媒体提供服务。或者尝试通过贡献或询问 Per Wendel 是否可以集成此功能。

【讨论】:

  • P.J.Meisch 感谢您的支持,很高兴 Spark 考虑到了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多