video.js支持m3u8格式直播

为什么要使用video.js?

1. PC端浏览器并不支持video直接播放m3u8格式的视频

2. 手机端各式各样的浏览器定制的video界面风格不统一,直接写原生的js控制视频兼容性较差

3. video.js解决以上两个问题,还可以有各种视频状态接口暴露,优化体验

核心代码:

<!DOCTYPE html>
<html>
<head>
    <title>videojs支持hls直播实例</title>
    <link href="./video.css?v=bcd2ce1385" rel="stylesheet">
</head>
<body>

    <video id="roomVideo" class="video-js vjs-default-skin vjs-big-play-centered" x-webkit-airplay="allow" poster="" webkit-playsinline playsinline x5-video-player-type="h5" x5-video-player-fullscreen="true" preload="auto">
        <source src="/chat/playlist.m3u8"  type="application/x-mpegURL">
    </video>

    <script src="./video.js?v=fc5104a2ab23"></script>
    <script src="./videojs-contrib-hls.js?v=c726b94b9923"></script>

    <script type="text/javascript">
        var myPlayer = videojs(‘roomVideo‘,{
            bigPlayButton : false,
            textTrackDisplay : false,
            posterImage: true,
            errorDisplay : false,
            controlBar : false
        },function(){
            console.log(this)
            this.on(‘loadedmetadata‘,function(){
                console.log(‘loadedmetadata‘);
                //加载到元数据后开始播放视频
                startVideo();
            })

            this.on(‘ended‘,function(){
                console.log(‘ended‘)
            })
            this.on(‘firstplay‘,function(){
                console.log(‘firstplay‘)
            })
            this.on(‘loadstart‘,function(){
            //开始加载
                console.log(‘loadstart‘)
            })
            this.on(‘loadeddata‘,function(){
                console.log(‘loadeddata‘)
            })
            this.on(‘seeking‘,function(){
            //正在去拿视频流的路上
                console.log(‘seeking‘)
            })
            this.on(‘seeked‘,function(){
            //已经拿到视频流,可以播放
                console.log(‘seeked‘)
            })
            this.on(‘waiting‘,function(){
                console.log(‘waiting‘)
            })
            this.on(‘pause‘,function(){
                console.log(‘pause‘)
            })
            this.on(‘play‘,function(){
                console.log(‘play‘)
            })

        });

        var isVideoBreak;
        function startVideo() {

            myPlayer.play();

            //微信内全屏支持
            document.getElementById(‘roomVideo‘).style.width = window.screen.width + "px";
            document.getElementById(‘roomVideo‘).style.height = window.screen.height + "px";

            //判断开始播放视频,移除高斯模糊等待层
            var isVideoPlaying = setInterval(function(){
                var currentTime = myPlayer.currentTime();
                if(currentTime > 0){
                    $(‘.vjs-poster‘).remove();
                    clearInterval(isVideoPlaying);
                }
            },200)

            //判断视频是否卡住,卡主3s重新load视频
            var lastTime = -1,
                tryTimes = 0;

            clearInterval(isVideoBreak);
            isVideoBreak = setInterval(function(){
                var currentTime = myPlayer.currentTime();
                console.log(‘currentTime‘+currentTime+‘lastTime‘+lastTime);

                if(currentTime == lastTime){
                    //此时视频已卡主3s
                    //设置当前播放时间为超时时间,此时videojs会在play()后把currentTime设置为0
                    myPlayer.currentTime(currentTime+10000);
                    myPlayer.play();

                    //尝试5次播放后,如仍未播放成功提示刷新
                    if(++tryTimes > 5){
                        alert(‘您的网速有点慢,刷新下试试‘);
                        tryTimes = 0;
                    }
                }else{
                    lastTime = currentTime;
                    tryTimes = 0;
                }
            },3000)

        }
    </script>

</body>
</html>

源码请移步github:

videojs支持hls直播实例

附:

一.  视频状态分析:

EVENTS

durationchange
ended
firstplay
fullscreenchange
loadedalldata
loadeddata
loadedmetadata
loadstart
pause
play
progress
seeked
seeking
timeupdate
volumechange
waiting
resize inherited

 

currentTime()可以用来发辅助判断视频播放情况



二.  视频加载优化:

通过不初始化video无用组件的方式,提高video加载速度

var myPlayer = videojs(‘roomVideo‘,{
            bigPlayButton : false,
            textTrackDisplay : false,
            posterImage: true,
            errorDisplay : false,
            controlBar : false
        },function(){});

未简化之前:

简化后:



三.  你可能也会遇到的错误error

错误1:

{code: 4, message: "No compatible source was found for this media."}

解决:去掉video标签的data-setup="{}", 只保留js的初始配置

错误2:

video.js Uncaught TypeError: Cannot read property ‘one‘ of undefined

解决:

var myPlayer = videojs(‘roomVideo‘,{
        bigPlayButton : false,
        textTrackDisplay : false,
        posterImage: false,
        errorDisplay : false,
        controlBar : {
            captionsButton : false,
            chaptersButton: false,
            subtitlesButton:false,
            liveDisplay:false,
            playbackRateMenuButton:false
        }
    },function(){
        console.log(this)
    });

