这篇文章主要介绍了解决html5中的录像标签ios系统中无法播放使用的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
1.先是从前端的角度去考虑,如何让野生动物考察浏览器兼容视频,并支持播放(未找到解决的方法)。
2.经多次查找网上信息,发现使用后台能解决该问题,解决点在超文本传送协议协议的响应头里面(接受范围).
3 .狩猎浏览器,在打开视频的时候,先是发送一个请求探测文件的大小,之后再多次发送请求分段获取数据流的数据(个人理解大概是分段下载,接受-范围).
4.想要解决这种问题要考虑两个方面:
a.需要根据请求内容的不同做出不同的响应,第一次探测请求需要返回200,后面的请求需要返回206和具体数据
b.contentType必须设置为视频/mp4
5.具体代码
这里已经封装好了,直接拿过来使用就好的了。
私有无效发送视频(HttpServletRequest请求,HttpServletResponse响应,文件文件,字符串文件名)引发文件未找到异常,IOException {
随机访问文件随机文件=新的随机访问文件(文件,' r ');//只读模式
长内容长度=随机文件。length();
字符串范围=请求。GetHeader(' Range ');
int start=0,end=0;
if(range!=null范围。以(' bytes=')开头
string[]值=范围。拆分('=')[1].split('-');
start=Integer.parseInt(值[0]);
if(values.length 1){
end=Integer.parseInt(值[1]);
}
}
int RequestSize=0;
if(end!=0结束开始){
request SiZe=end-start 1;
} else {
requestSize=整数最大值
}
回应。SetContentType(' video/MP4 ');
回应。setheader(' Accept-Ranges ',' bytes ');
response.setHeader('ETag ',fileName);
response.setHeader('上次修改,新日期()。toString());
//第一次请求只返回内容长度来让客户端请求多次实际数据
if(range==null){
回应。setheader('内容长度',内容长度' ');
}else{
//以后的多次以断点续传的方式来返回视频数据
回应。setstatus(HttpServletResponse .SC _ PARTIAL _ CONTENT);//206
long requestStart=0,RequestEnd=0;
string[]ranges=range。split('=');
if(ranges.length 1){
字符串[]范围数据=范围[1].split('-');
请求开始=整数。par sent(RangeDatas[0]);
if(rangeDatas.length 1){
请求结束=整数。par sent(RangeDatas[1]);
}
}
长长度=0;
if(requestEnd 0){