Java 如何正确支持html5<;视频>;带码头的水源

Java 如何正确支持html5<;视频>;带码头的水源,java,html,video,jetty,Java,Html,Video,Jetty,我的Java/jetty应用程序上有一个简单的ResourceHandler,jetty提供了两个简单的文件,一个是html5页面,另一个是我的video.mp4视频文件 <!DOCTYPE html> <html> <head><title>TEST</title></head> <body> <video style="width: 400px; height: 300px" src="vide

我的Java/jetty应用程序上有一个简单的ResourceHandler,jetty提供了两个简单的文件,一个是html5页面,另一个是我的video.mp4视频文件

<!DOCTYPE html>
<html>
<head><title>TEST</title></head>
<body>
    <video style="width: 400px; height: 300px" src="video.mp4" autoplay="autoplay" loop="loop" preload="auto"></video>
</body>
</html>

问题是,有人知道为什么jetty 9.2.3提供的html5视频只播放第一个循环,然后在chrome 3.7.0上冻结。。。或者提供一些指导,以避免在jetty提供服务时在首次播放后冻结视频?

这适用于
jetty 9.2.3.v20140905

package org.eclipse.jetty.demo;
导入java.io.File;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.net.urlcoder;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.servlet.ServletContextHandler;
导入org.eclipse.jetty.servlet.ServletHolder;
公共类视频服务器
{
@抑制警告(“串行”)
公共类索引器Servlet扩展了HttpServlet
{
@凌驾
受保护的void doGet(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException
{
分别为setContentType(“文本/html”);
PrintWriter out=resp.getWriter();
out.println(“”);
out.println(“视频”);
out.println(“”);
对于(文件:baseDir.listFiles())
{
if(file.isFile()&&file.getName().endsWith(“.mp4”))
{
字符串encodedFilename=URLEncoder.encode(file.getName(),“UTF-8”);
out.println(“”);
out.printf(“%n”,encodedFilename);
out.println(“”);
out.printf(“%s

%n”,file.getName()); out.println(“
”); } } out.println(“”); out.println(“”); } } 公共静态void main(字符串[]args) { 如果(args.length!=1) { System.err.printf(“错误:用法%s[videos dir]%n”,VideoServerMain.class.getName()); 系统退出(-1); } File baseDir=新文件(args[0]); 如果(!baseDir.exists()| |!baseDir.isDirectory()) { System.err.printf(“错误:不是有效的目录:%s%n”,baseDir); 系统退出(-1); } 尝试 { 新的VideoServerMain(baseDir).start(); } 捕获(可丢弃的t) { t、 printStackTrace(System.err); } } 私有最终文件baseDir; 公共VideoServerMain(文件baseDir) { this.baseDir=baseDir; } public void start()引发异常 { 服务器=新服务器(8080); //为servlet上下文建立临时目录(由JSP编译使用) File tempDir=新文件(System.getProperty(“java.io.tmpdir”); File scratchDir=新文件(tempDir.toString(),“embedded-jetty-html5-vide-server”); 如果(!scratchDir.exists()) { 如果(!scratchDir.mkdirs()) { 抛出新IOException(“无法创建临时目录:+scratchDir”); } } //在“/”处为此应用程序设置基本应用程序“上下文” //这也称为处理程序树(在jetty中) ServletContextHandler上下文=新的ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath(“/”); setAttribute(“javax.servlet.context.tempdir”,scratchDir); setResourceBase(baseDir.toURI().toascistring()); //添加servlet以显示找到的视频的html ServletHolder-holderIndexer=新的ServletHolder(新的索引器Servlet()); addServlet(holderIndexer,“/indexer”); //确保我们的欢迎文件是indexerservlet setWelcomeFiles(新字符串[]{“indexer”}); //允许通过DefaultServlet为视频本身提供静态文件服务 //添加默认Servlet(必须命名为“默认”) ServletHolder-holderDefault=newservletholder(“default”,DefaultServlet.class); holderDefault.setInitParameter(“resourceBase”,baseDir.getAbsolutePath()); setInitParameter(“dirAllowed”、“true”); setInitParameter(“welcomeServlets”、“true”); setInitParameter(“redirectWelcome”、“true”); addServlet(holderDefault,“/”); setHandler(上下文); server.start(); join(); } }
你似乎有两个问题

  • ResourceHandler
    对于浏览器的要求来说太简单了

    浏览器似乎会执行大量的部分请求、长时间请求,以及在需要时进行恢复。这类请求最好使用
    DefaultServlet

  • 您用于视频标记的HTML不起作用,但当我将其更改为以下内容时,效果很好

  • 
    

    然后chrome似乎又高兴了。

    mp4(文件大小)有多大?(只是想测试一下)你是说chrome“37.0”而不是“3.7.0”吗?(因为这将使它不可能成为chrome的旧版本)嗨,谢谢你关心我的问题,我的chrome的正确版本是37.0.2062.124,mp4文件大小小于1mb(测试的大小为1.5mb、30mb和150mb,结果总是一样)谢谢,正如您所建议的,我更改了defaultservelt的resourcehandler,所有操作都按我的要求进行
    ResourceHandler om = new ResourceHandler();
    om.setDirectoriesListed(true);
    om.setResourceBase(BASE_PATH);
    handlers.setHandlers(new Handler[] { om });
    
    <video style="width: 400px; height: 300px" controls loop=>
      <source src="VID_20130822.mp4" type="video/mp4">
    </video>