全面了解videojsrtmp插件

发布时间:2023-05-18

一、简介

videojsrtmp是一个基于dailymotion插件的video.js插件,它允许使用RTMP协议播放视频。它支持多种格式的视频文件,包括FLV、MP4、M4V、mov等。 它使用了video.js库的核心和常用功能,并通过扩展来继承和覆盖它们,以在支持Flash的浏览器中支持RTMP流的播放。

二、使用方法

  1. 引入video.js库和videojsrtmp插件
<link href="https://vjs.zencdn.net/7.8.3/video-js.css" rel="stylesheet" />
<script src="https://vjs.zencdn.net/7.8.3/video.min.js"></script>
<script src="dist/videojs-flash.js"></script>
<script src="dist/videojs-contrib-hls.js"></script>
<script src="//cdn.dailymotion.com/cdn/manifest/videojs/videojs-dailymotion.min.js"></script>
<script src="dist/videojs.rtmp.min.js"></script>
  1. 创建视频播放器
<video id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto" width="640" height="264">
  <source src="rtmp://example.com/my-video" type="rtmp/flv">
  <p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that
    <a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
  </p>
</video>
  1. 初始化videojsrtmp插件
var player = videojs('my-video');
player.rtmp({
  // RTMP流地址
  src: 'rtmp://example.com/my-video',
  // 支持的格式
  // 现在已经实现了flv和mp4的支持
  type: 'rtmp/flv'
});

三、常用配置

  1. rtmp桶相关配置
player.rtmp({
   src: 'rtmp://example.com/stream/my-video',
   // RTMP桶所在的位置
   rtmp: {
       // 连接参数
       params: {
           // 固定写法
           SAV1579LEN: 36,
           // 其他参数
           // 可以通过debug中查看
       },
       // 桶中的流名称
       bufferName: 'mp4:my-video'
   },
   type: 'rtmp/mp4'
});
  1. flash相关配置
player.rtmp({
   src: 'rtmp://example.com/my-video',
   // flash版本号
   swf: 'dist/plugin/swf/flash.swf',
   // 支持的flash插件版本号
   flashVersion: '9.0.0',
   // 显示flash的位置,可以使用id和className来指定
   flashSrc: 'dist/plugin/swf/flash.swf',
   // flashvars,用来动态地设置flash参数
   flashVars: {
       // 可以设置rtmpSearchPattern和rtmpConnectionConfig等
   },
   type: 'rtmp/flv'
});
  1. hls相关配置
player.rtmp({
   src: 'rtmp://example.com/my-video',
   // 兼容性模式
   hls: {
       withCredentials: true
   },
   type: 'rtmp/hls'
});

四、拓展应用

  1. 使用videojsrtmp实现推流 video.js-rtmp包中也支持推流。需要使用videojs.w3c.xhr.js和视频编码器(如flv.js)。
var player = videojs('my-video');
player.w3c = true;
var encoder = new flvjs.createPlayer({
    type: 'flv',
    isLive: true,
    'url': 'rtmp://example.com/stream/my-video'
});
encoder.attachMediaElement(player.el().firstChild);
encoder.load();
encoder.play();
  1. 使用videojsrtmp实现直播弹幕 使用websocket和videojsrtmp插件,可以实现类似bilibili的弹幕效果。首先需要通过websocket连接到弹幕服务器,然后通过videojs事件监听器(playing,pause,ended等)来控制弹幕的显示和隐藏。
var evt = [
    'VideoPlaying',
    'VideoPause',
    'VideoEnded'
];
var player = videojs('my-video');
player.rtmp({
    // 视频地址
    src: 'rtmp://example.com/my-video',
    // 视频类型
    type: 'rtmp/flv',
    // 监听事件
    events: evt,
    // 自定义事件处理函数(显示/隐藏弹幕)
    customEventHandler: function(e) {
        switch (e.type) {
            case 'VideoPlaying':
                // 显示弹幕处理函数
                break;
            case 'VideoPause':
                // 隐藏弹幕处理函数
                break;
            case 'VideoEnded':
                // 隐藏弹幕处理函数
                break;
            default:
                break;
        }
    }
});

五、总结

videojsrtmp作为一款优秀的video.js插件,可以优雅的支持RTMP协议,让我们在不用担心浏览器不支持RTMP流的情况下,在网页上播放视频。它的使用方法简单易懂,支持多种配置,能够满足各种应用的需求,具有很高的可定制性。