uniapp 中app通过视频链接获取封面

此方法使用了renderjs,可配合查看

首先添加:vsrc=“vsrc” :change:vsrc="renderScript.vimghuode"加在任意view标签上,意为当vsrc值发生改变时调用renderScript下的vimghuode方法,即获取封面方法
在这里插入图片描述
加个点击事件 @tap="renderScript.fasong_vimg"用于从renderjs返回封面图链接
在这里插入图片描述

使用步骤:1.复制下方所用方法与参数并观看上方标黑文字2.调用fengmian方法参数为视频链接3.通过点击事件获取返回的封面图链接。

renderjs部分

<script module="renderScript" lang="renderjs">
	export default {
		data() {
			return {
				test:""
			}
		},
		mounted() {
			
		},
		methods: {
			//通过视频获得缩略图
			vimghuode(newValue, oldValue, ownerVm, vm){
				if(newValue==null)
					return;
				let that=this;
				// 在缓存中创建video标签
				let video = document.createElement("VIDEO")
				// 添加一个静音的属性,否则自动播放会有声音
				// video.setAttribute('muted', true)
				video.muted=true
				// 通过setAttribute给video dom元素添加自动播放的属性,因为视频播放才能获取封面图
				video.autoplay=true;
				//允许跨域访问
				video.crossOrigin='anonymous';
				// 上面我们只是创建了video标签,视频播放需要内部的source的标签,scr为播放源
				video.innerHTML = '<source src=' + newValue.src + ' type="audio/mp4">'
				// 再创建canvas画布标签
				let canvas = document.createElement('canvas');
				let ctx = canvas.getContext('2d');
				// video注册canplay自动播放事件
				video.addEventListener('canplay', function() {
					// 创建画布的宽高属性节点,就是图片的大小,单位PX
					let anw = document.createAttribute("width");
					anw.nodeValue = newValue.width;
					let anh = document.createAttribute("height");
					anh.nodeValue = newValue.height;
					canvas.setAttributeNode(anw);
					canvas.setAttributeNode(anh);
					// 画布渲染
					ctx.drawImage(video, 0, 0, newValue.width, newValue.height);
					// 生成图片
					that.test = canvas.toDataURL('image/png') // 这就是封面图片的base64编码
					// 视频结束播放的事件
					video.pause()
				}, false)
			},
			//此方法用户在template中手动操作触发
			fasong_vimg(event, ownerInstance){
				ownerInstance.callMethod('jiehsou_vimg', {
					test: this.test
				})
			}
		}
	}
</script>

普通vue部分
其中fengmian方法获取封面图传入参数视频链接即可

<script>
	export default {
		data() {
			return {
				vsrc:null//用于renderjs通信
			}
		},
		onLoad() {
		},
		methods: {
			jiehsou_vimg(data){
				//data.test为返回的封面图
			},
			//视频封面图
			fengmian(lianjie){
				uni.getVideoInfo({//视频详细信息
					src:lianjie,
					success(e) {
						let jihe={};
						jihe.src=lianjie;
						let h,w;
						if(e.orientation=="left"||e.orientation=="right"||e.orientation=="left-mirrored"||e.orientation=="right-mirrored"){
							h=e.width;
							w=e.height;
						}else{
							w=e.width;
							h=e.height;
						}
						
						jihe.width=w;
						jihe.height=h;						

						that.vsrc=jihe;//因change调用renderScript.vimghuode方法获取封面
					},
					fail(e) {
						console.log(e);
					}
				})
			}
			
		}
	}
</script>

其中画布高宽由getVideoInfo获得,有需求或视频旋转判断可自行修改
效果图
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

翎墨袅

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值