使用videojs播放rtmp视频

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30152271/article/details/84334734

!!注意以下几点:

一定要把代码放到服务器上运行,然后访问index.html,不可本地打开使用。
demo使用的video.js版本是5.5.3,其他版本我还没进行测试,大家可以自己去试试。videojs官网
亲测在谷歌,ie9以上浏览器都可以正常播放,ie8还有点问题。
截止我写博客时我用的rtmp视频源是可用的,如果大家发现无法播放,可以试试其他的视频源,这里提供几个,仅供参考:
香港卫视,rtmp://live.hkstv.hk.lxdns.com/live/hks
香港财经,rtmp://202.69.69.180:443/webcast/bshdlive-pc
韩国GoodTV,rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp
韩国朝鲜日报,rtmp://live.chosun.gscdn.com/live/tvchosun1.stream
美国1,rtmp://ns8.indexforce.com/home/mystream
美国2,rtmp://media3.scctv.net/live/scctv_800
美国中文电视,rtmp://media3.sinovision.net:1935/live/livestream
湖南卫视,rtmp://58.200.131.2:1935/livetv/hunantv
主要的代码如下所示:

```
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>测试rtmp直播源</title>
<script src="http://vjs.zencdn.net/5.5.3/video.js"></script>
<link href="http://vjs.zencdn.net/5.5.3/video-js.css" rel="stylesheet">
<!-- If you'd like to support IE8 -->
<script src="http://vjs.zencdn.net/ie8/1.1.1/videojs-ie8.min.js"></script>
</head>
<body>
<div class="openFlashTips" style="width:300px;position:absolute;top:20px;left:225px;z-Index:9999;color:white">视频无法正常播放,请点击下方启用flash</div>
<video id="my-video" style="color:black;width:750px;height:350px" class="video-js" autoplay controls preload="auto" width="750" height="350" data-setup="{}">
    <source src='rtmp://58.200.131.2:1935/livetv/hunantv' type='rtmp/flv'/>
</video>
<embed width="300" height="70" class="openFlash" style="position:absolute;top:130px;left:225px;z-Index:9999;" type="application/x-shockwave-flash">
<script type="text/javascript" language="JavaScript">
    function flashChecker() {
        var hasFlash = 0;         //是否安装了flash
        var flashVersion = 0; //flash版本
        var isIE = /*@cc_on!@*/0;      //是否IE浏览器

        if (isIE) {
            var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
            if (swf) {
                hasFlash = 1;
                VSwf = swf.GetVariable("$version");
                flashVersion = parseInt(VSwf.split(" ")[1].split(",")[0]);
            }
        } else {
            if (navigator.plugins && navigator.plugins.length > 0) {
                var swf = navigator.plugins["Shockwave Flash"];
                if (swf) {
                    hasFlash = 1;
                    var words = swf.description.split(" ");
                    for (var i = 0; i < words.length; ++i) {
                        if (isNaN(parseInt(words[i]))) continue;
                        flashVersion = parseInt(words[i]);
                    }
                }
            }
        }
        return {f: hasFlash, v: flashVersion};
    }

    var fls = flashChecker();
    var s = "";
    if (fls.f) {
        document.getElementsByClassName("openFlash")[0].style.display = "none";
        document.getElementsByClassName("openFlashTips")[0].style.display = "none";
//        document.write("您安装了flash,当前flash版本为: " + fls.v + ".x");
    }
    else {
        document.getElementsByClassName("openFlash")[0].style.display = "block";
        document.getElementsByClassName("openFlashTips")[0].style.display = "block";
//        document.write("您没有安装flash");
    }
</script>
</body>
</html>

在这里插入图片描述
vue使用组件

import React, { Component } from 'react';
import videojs from 'video.js';
import 'video.js/dist/video-js.min.css';
import "./live.less";
var ActiveXObject=window.ActiveXObject;
class Live extends Component {
    constructor(props){
        super(props);
    }
    componentDidMount() {
        //判断浏览器是否有flash插件
        var isIE=false;
        if(window.ActiveXObject){
            isIE=true;
        }
        var has_flash=false;
        try{
            if(isIE){
                var flash=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                has_flash=true;
            }else{
                var flash=navigator.plugins["Shockwave Flash"];
                if(flash){
                    has_flash=true;
                }
            }
        }catch (e) {
            console.log(e);
        }
        if(has_flash){
            var _this=this;
            //在局域网不能播放,添加的代码,引入的路径必须是用require引入(使用本地的swf或者                    
               node_modules里面的都是可以的),不是局域网的就不用写这行代码,
           videojs.options.flash.swf = require('videojs-swf/dist/video-js.swf');
           // videojs.options.flash.swf = require("本地地址路径");
            this.player = videojs(this.videoNode, {
                preload: 'auto',// 预加载
                bigPlayButton: {},// 大按钮
                controls: true,// 是否开启控制栏
                width: 850,// 播放器宽度
                height: 600,// 播放器高度
                playbackRates: [1, 1.5, 2],
                muted: true, //是否静音
                loop : false, //是否循环播放
                autoplay:true, //是否自动播放
                techOrder: ["flash"],//设置flash播放
                language: "zh-CN",
            }, function onPlayerReady() {
                if(_this.props.videostreaming){
                    this.src({
                        src: "直播地址”,
                        type:'rtmp/flv'
                    })
                }
            });
        }
    componentWillUnmount() {
        if (this.player) {
            this.player.dispose();
        }
    }
    render() {
        return(
            <div data-vjs-player>
                <video ref={ node => this.videoNode = node } className="video-js vjs-big-play-centered" id="myvideo" poster={flash}></video>
            </div>
        );
    }
}
export default Live;

在局域网不能播放,添加的代码,引入的路径必须是用require引入(使用本地的swf或者node_modules里面的都是可以的),不是局域网的就不用写这行代码,
videojs.options.flash.swf = require(‘videojs-swf/dist/video-js.swf’);

我使用的是video.js@5.8.2版本,之前使用的是video.js@5.20.4,这个版本静音和播放放大直播画面,鼠标放上去显示英文,video.js@5.8.2是没有的,看自己的需求了

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要在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流直播了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值