Java 如何正确支持html5<;视频>;带码头的水源
我的Java/jetty应用程序上有一个简单的ResourceHandler,jetty提供了两个简单的文件,一个是html5页面,另一个是我的video.mp4视频文件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
<!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
然后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>