起因
项目之前支持高清预览,但是不支持flv格式的视频。所以,为了让他支持flv格式,我去整理了一些相关资料,发现,有两种方式,一个是采用插件,一个是使用b站开源的flv.js。详情见下:
flv.js简介
Flv.js 是 HTML5 Flash 视频(FLV)播放器,纯原生 JavaScript 开发,没有用到 Flash。由 bilibili 网站开源。
- 概览:
一个实现了在 HTML5 视频中播放 FLV 格式视频的 JavaScript 库。它的工作原理是将 FLV 文件流转码复用成 ISO BMFF(MP4 碎片)片段,然后通过 Media Source Extensions 将 MP4 片段喂进浏览器。
flv.js 是使用 ECMAScript 6 编写的,然后通过 Babel Compiler 编译成 ECMAScript 5,使用 Browserify 打包。 - 功能:
- FLV 容器,具有 H.264 + AAC 编解码器播放功能
- 多部分分段视频播放
- HTTP FLV 低延迟实时流播放
- FLV 通过 WebSocket 实时流播放
- 兼容 Chrome, FireFox, Safari 10, IE11 和 Edge
- 十分低开销,并且通过你的浏览器进行硬件加速
flv用法
话不多说,直接上demo,
demo1:这个是通过videojs和flv.js结合使用的,可以支持mp4,还有flv等多种格式。demo的核心在于videojs的配置,以及引入了flvjs,在报错后可以进行修改访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <!DOCTYPE html> <html lang="en"> <head> <title>video</title> <!-- Video.js --> <link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet"> <script src="//i2.wp.com/unpkg.com/video.js/dist/video.min.js"></script> <script src="//i2.wp.com/unpkg.com/flv.js/dist/flv.min.js"></script> <script src="//i2.wp.com/unpkg.com/videojs-flvjs/dist/videojs-flvjs.min.js"></script> </head> <body> <div> <video id="videojs-flvjs-player" class="video-js vjs-default-skin vjs-big-play-centered" width="1024" height="768"> </video> </div> </body> </html> <script> var flvUrl = "https://mister-ben.github.io/videojs-flvjs/bbb.flv"; var player = videojs('videojs-flvjs-player', {<!-- --> techOrder: ['html5', 'flvjs'], flvjs: {<!-- --> mediaDataSource: {<!-- --> isLive: false, cors: true, withCredentials: false, }, }, sources: [{<!-- --> src: flvUrl, type: 'video/mp4' }], controls: true, preload: "none" }, function onPlayerReady() {<!-- --> console.log('player ready') player.on('error', (err) => {<!-- --> console.log('first source load fail') player.src({<!-- --> src: flvUrl, type: 'video/x-flv' }); player.ready(function() {<!-- --> console.log('player ready') player.load(); player.play(); }); }) }); </script> |
demo2 :纯粹的flvjs,支持mp4和flv格式.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> <link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet"> <script src="//i2.wp.com/unpkg.com/video.js/dist/video.min.js"></script> <script src="//i2.wp.com/unpkg.com/flv.js/dist/flv.min.js"></script> <script src="//i2.wp.com/unpkg.com/videojs-flvjs/dist/videojs-flvjs.min.js"></script> </head> <body> <video id="videoElement" class="video-component" ref="videoElement" controls autoplay >Your browser is too old which doesn't support HTML5 video.</video> </body> </html> <script> if (flvjs.isSupported()) {<!-- --> var videoElement = document.getElementById('videoElement'); var flvPlayer = flvjs.createPlayer({<!-- --> type: 'flv', url: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv' }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); flvPlayer.play(); } </script> |
小结
参考上面两个demo,基本可以让你初步使用flvjs实现flv格式的视频的播放了。但是这有个坑,那就是跨域问题。如果跨域没有配置好,是无法播放视频的。
参考资料
- flv中文API文档