ios和安卓手机端使用video标签播放失败的问题

这篇具有很好参考价值的文章主要介绍了ios和安卓手机端使用video标签播放失败的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、情况说明

手机端请求后端接口,返回视频流给前端,然后在手机端进行播放,手机端需要适配ios和安卓,后端在开发好接口后在浏览器、postman调用接口时都能正常播放,安卓客户端也可以正常播放,但是ios播放失败。
刚开始觉得是网速太慢的原因,换了一个更小的视频,仍然不行,然后查了下资料,说是视频编码的问题,然后又换了下视频编码,仍然不行,最后经过测试,发现ios客户端使用video标签解析视频时会根据响应的请求头进行读取数据,响应头需要包含文件大小,如果没有就无法解析视频,但是在安卓客户端和浏览器上是没有这种问题的,所以需要兼容ios。

二、条件说明

视频文件是通过手机拍摄,没有经过任何处理的mp4文件。
后端是springboot项目,将视频放在resource资源目录下。
前端需要适配ios和安卓客户端,使用video标签进行解析。文章来源地址https://www.toymoban.com/news/detail-800864.html

三、后端代码

  • 首先需要读取类路径下的指定资源文件,转换为二进制流,设置好响应头,再返回。
    video苹果手机无法正常播放,java,java,ios,android
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.FileCopyUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

	@GetMapping("/video/{fileName}")
    public void video2(@PathVariable String fileName, HttpServletResponse response) throws IOException {
    	//读取类路径下的资源文件
        ClassPathResource resource = new ClassPathResource("file/" + fileName);
        //转为File对象
        File file = resource.getFile();
        //获取文件大小,因为file.length()返回的是long类型,单位是B,但是响应头是int类型,所以需要强转为int类型
        //int类型的大小为2147483647,折算下来,文件大小不能超过1GB,可以这样做,如果大小超过1GB,那么需要分段读取返回了
        int fileLength = (int)file.length();
        //将文件对象转为输入流
        FileInputStream input = new FileInputStream(file);
		//设置响应头,inline:表示在线预览,后面是文件的名字
        response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //设置文件的大小 (ios不设置无法正常播放视频)
        response.setHeader("Content-Length", String.valueOf(fileLength));
        //文件格式
        response.setContentType("video/mp4");
        //将二进制流返回给前端
        FileCopyUtils.copy(input, response.getOutputStream());
    }

四、总结

  • 安卓和浏览器适配做得很好,只需要设置好文件类型和Content-Disposition,最后返回文件的二进制流即可。
    但是ios客户端还需要设置文件大小才能正确播放。
    我只做了MP4格式的视频,其他格式的视频暂时还没有试过,百度看了下,其他视频文件可能会涉及到视频编码的问题。
  • 在手机端上播放视频,流量很贵,像我的做法的话都是一次性返回整个文件的二进制流,这样过于暴力,后续优化的时候,可能要设置另外的响应头,进行分段返回。比如响应头中Content-Range是获取文件的部分内容。
  • 用分段的形式返回文件二进制流的实现方式:分段返回文件二进制流的实现方式

到了这里,关于ios和安卓手机端使用video标签播放失败的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp使用video标签无法播放视频出现黑屏问题处理

    问题出现情况 并且点击播放后出现报错 解决办法 问题出现的原因可能是video的视频流不兼容或者在f12下无法看见视频文件导致的,所有我们使用computed计算属性来解决这个问题 js html 按照上面的做法 这样问题就解决了 希望能解决大家的问题 一键三连

    2024年02月11日
    浏览(46)
  • 【解决】uniapp使用video标签在浏览器调试正常,安卓真机、手机上显示小黑块,无法正常显示

    【问题】 uniapp中使用video标签展示视频,在浏览器展示正常,但是运行到安卓真机、或者手机上显示小黑块,无法正常显示 示例代码如下: 展示效果如下: 【解决】 不在 template 标签内直接使用 video 标签,而是使用 v-html 渲染html元素,绑定一个videoHtm方法,返回需要的html元

    2024年02月04日
    浏览(89)
  • video层级过高,以及界面使用多个video时,在安卓APP上同时播放的问题(uniapp)

    问题一 : 我的界面由于是自定义导航栏,所以使用video时,上滑界面video会直在最上层,盖着  头部导航栏 解决方法 :使用cover-view,自定义头部使用cover-view替换view 问题二 :自定义导航栏上面有menu,点击会出现一个弹出层,但是弹出层会被video压到 解决方法 :使用原生窗体

    2024年02月06日
    浏览(30)
  • 谷歌chrome浏览器无法自动播放video标签视频的问题

    问题根源详见: Chrome中的自动播放政策  https://developer.chrome.com/blog/autoplay/  The Autoplay Policy launched in Chrome 66 for audio and video elements and is effectively blocking roughly half of unwanted media autoplays in Chrome. For the Web Audio API, the autoplay policy launched in Chrome 71. This affects web games, some WebRTC appli

    2024年02月11日
    浏览(67)
  • ios中关于video标签poster属性兼容问题(ios视频截帧)

    需求如下 移动端h5页面(微信浏览器下)需要上传视频并回显封面,用户点击中间的播放三角可以进行视频的预览;问题就出现在ios手机上使用video的poster属性并不能显示出视频封面,而安卓手机可以正常显示视频的第一帧; 效果图 问题分析: 在ios系统中有个保护机制, 如果

    2024年02月05日
    浏览(30)
  • 企业微信调用扫一扫接口安卓手机正常,iOS失败的解决办法

    在使用企业微信自建应用调用扫一扫接口的时候,安卓手机调用摄像头、扫码结果都可以正常使用,但是苹果手机的摄像头都调用不了,将返回参数打印出来也都是成功的。一直以为是代码哪里有错,才出现系统不兼容的问题,网上也找了好多解决方案,都没有效果,后来才

    2024年02月14日
    浏览(194)
  • 小程序uniapp播放录音,uni.createInnerAudioContext()苹果手机播放报错,安卓手机可以正常播放问题解决

    解决思路:经过测试发现虽然苹果手机uni.createInnerAudioContext() api播放不了,会进入错误监听里面。但是uni.getBackgroundAudioManager()背景音乐播放在苹果手机上播放是正常的。所以我们采取能正常录音播放的就用uni.createInnerAudioContext()音频播放组件,如果播放进入createInnerAudioConte

    2024年02月12日
    浏览(44)
  • java实现video标签视频流播放

    问题: 在遇到video标签播放后端视频源时问题。直接返回文件流的话 video需要将文件整个下载一次才会播放。这样如果小文件没有问题。如果文件大的话就比较恶心了。 解决方案:通过模拟video标签默认的range bytes规范方法分段获取视频信息。 video标签是通过请求头带上 Ran

    2024年02月14日
    浏览(34)
  • 解决video标签无法播放avi格式的视频

    错误代码 正确代码 在video标签中不要加src属性,必须在video标签内加source标签,兼容不同浏览器解码支持。

    2024年02月13日
    浏览(37)
  • h5使用video标签解决自动全屏问题

    问题描述: h5页面内使用video标签播放视频,会自动全屏;且不能自动播放的问题 两种情况: 一、普通浏览器内 1 解决全屏播放的问题方案: 标签内添加属性:     webkit-playsinline=\\\"true\\\"      x-webkit-airplay=\\\"true\\\"     playsInline={true}     x5-playsinline=\\\"true\\\"     x5-video-orientation=

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包