正确

    var myPlayer = videojs(‘roomVideo‘,{
        children : {
            bigPlayButton : false,
            textTrackDisplay : false,
            posterImage: false,
            errorDisplay : false,
            controlBar : {
                captionsButton : false,
                chaptersButton: false,
                subtitlesButton:false,
                liveDisplay:false,
                playbackRateMenuButton:false
            }
        }
    },function(){
        console.log(this)
    });

错误

时间: 2024-08-02 02:50:56

video.js支持m3u8格式直播的相关文章

解决问题video.js 播放m3u8格式的文件,根据官方的文档添加videojs-contrib-hls也不行的原因解决了

想播放hls协议的就是m3u8文件,video.js原生不支持,官方有个插件videojs-contrib-hls 直接进入即可: <script src="__PUBLIC__/lib/video-js/videojs-contrib-hls.min.js"></script> 今天纠结了一天,调试到最后发现原来是跨域的问题: 如果使用阿里云OSS存储的话(别的服务器设置头部可访问即可),在跨域设置中做如下设置即可: 跨域问题:https://help.ali

React 基于antd+video.js实现m3u8格式视频播放及实时切换

文档连接地址(官网看起麻烦,看中文别人整理好的)https://blog.csdn.net/a0405221/article/details/80923090 React项目使用  安装依赖 npm install --save video.js 引入 import 'video.js/dist/video-js.min.css' import videojs from 'video.js' index.js (自己注释掉的可以不用) import React from 'react' impo

React video.js实现m3u8格式视频播放及实时切换

先安装: npm install --save video.js 导入 import videojs from 'video.js' import "video.js/dist/video-js.css"; constructor(props) { super(props); this.state = { current_url : '/001.m3u8', } this.player= null } componentDidMount   方法下 this.player = vide

html页面引用video.js播放m3u8格式视频

//head里面的内容,我是采用cdn引用的方式,因为项目太小 //只粘贴了不分代码,都是主要的,只要视频没问题,如果不能播放,建议换一个视频源,代码绝对没问题 都可以播放,下面video样式那里,一共三层, <head> <meta charset="utf-8" /> <title>二级造价</title> <script src="https://cdn.bootcss.com/vue/2.5.20/vue.min.

vue使用video.js解决m3u8视频播放格式

今天被这个关于m3u8视频播放不了搞了一下午,这个项目所有的视频流都是m3u8格式的,后台给我们返回的都是m3u8格式的视频流,解决了好长时间,看了好多博客,只有这个博客给我点启发,去解决这个问题,请查看.会使用两种方法来解决这个问题 第一种方法 1.在vue中安装下面这些插件 1 2 cnpm install  video.js --save ccnp  install videojs-contrib-hls --save 网上有说video.js版本太高不能使用,不能使用7以上的版本,用5版

让ckplayer支持m3u8格式的播放

一 ckplayer官网下载. 直接解压到本地,注意配置里面的默认文件路径,最好是放在服务器的根目录下,这样就可以去访问外链接的资源,官网也是这么推荐的,我这里就直接用node开启一个小服务器. 二 下载插件http://bbs.ckplayer.com/forum.php?mod=viewthread&tid=18168,我这里放置到ckplayer文件夹中. 三.配置 html: <div id="a1"></div> js: var flashva

vue.js+video.js+videojs-contrib-hls支持PC端播放m3u8格式的视频

最近项目中PC需要支持m3u8格式的视频播放 项目框架是vue.js 参考网上教程npm video.js 和  videojs-contrib-hls 项目本地测试OK 打包上线插件内报错 所以最后不得了当外部js 引入 才解决 同时需要引入video.js.css样式 classl类名改为 如图 video.js初始化写在mounted内 如此可以正常的播放m3u8格式的视频了 原文地址:https://www.cnblogs.com/xk-one/p/9243323.html

直播视频和m3u8格式、flv格式

插件: 1.video.js videojs-flash.js 可以播放rtmp直播流 2. hls.js 在html页面上可以播放m3u8格式的视频,但在react node项目上不行. 3.尝试用videojs-contrib-hls和@videojs/http-streaming失败. 4.尝试用ReactPlayer,应该可以,还未进行~ 原文地址:https://www.cnblogs.com/byayn/p/11179219.html

ckplayer 如何在PC上完美支持 m3u8播放

使用过ckplayer的同学都知道,相对jwplayer等,它非常的容易配置和使用.功能也是基本满足我们的需求的. 一般情况我们都使用普通的视频格式比如mp4,flv等播放,但如果视频文件过大,会加载较慢. 于是我们可以将视频转成m3u8格式来解决这个问题(可以百度m3u8来了解原理,简单点说他就是把视频切成若干个切片,每个切片都可以独立播放而且大小很小,然后利用一个文件索引来依次播放这些文件,所以很快) 如何转m3u8格式?可以参考我上一篇博文. =======================