video实现浏览器打开自动播放

本文介绍了一种解决iOS Safari浏览器中音视频自动播放问题的方法。通过监听用户交互事件来触发音视频播放,绕过iOS Safari对于自动播放功能的限制。

1.html

  <video id="minione-video" class="minione-video" poster="./common/images/mini-one/miniONE_BG2.jpg" autoplay="autoplay" muted="muted" preload>
        <source type="video/mp4" src="http://c1.mifile.cn/f/i/16/chain/airpro/airpro-top.mp4">
        <!--<source type="video/mp4" src="./common/images/mini-one/mini-one-video.mp4">-->
        <!--<source type="video/mp4" src="./common/images/mini-one/mini-one-video.Ogg">-->
        <img src="./common/images/mini-one/BG2.jpg" alt="one">

      </video>

2.demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>Fake auto play html audio in iOS Safari the right way</title>
    <style>
        video{
            width: 100%;
        }
    </style>
</head>
<body>
<video id="bgmusic" autoplay preload muted>
    <source type="video/mp4" src="http://c1.mifile.cn/f/i/16/chain/airpro/airpro-top.mp4">
</video>
<script>
    (function() {
        function log(info) {
            console.log(info);
            // alert(info);
        }
        function forceSafariPlayAudio() {
            audioEl.load(); // iOS 9   还需要额外的 load 一下, 否则直接 play 无效
            audioEl.play(); // iOS 7/8 仅需要 play 一下
        }


        var audioEl = document.getElementById('bgmusic');


        // 可以自动播放时正确的事件顺序是
        // loadstart
        // loadedmetadata
        // loadeddata
        // canplay
        // play
        // playing
        // 
        // 不能自动播放时触发的事件是
        // iPhone5  iOS 7.0.6 loadstart
        // iPhone6s iOS 9.1   loadstart -> loadedmetadata -> loadeddata -> canplay
        // audioEl.addEventListener('loadstart', function() {
        //     log('loadstart');
        // }, false);
        // audioEl.addEventListener('loadeddata', function() {
        //     log('loadeddata');
        // }, false);
        // audioEl.addEventListener('loadedmetadata', function() {
        //     log('loadedmetadata');
        // }, false);
        // audioEl.addEventListener('canplay', function() {
        //     log('canplay');
        // }, false);
        // audioEl.addEventListener('play', function() {
        //     log('play');
        //     // 当 audio 能够播放后, 移除这个事件
        //     window.removeEventListener('touchstart', forceSafariPlayAudio, false);
        // }, false);
        // audioEl.addEventListener('playing', function() {
        //     log('playing');
        // }, false);
        // audioEl.addEventListener('pause', function() {
        //     log('pause');
        // }, false);


        // 由于 iOS Safari 限制不允许 audio autoplay, 必须用户主动交互(例如 click)后才能播放 audio,
        // 因此我们通过一个用户交互事件来主动 play 一下 audio.
        window.addEventListener('ready', forceSafariPlayAudio, false);
        // audioEl.src = 'http://c1.mifile.cn/f/i/16/chain/airpro/airpro-top.mp4';
    })();
</script>
</body>
</html>

### HTML 视频在浏览器中无法播放的解决方案 当遇到HTML视频在浏览器中无法播放的情况时,可以从以下几个方面入手解决问题: #### 1. **检查浏览器兼容性** 确保所使用的浏览器版本支持视频文件的格式和编码方式。不同浏览器对视频格式的支持有所不同,常见的视频格式包括MP4(H.264)、WebM 和 Ogg[^1]。如果浏览器不支持特定的视频格式或编解码器,则可能导致视频无法正常播放。 可以通过以下方法验证浏览器支持的视频格式: ```javascript function checkVideoSupport() { const video = document.createElement('video'); console.log("Can play MP4 H.264:", !!video.canPlayType('video/mp4; codecs="avc1.42E01E"')); console.log("Can play WebM VP8:", !!video.canPlayType('video/webm; codecs="vp8, vorbis"')); console.log("Can play Ogg Theora:", !!video.canPlayType('video/ogg; codecs="theora"')); } checkVideoSupport(); ``` #### 2. **调整HTML `<video>` 标签属性** 确认`<video>`标签中的`src`路径是否正确,并设置必要的属性。例如,`controls`用于显示播放控件,`autoplay`尝试自动播放视频,`muted`静音状态有助于提高某些情况下自动播放的成功率[^3]。 示例代码如下: ```html <video id="myVideo" width="640" height="360" controls autoplay muted> <source src="example.mp4" type="video/mp4"> <source src="example.webm" type="video/webm"> Your browser does not support the video tag. </video> ``` #### 3. **处理Chrome浏览器自动播放策略** 自2018年起,Google Chrome实施了更严格的自动播放政策,要求用户交互才能触发媒体播放,除非满足特定条件(如静音)。为了绕过这一限制,可以在Chrome地址栏输入`chrome://flags`并搜索“Autoplay policy”,将其设置为“No user gesture is required”。不过这种方法仅适用于本地调试环境,在生产环境中应遵循最佳实践[^3]。 另一种推荐的方式是在加载页面时保持音频关闭状态,允许用户点击按钮启动播放功能: ```javascript document.getElementById('playButton').addEventListener('click', function () { const video = document.getElementById('myVideo'); video.play().catch(error => { console.error("Error playing video:", error); }); }); ``` #### 4. **针对RTSP流的特殊处理** 对于需要播放RTSP协议传输的视频流场景,原生HTML5并不直接支持该协议。一种常见做法是借助第三方库将RTSP转换成FLV或其他可被浏览器解析的形式后再渲染出来[^2]。以下是基于flv.js实现的一个简单例子: ```html <script src="https://cdn.jsdelivr.net/npm/flv.js@1.6.2/dist/flv.min.js"></script> <video id="videoElement" controls></video> <script> if (flvjs.isSupported()) { var videoElement = document.getElementById('videoElement'); var flvPlayer = flvjs.createPlayer({ type: 'flv', url: 'http://your-server/live/stream.flv' }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); flvPlayer.play(); } else { alert("Your browser doesn't support FLV playback."); } </script> ``` 另外还可以考虑采用WebRTC技术栈作为替代方案之一,它具备更低延迟特性适合实时通信需求的应用场合[^2]。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值