使用videojs播放rtmp时直播画面静止不动解决方案

使用videojs播放rtmp时直播画面静止不动解决方案

需求接入http以及rtmp两种格式的直播页面,所采用的的插件为videojs。http格式的直播为html5播放器,而rtmp格式却需要网页的flash。

videojs的版本选择

版本选择: x5版本的videojs自带flash插件,而x6版本及以上则需要手动引入videojs-flash.min.js。百度一堆,这里就不放下载地址了。

这里我采用了
“video.js”: “^7.3.0”,
同时也引入了 videojs-flash.min.js

产生的问题

在播放http格式的直播时正常播放。在播放rtmp格式的直播时有画面,但是画面却静止不动,点击暂停再播放后,直播画面会顺时改变且依旧静止。 这里我又试了下不同版本下的videojs,但结果都一样。rtmp格式的直播依旧画面静止不动。

解决方案

最终尝试无果之后我打算播放http时使用videojs,可正常播放,播放rtmp格式的直播时使用另外一个播放器。
百度后发现一款国内的播放器 ckplayer,没有细看,但文档写的比较详细而且是中文=。= 可自行百度研究。尝试后发现可用,虽然感觉直播时不时特别流畅,但能用啊…

示例代码

因为需要在一个页面切换直播地址,这里采用了动态加载videojs的src。
html:

//此处放两个div容器分别播放http和rtmp两种格式的直播。
<div class="top-ten"  id="videoBox"> </div>
<div class="top-ten"  id="video2"> </div>

js:

		//判断是否为rtmp格式
		if(res.data.videoUrl.substr(0,4)!='rtmp'){
                this.isRTMP = false;
				let videoBox = document.getElementById('videoBox')
                    if( this.videoPlayer){
                        this.videoPlayer.dispose()
                    }
                    if(videoBox.innerHTML.replace(/(^\s*)|(\s*$)/g, "").length==0){
                        let str = `
                            <video id="video" class="video-js" controls data-setup="{}" style="margin:0 auto;position: relative;height: 100%;width: 100%;">
                                <source id="videoSource" src="" >
                                <p class="vjs-no-js">请升级你的浏览器</p>
                            </video>
                        `
                        videoBox.innerHTML = str;
                        this.videoPlayer = videojs('video', {autoplay: false, controls: true,
                            sources:[{
                                src:res.data.videoUrl,//此处为后台获取的直播地址
                            }]
                        },function(){
                            console.log(this)
                        });
                    }
                }else{
                    this.isRTMP = true;
                    var videoObject = {
                        container: '#video2', //容器的ID或className
                        variable: 'player',//播放函数名称
                        autoplay:false,
                        live:true,
                        flashplayer:true,
                        video: res.data.videoUrl
                    };
                    var player = new ckplayer(videoObject);
                }

注意事项

使用ckplayer时需要将ckplayer.swflanguage.xmlstyle.xml这三个文件放在服务器根目录,播放rtmp时需要将浏览器flash设为允许。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在video.js播放RTMP直播,需要使用video.jsrtmp插件。以下是一些步骤: 1. 首先,需要引入video.jsrtmp插件的js和css文件。 ```html <link href="//vjs.zencdn.net/7.6.6/video-js.css" rel="stylesheet"> <script src="//vjs.zencdn.net/7.6.6/video.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"></script> <script src="//cdn.bootcss.com/videojs-flash/2.2.1/videojs-flash.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-eme/4.4.2/videojs-contrib-eme.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-quality-levels/2.0.9/videojs-contrib-quality-levels.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-dash/2.10.0/videojs-contrib-dash.min.js"></script> <script src="//cdn.bootcss.com/videojs-flash/2.2.1/videojs-flash.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-ads/6.6.5/videojs-contrib-ads.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-quality-levels/2.0.9/videojs-contrib-quality-levels.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-ads/6.6.5/videojs-contrib-ads.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-dash/2.10.0/videojs-contrib-dash.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"></script> <script src="//unpkg.com/videojs-flash/dist/videojs-flash.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-ads/6.6.5/videojs-contrib-ads.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-eme/4.4.2/videojs-contrib-eme.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-quality-levels/2.0.9/videojs-contrib-quality-levels.min.js"></script> <script src="//cdn.bootcss.com/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"></script> ``` 2. 在video标签中添加data-setup属性,并在其值中定义rtmp插件。 ```html <video id="my-video" class="video-js" controls preload="auto" width="640" height="264" data-setup='{ "techOrder": ["flash", "html5"] }'> <source src="rtmp://example.com/path/to/stream" type="rtmp/mp4"> </video> ``` 3. 当使用rtmp,需要指定flash播放器的路径。 ```javascript videojs.options.flash.swf = "path/to/video-js.swf"; ``` 这样就可以在video.js播放RTMP直播了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值