Tomcat下Servlet传输视频流

背景

       之前有个android和iOS的项目要在线播放视频,服务器是用tomcat,而视频的播放需要用户的权限验证才能操作。所以如果将视频文件单纯的放入webroot下直接播放,就没有权限问题了。原先在解决这个问题时,搜索了很多文章都没有直接说明(可能我的描述有误)这个问题。所以记录下自己的解决方法。

       当时的想法:由于这个项目是从网站平台上一直过来,当时的web上的播放器是flash,用tomcat下的servlet进行播放,所以移动端也要调用那个servlet去播放,结果是“播放格式错误”

分析:

       看了同事写的servlet,原来是一个类似文件下载的程序,我不清楚为什么在flash可以这样播放,这个问题这里先不去讨论,而当我直接打开浏览器,输入视频的url时居然也不能播放,而把视频放入webroot后,用webroot下的url去请求,在移动端和浏览器上都可以播放了。webroot结构如下:


       其中VideoServlet.java是通过servlet的url去访问mp4发送到客户端,而webroot下的视频是可以直接通过url进行播放。

解决:

       在chrome store上下载了”Live HTTP Headers”插件,可以监测chrome网页浏览时请求响应的。先对webroot下的视频在chrome上播放,可以获取如下图解析信息。

       发现有4条2xx的响应(忽略404,那是图标),我们知道200是http返回成功的标志,而206是说明客户端在请求部分资源,而服务器要返回这部分资源给客户端。所以servlet下的url为什么不能在浏览器上播放的原因就出来。从图上可以拿其中一条206的数据分析下(不是很了解,可以去看下http协议的一些文章)。
       在response端,”Accept-Ranges bytes” 表示服务器同意分段发送”Content-Length”表示发送资源的大小”Content-Range”中的”bytes”字段表示一个发送文件资源的范围a-b/c,a表示资源开始位置,b表示结束位置,c表示总资源大小。其实就是一个断点续传的问题。当然request端中,可以通过getHeader("Range”)来获取要加载资源的范围,很可惜“Live HTTP Headers” 中没有显示出来。大家可以通过chrome或firefox的调试器去获取替代“Live HTTP Headers”,我相信能看到的内容会更详细,虽然我没有尝试过。
       最后修改servlet为断点续传模式就可以了,在浏览器上可以正常播放,而在移动端也可播放了。 具体代码不是本文的所叙述的内容,本文只阐述原理。目前还未去了解flash播放器可以通过单纯的文件下载servlet就能播放视频。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值