java - 为什么手机内置浏览器无法播放非静态资源的视频?
伊谢尔伦
伊谢尔伦 2017-04-17 14:00:59
0
0
370

注:该问题已找到问题根源,见下文“更新”

我现在有一个测试页面,以两种方式播放同一段视频,DOM结构如下:

 

video1是通过java后台来获取视频源, 而video2直接就是静态资源,这是二者的区别。 其中video1中URL对应的 java 处理逻辑为:

javaFile videoFile = new File("/path/to/temp.mp4"); response.setContentType("video/mp4");// set the MIME type. //response.addHeader ... 一些其他的设置 ServletOutputStream os = null; BufferedOutputStream out = null; RandomAccessFile raf = null; byte b[] = new byte[1024];// 暂存容器 try { os = response.getOutputStream(); out = new BufferedOutputStream(os); raf = new RandomAccessFile(videoFile, "r"); raf.seek(pos); try { int n = 0; while ((n = raf.read(b, 0, 1024)) != -1) { out.write(b, 0, n); } out.flush(); } catch (IOException ie) { } } catch (Exception e) { }

现在的情况是,在PC端浏览器 & 手机Chrome浏览器中,两段视频都可以正常播放。但是在手机自带浏览器中,通过 java 处理的video1无法播放(一直处于加载状态)。请问这是由什么问题导致?


更新:
经测试,是由于手机自带浏览器不支持HTTP的range属性,导致无法播放视频。但是,在java代码用的raf.seek(pos);其中pos0(即从文件起始处开发遍历)也同样无效。


更新:
经再次测试,并不是因为上面手机自带浏览器不支持HTTP的range属性导致。而是因为手机浏览器在分段请求视频源的时候,只在第一段的请求头中包含了cookie信息, 而我的后台代码中需要获取请求头中的cookie来进行权限验证。从而导致,在第一段之后的所有请求都无法通过校验,从而导致视频无法播放。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

reply all (0)
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!