Java 将视频作为响应发送给用户
我有一个服务,可以做以下事情: 1从用户http Get获取参数 2将视频文件作为响应返回给用户 3我的代码是:Java 将视频作为响应发送给用户,java,jax-rs,Java,Jax Rs,我有一个服务,可以做以下事情: 1从用户http Get获取参数 2将视频文件作为响应返回给用户 3我的代码是: @GET @Path("/test") public Response test(@QueryParam("url") final String videoUrl) { final CrawlerResult result = this.crawlerService.crawl(videoUrl); if (result.isSucce
@GET
@Path("/test")
public Response test(@QueryParam("url") final String videoUrl) {
final CrawlerResult result = this.crawlerService.crawl(videoUrl);
if (result.isSuccess()) {
final StreamingOutput fileStream = this.crawlerService.videoAsStream(result.getResult());
return Response.ok(fileStream, MediaType.APPLICATION_OCTET_STREAM)
.header("content-disposition", "attachment; filename = movie.mp4")
.build();
} else {
return Response.status(Response.Status.NOT_ACCEPTABLE)
.entity(result)
.build();
}
}
和爬虫服务:
正如您所见,我获取一个url,生成url对象,然后使用IOUTILS将url写入StreamingOutput
这对于短视频来说很好,但当视频太长时,用户会等待5分钟左右的响应
有没有可能重写我的逻辑?最后,我找到了一个解决方案 我代替
output.write(IOUtils.toByteArray(url));
output.flush();
到
你已经在流媒体了,所以应该没问题。您在这里做什么最终CrawlerResult=this.crawlerService.crawldvideourl;?我证实了你所说的url@SMA这行代码output.writeIOUtils.toByteArrayurl的问题;它对长电影执行的时间太长,这就是您将字节流式传输回客户端的原因?这也将取决于客户以多快的速度接受流式服务data@SMA返回Response.okfileStream,MediaType.APPLICATION\u OCTET\u STREAM
output.write(IOUtils.toByteArray(url));
output.flush();
return output -> {
IOUtils.copy(url.openConnection().getInputStream(),output);
output.flush();
output.close();
};