Vue——vue-video-player(video.js)实现rtmp直播流

  • Post author:
  • Post category:vue





前因后果

重新迭代一个老项目(以前是阿里云集成的组件),据说是因为其他的不能方法不能再播放容器之上展示模块。反正我是不信

=。=

,于是周六折腾了一下午,想用

video.js

来实现,于是就有了这篇文章。一来做个记录(确实太坑了) ,二来也是希望对正在为直播头疼的小伙伴提供一些参考。


具体怎么弄好的忘得差不多了 贴一下主要代码吧


Alt



操作步骤

  • 安装 vue-video-player
npm install vue-video-player -save
  • 引用
import VueVideoPlayer from 'vue-video-player'
import 'video.js/dist/video-js.css'
import 'vue-video-player/src/custom-theme.css'
import 'videojs-flash'
import 'videojs-contrib-hls/dist/videojs-contrib-hls'


ps: 局部引用如果是组件内部报错,就直接全局引用就好了= =


在这里插入图片描述

  • 接下来应该是代码了吧,别不出来话了
<template>
	<div class='demo'>
		<video-player class="vjs-custom-skin" ref="videoPlayer" :options="playerOptions" @ready="onPlayerReadied" @timeupdate="onTimeupdate">
		</video-player>
		<div class="top">
			<div class="box">
				<div class="box_left">
					<img src="../images/touxiang.jpg" alt="">
					<div>҉遗҉忘</div>
					<img src="../images/btn_Follow.png" alt="">
				</div>
				<div class="box_right">
					<img src="../images/ic_comments.png" alt="">
					<img src="../../../images/close.png" alt="">
				</div>
			</div>
			<img class="top_img" src="../images/coin_number.png" alt="">
		</div>
	</div>
</template>




我把能找到的属性和注释都加上了,如果有不需要的可以删掉

<script>
	const isProduction = process.env.NODE_ENV === 'production'
	export default {
		data() {
			return {
				playerOptions: {
					playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
					overNative: true,
					autoplay: false, // 是否自动播放
					controls: true, // 是否拥有控制条
					muted: false, // 默认情况下将会消除任何音频
					loop: false, // 导致视频一结束就重新开始
					preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
					language: 'zh-CN',
					aspectRatio: '16:9', // 播放器大小比例
					 fluid: true, // 当true时,将按比例缩放以适应其容器
					techOrder: ['flash', 'html5'], // 兼容顺序'flash', 'html5'
					sourceOrder: true,
					flash: {
						hls: {
							withCredentials: false
						},
						swf: isProduction ? '/vue-videojs-demo/static/media/video-js.swf' : '/static/media/video-js.swf'
					},
					html5: {
						hls: {
							withCredentials: false
						}
					},
					sources: [{
						withCredentials: false,
						type: 'application/x-mpegURL', // 类型
						src: 'http://pull.live.xinxiansi.com/wl20200717/wl20200717.m3u8?auth_key=1602740337-0-0-e313098aef1223412c0930d647ac8052' // 流地址
					}],
					poster: isProduction ? '/vue-videojs-demo/static/images/logo.png' : '/static/images/logo.png' // 封面
					// controlBar: {
					//   timeDivider: false, // 时间分割线
					//   durationDisplay: false, // 总时间
					//   progressControl: true, // 进度条
					//   customControlSpacer: true, // 未知
					//   fullscreenToggle: true // 全屏
					// },
				}
			}
		},
		computed: {
			player() {
				return this.$refs.videoPlayer.player
			},
		},
		methods: {
			onPlayerReadied() {

			},
			onTimeupdate(e) {
				console.log('currentTime', e.cache_.currentTime)
			},
		}
	}
</script>



注意

1、vue-video-player 其实就是 video.js 集成到 vue 中,所以别再装 video.js,可能会出错

2、别用 RTMP 协议的直播源(反正我这里一直报错,阿里云)

3、 播放 HLS 流需要 videojs-contrib-hls 插件(因为我是来来回回下了很多次,最后自己改 package.json 后重新安装的,所以记不清楚了)

4、多多支持,希望对大家有所帮助

5、看上面四点



版权声明:本文为weixin_43789261原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。