在vue和html中播放.flv格式的视频

177 篇文章 26 订阅

借助一个html标签object,来嵌入一个swf媒体播放文件,并利用该文件来播放你预设的文件下载链接

利用B站开源的flv.js 通过将FLV文件流转换为ISO BMFF(Fragmented MP4)段,然后<video>通过Media Source Extensions API 将mp4段提供给HTML5 元素。

需要借助一个swf媒体播放文件

.flv格式视频地址 下面代码中示例地址为 https://file.njshushuo.com/8d2164883f65d1f78180b3fcc159d282 。 实际开发时将其替换为自己的地址

<!-- 视频 
借助一个html标签object,来嵌入一个swf媒体播放文件,并利用该文件来播放你预设的文件
https://file.njshushuo.com/flvplayer.swf
-->
<object
classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"
width = "640"
height = "480"
id = "VideoPlayer"
align = "middle" 
>
	<param name = "allowScriptAccess" value = "*" / >
	<param name = "allowFullScreen" value = "true" / >
	<param name = "movie" value = "./flvplayer.swf?video=https://file.njshushuo.com/8d2164883f65d1f78180b3fcc159d282&autoplay=true" />
	<param name = "quality" value = "high" / >
	<param name = "bgcolor" value = "#ffffff" / >
	<embed 
		src = "./flvplayer.swf"
		flashvars = "vcastr_file=https://file.njshushuo.com/8d2164883f65d1f78180b3fcc159d282&IsAutoPlay=1&IsContinue=1"
		quality = "high"
		bgcolor = "#000000"
		width = "500"
		height = "380"
		name = "VideoPlayer"
		align = "middle"
		allowScriptAccess = "*"
		allowfullscreen = "true"
		type = "application/x-shockwave-flash"
		pluginspage = "http://www.macromedia.com/go/getflashplayer" 
	/>
</object>
参数名称参数说明默认值
vcastr_file方法2传递影片flv文件地址参数,多个使用|分开
vcastr_title影片标题参数,多个使用|分开,与方法2配合使用
vcastr_xml方法3 传递影片flv文件地址参数,样板参考 http://www.ruochi.com/product/vcastr2/vcastr.xmlvcastr.xml
IsAutoPlay影片自动播放参数:0表示不自动播放,1表示自动播放0
IsContinue影片连续播放参数:0表示不连续播放,1表示连续循环播0
IsRandom影片随机播放参数:0表示不随机播放,1表示随机播放0
DefaultVolume默认音量参数 :0-100 的数值,设置影片开始默认音量大小100
BarPosition控制栏位置参数 :0表示在上浮动显示,1表示在影片下方显示0
IsShowBar控制栏显示参数 :0表示不显示;1表示一直显示;2表示鼠标悬停时显示;3表示开始不显示,鼠标悬停后显示2
BarColor播放控制栏颜色,颜色都以0x开始16进制数字表示0x000033
BarTransparent播放控制栏透明度60
GlowColor图标颜色,颜色都以0x开始16进制数字表示0x66ff00
IconColor悬停时光晕颜色,颜色都以0x开始16进制数字表示0xFFFFFF
TextColor文字颜色,颜色都以0x开始16进制数字表示0xFFFFFF
LogoText可以添加自己等信息(英文)
LogoUrl可以从外部读取图片,注意自己调整logo大小,支持图片格式和swf格式
EndSwf影片播放结束后,从外部读取swf文件,可以添加相关影片信息,影片分享等信息,需自己制作
BeginSwf影片开始播放之前,从外部读取swf文件,可以添加广告,或者网站信息,需自己制作
IsShowTime是否显示时间 : 0表示不显示时间,1表示显示时间1
BufferTime缓冲时间,单位(秒)2

 

放入vue项目中,却遇到了一个坑,那就是swf文件不能为相对路径,需要改成网络绝对路径,否则加载不到。
然而这种方法主要是利用flash插件完成的,需要浏览器安装flash插件,而对于普通用户而言:

安装flash困难
如果禁用了flash,再次开启也存在一定的困难。
另外,flash播放还存在 稳定性 和cpu占用率高的缺点。同时,由于该项目支持移动端,而移动端并没有flash插件,所以只能放弃第一种方法

flv.js, 附上B站flv.js的github地址 https://github.com/Bilibili/flv.js

flv.jsbilibili网站开源的使用纯JavaScript而不使用Flash编写的HTML5 Flash视频(FLV)播放器。通过将FLV文件流转换为ISO BMFF(Fragmented MP4)段,然后<video>通过Media Source Extensions API 将mp4段提供给HTML5 元素。
flv.js用ECMAScript 6编写,由Babel Compiler编译成ECMAScript 5 ,并与Browserify捆绑在一起。

优势

带有H.264 + AAC / MP3编解码器播放的FLV容器
多部分分段视频播放
HTTP FLV低延迟直播流播放
FLV 通过 WebSocket 实时流播放
兼容Chrome,FireFox,Safari 10,IE11和Edge
极低的开销,以及浏览器加速的硬件!

<script src="flv.min.js"></script>
<video id="videoElement"></video>
<script>
    if (flvjs.isSupported()) {
        var videoElement = document.getElementById('videoElement');
        var flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: 'http://example.com/flv/video.flv'
        });
        flvPlayer.attachMediaElement(videoElement);
        flvPlayer.load();
        flvPlayer.play();
    }
</script>

在vue项目中, 通过 npm install flv.js引入 flv.js,创建一个mvideo组件

<template>
  <div class="video">
    <video
      class="video-component"
      ref="videoElement"
      controls
      autoplay
    >Your browser is too old which doesn't support HTML5 video.</video>
  </div>
</template>
<script>
import flvjs from "flv.js";
export default {
  name: "Video",
  props: {
    types: {
      type: String,
      default: "flv"
    },
    url: {
      types: String,
      default: ""
    }
  },
  data() {
    return {
      flvPlayer: null
    };
  },
  watch: {
    url() {
      if (this.flvPlayer) {
        this.flvPlayer.detachMediaElement();
        this.flvPlayer.destroy();
      }
      this.createVideo();
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.createVideo();
    });
  },
  methods: {
    createVideo() {
      const videoElement = this.$refs.videoElement;
      this.flvPlayer = flvjs.createPlayer({
        type: this.types,
        url: this.url
      });
      this.flvPlayer.attachMediaElement(videoElement);
      this.flvPlayer.load();
    }
  }
};
</script>

使用:<w-video :url="imgUrl + item.videoFileId" :types="item.videoFileType" />
flv.js的缺点在于 需要知道该资源的文件类型,在createPlayer时,传入type

switch (mds.type) {
	case 'flv':
    	return new FlvPlayer(mds, optionalConfig);
	default:
    	return new NativePlayer(mds, optionalConfig);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieDYH

谢谢您嘞!我会继续加油地

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值