苹果safari浏览器播放不了video标签视频

今天遇到了个神奇的问题,视频文件在pc端和安卓手机上播放都没问题,但是在ios上就是播放不了,大概代码如下:

前端代码:

    <video id="video" width="350" height="500" controls>
        <source src="/getFileVideo" type='video/mp4'>
    </video>

后端代码:

    /**
     * description 获取视频文件
     *
     * @author yanzy
     * @date 2022/12/16 17:37
     */
    @GetMapping("/getFileVideo")
    public void getFileVideo(HttpServletResponse response) throws IOException {
        File videoFile = new File("E://test.mp4");
        FileInputStream inputStream = new FileInputStream(videoFile);
        ServletOutputStream out = response.getOutputStream();
        int byteRead = 0;
        byte[] buffer = new byte[1024];
        while ((byteRead = inputStream.read(buffer)) != -1) {
            out.write(buffer, 0, byteRead);
        }
        out.flush();
        inputStream.close();
    }

PC端没任何问题:

在这里插入图片描述

IOS端播放不了:

在这里插入图片描述

在网上搜索了很多办法,有加前端参数配置的:

    <video id="video" width="350" height="500" controls
       muted autoplay preload loop
       x5-video-player-fullscreen="true"
       x5-playsinline
       playsinline
       webkit-playsinline
       poster="test.jpg">
        <source src="/getFileVideo" type='video/mp4'>
    </video>

有改后端多次发送请求,分段获取数据流的:

在这里插入图片描述

经过多次测试最终找到了问题,视频文件在ios上需要两个参数,一个是视频文件的类型,一个是文件的大小长度:

        response.setContentType("video/mp4");
        response.setHeader("Content-length", String.valueOf(videoFile.length()));

修改后ios浏览器就可以正常播放了:

在这里插入图片描述

### 苹果设备上 H5 页面中 `video` 标签播放视频的兼容性解决方案 对于苹果设备上的 HTML5 `<video>` 标签播放视频存在的兼容性问题,主要集中在防止 iOS 默认全屏播放以及确保内联播放正常工作。为了使视频能够在苹果设备上顺利播放并保持良好的用户体验,建议采用如下配置: #### 使用合适的属性设置 在 `<video>` 标签中加入特定于 WebKit 浏览器(如 Safari)的属性可以帮助控制视频的行为方式。这些属性能够有效避免iOS系统下的自动全屏现象,并允许视频以内联模式播放。 ```html <video id="video" playsinline="true" <!-- 启用内嵌播放 --> webkit-playsinline="true" <!-- 针对旧版WebKit浏览器启用内嵌播放 --> x-webkit-airplay="allow" <!-- 支持AirPlay功能 --> airplay="allow" <!-- 明确声明支持AirPlay --> src="./video.mp4" <!-- 设置视频源文件路径 --> poster="./poster.png"> <!-- 设置封面图片 --> </video> ``` 上述代码片段展示了如何利用多个属性来优化苹果设备上的视频播放体验[^1]。值得注意的是,在较新的版本中仅需指定 `playsinline=true` 即可满足大部分场景的需求;而对于更早版本,则可能还需要额外添加 `webkit-playsinline=true` 来确保兼容性[^3]。 此外,考虑到不同平台间的差异性和未来可能出现的变化,推荐开发者密切关注官方文档和技术社区内的最新动态,以便及时调整策略以应对新情况的发生。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值