You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Safari下Video.js播放器播放异常问题求助

iOS Safari下Video.js播放异常问题

问题现象

在iOS设备的Safari浏览器中使用Video.js播放器时出现异常:点击播放后,时间轴显示视频已启动,但无音频和视频输出;约10秒后视频自动重启,此时才会从头正常播放音视频。已尝试不同preload选项,其他浏览器(如Mac端Safari)播放均正常。

HTML代码

<div class="outer-container-sr">
            <div class="video-container-sr">
                <video id="my-video" class="video-js vjs-21-9" controls preload="auto" playsinline data-setup="{}"
                    poster="https://www.sontak.de/Bilder/Lumixers_breit.jpg">
                    <source src="showreel_2023_V7.mp4" type="video/mp4">
                    <!-- 此处可添加WebM或Ogg等视频格式备选源 -->
                    您的浏览器不支持视频播放。
                </video>
            </div>
</div>

JavaScript代码

document.addEventListener("DOMContentLoaded", function () {
            var video = videojs('my-video', {
                controlBar: {
                    volumePanel: false,
                    pictureInPictureToggle: false
                }
            });
        });

CSS代码

.outer-container-sr {
    width: 100%;
    border-radius: 15px;
    overflow: hidden;
    margin-left: auto;
    margin-right: auto;
    z-index: 5;
}

.video-container-sr {
    position: relative;
    padding-bottom: 42.85%;
    /* 21:9 宽高比计算值 */
    overflow: hidden;
    border-radius: 10px;
}

.video-container-sr .video-js {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

.vjs-icon-placeholder:before {
    color: white;
    line-height: 150%;
}

/* 大播放按钮样式 */
.video-container-sr .vjs-big-play-button {
    position: absolute;
    bottom: 16px;
    left: 60px;
    height: 3rem;
    top: initial;
    background-color: #2F54E6;
    opacity: 0.75;
    border: 0.05em solid #fff;
}

/* 视频覆盖层 */
.video-overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 10px;
    transition: opacity 0.5s;
    pointer-events: none;
    opacity: 1;
}

.video-container-sr.vjs-has-started .video-overlay {
    opacity: 0;
}

.video-title {
    font-size: 24px;
    color: black;
    text-align: center;
    padding: 20px;
    border-radius: 10px;
    background-color: white;
}

/* 移动端适配 */
@media (max-width: 40rem) {
    .video-container-sr .vjs-big-play-button {
        width: 4rem;
        height: 2.5rem;
    }

    .vjs-icon-play,
    .video-js .vjs-play-control .vjs-icon-placeholder,
    .video-js .vjs-big-play-button .vjs-icon-placeholder:before {
        font-family: VideoJS;
        font-weight: normal;
        font-style: normal;
        line-height: 125%;
    }

    .vjs-icon-placeholder:before {
        color: white;
        line-height: 150%;
    }

    .video-container-sr .vjs-big-play-button {
        margin-top: initial;
        margin-left: initial;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 4rem;
        height: 2.5rem;
        background-color: #2F54E6;
        opacity: 0.75;
        border: 0.05em solid #fff;
    }
}

可能的解决方案

  1. 调整预加载与播放触发逻辑
    iOS Safari对视频预加载限制更严格,尝试将preload设为none,并在用户点击播放时手动触发加载:
<video id="my-video" class="video-js vjs-21-9" controls preload="none" playsinline data-setup="{}"
    poster="https://www.sontak.de/Bilder/Lumixers_breit.jpg">
    <!-- 其他内容不变 -->
</video>

同时在JS中添加播放事件监听:

document.addEventListener("DOMContentLoaded", function () {
    var video = videojs('my-video', {
        controlBar: {
            volumePanel: false,
            pictureInPictureToggle: false
        }
    });

    video.on('play', function() {
        if (this.readyState() < 1) {
            this.load();
        }
    });
});
  1. 检查视频编码兼容性
    iOS Safari仅支持特定参数的H.264编码视频,需确保视频使用Baseline或Main Profile,分辨率和码率适配移动设备。可使用FFmpeg重新编码:
ffmpeg -i showreel_2023_V7.mp4 -c:v libx264 -profile:v baseline -level 3.0 -c:a aac -b:a 128k showreel_2023_V7_ios.mp4
  1. 排查样式/脚本冲突
    暂时注释自定义CSS中overflow: hidden、z-index等可能影响视频渲染的属性,测试是否恢复正常。同时确保使用最新稳定版Video.js,避免版本兼容问题。

  2. 优化视频响应头设置
    确认视频文件的HTTP响应头包含Accept-Ranges: bytes(支持断点续传),iOS Safari对不支持断点续传的视频可能出现加载异常。


内容的提问来源于stack exchange,提问作者sontak.de

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:57:31