uniapp video(倍速功能、层级过高、视频第一帧做封面 等问题)

这篇具有很好参考价值的文章主要介绍了uniapp video(倍速功能、层级过高、视频第一帧做封面 等问题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

         由于上次写video组件的问题,过于划水,没讲清楚,导致自己花费了很多时间,重新踩坑,对自己很抱歉。

一、自己写的一个基本的视频组件(包含倍速功能)

效果图如下:倍速的显示和隐藏,需在全屏的时候 和 显示控制组件时

uniapp video组件,uniapp,uni-app

uniapp video组件,uniapp,uni-app

代码逻辑
1. 实现倍速的核心是创建视频组件控制器,调用它的倍速方法

=》官方文档 uni.createVideoContext(videoId, this) | uni-app官网

let videoContext = uni.createVideoContext; 
videoContext.playbackRate(1.5);


2. 如何通过cover-view在原生video组件上写UI
第一,要在 nvue 页面(不然全屏下,cover-view覆盖失效

第二,cover-view组件要放在video组件内部

<template>
	<!-- 视频 -->
	<view class="videoBox" >
		<video 
			:style="{width: 2*videoWidth+'rpx'}"
			id="videoId"
			class="video" :src="tempUrl" 
			:autoplay="true" object-fit="fill"
			@fullscreenchange="handleFullScreen"
			@controlstoggle="handleControlstoggle"
		>
			<!-- 后退按钮 -->
			<cover-image v-if="!speedState" @click="handleGoBack" class="backBtn" src="../../static/index/return_icon_white.png"></cover-image>
			
			<!-- 倍速按钮 -->
			<cover-view  v-if="speedState&&controlsToggle" class="speed">
				<text @click="speedNum=true" class="doubleSpeed">倍速</text>
			</cover-view>
			<!-- 倍速面板 -->
			<cover-view  v-if="speedNum" class="speedModal" @click.stop="speedNum=false"  :style="{width:clientHeight+37+'px',height: videoWidth+16+'px'}">
				<view  class="speedNumBox" :style="{height: videoWidth+16+'px'}">
					<text  @click.stop="handleSetSpeedRate(0.5)"  :class="[0.5 == speedRate?activeClass:errorClass,'number']">0.5</text>
					<text  @click.stop="handleSetSpeedRate(0.8)"  :class="[0.8 == speedRate?activeClass:errorClass,'number']">0.8</text>
					<text  @click.stop="handleSetSpeedRate(1)"    :class="[1 == speedRate?activeClass:errorClass,'number']">1</text>
					<text  @click.stop="handleSetSpeedRate(1.25)" :class="[1.25 == speedRate?activeClass:errorClass,'number']">1.25</text>
					<text  @click.stop="handleSetSpeedRate(1.5)"  :class="[1.5 == speedRate?activeClass:errorClass,'number']">1.5</text>
				</view>
			</cover-view>
		</video>
		
	</view>
</template>

<script setup>
	import {ref,reactive} from 'vue';
	import { onLoad } from '@dcloudio/uni-app';
	import StatusBarCustom from "@/pages/StatusBarCustom.vue";
	//视频播放的url
	let tempUrl = "https://vdept3.bdstatic.com/mda-piah212eiqj2c8n6/720p/h264/1694433760278042600/mda-piah212eiqj2c8n6.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1694494958-0-0-e6efe783e3f1291c8ae14aafc84c3449&bcevod_channel=searchbox_feed&pd=1&cr=2&cd=0&pt=3&logid=0158851676&vid=10823921248731998514&klogid=0158851676&abtest=112751_4";
	
/*======================================== 设置视频宽度 ===============================================*/
	let videoWidth = ref(0);     //设置视频宽度
	let clientHeight = ref(0);   //设备高度
	onLoad(()=>{
		uni.getSystemInfo({
			success: function (res) {
				videoWidth.value = res.screenWidth-16;
				clientHeight.value = res.screenHeight;
			}
		});
	});
	
/*======================================== 倍速功能模块 ===============================================*/	
	let speedState = ref(false);      //监听全屏和退出全屏,控制对应的“返回按钮和倍速按钮是否显示”
	let speedNum   = ref(false);      //倍速的数字蒙版(0.5,0.8,1.0,1.25,1.5)
	const activeClass = ref('active');//选中倍速时的颜色样式active是类名
	const errorClass=ref('noActive'); //非选中的颜色样式noActive是类名
	let speedRate = ref(1);           //倍速的值(用来判断选中状态)
	//监听进入全屏 和 退出全屏
	const handleFullScreen = (e)=>{
		//e.detail对象的两个属性fullScreen和direction,一个可以得到true/false 另一个得到horizontal/vertical
		speedState.value = e.detail.fullScreen;
	}
	//倍速按钮:显示的条件  1.首先全屏   2.控件(播放/暂停按钮、播放进度、时间)是显示状态
	let controlsToggle = ref(false);
	const handleControlstoggle = (e)=>{
		controlsToggle.value = e.detail.show;
	}
	//设置倍速速度
	const handleSetSpeedRate = (rate)=>{
		let videoContext = uni.createVideoContext("videoId");
		videoContext.playbackRate(rate);
		speedRate.value = rate;
	}
</script>

<style scoped lang="scss">

	.videoBox{
		display: flex;
		justify-content: center;
		align-items: center;
	}
	.video{
	}
	.backBtn{
		position: absolute;
		left: 16rpx;
		top: 45rpx;
		width: 45rpx;
		height: 45rpx;
	}
	.speed{
		position: absolute;
		right: 20rpx;
		top: 16rpx;
		.doubleSpeed{
			color: #fff;
			font-size: 14rpx;
			background-color: rgba(0,0,0,0.6);
			padding: 4rpx 6rpx;
		}
	}
	
	// 倍速的蒙版
	.speedModal{
		background-color: rgba(0,0,0,0.7);
	}
	.speedNumBox{
		display: flex;
		flex-direction: column;
		justify-content: space-around;
		align-items: center;
		background-color: #2c2c2c;
		width: 120rpx;
		position: absolute;
		right: 0rpx;
		top: 0;
		.number{
			width: 120rpx;
			font-weight: 700;
			font-size: 14rpx;
			padding: 18rpx 0;
			display: flex;
			justify-content: center;
			align-items: center;
			text-align: center;
		}
		.active{
			color: red;
		}
		.noActive{
			color: #fff;
		}
	}
	
</style>

cover-view组件的问题

(1)v-for根本无法使用

(2)也不能嵌套 uview-plus组件

=》只能手写状态

二、其它相关问题

1. uniapp获取视频第一帧图片,作为视频的封面

逻辑上就是再url后面,添加?x-oss-process=video/snapshot,t_0,f_jpg

<template>
    <video :poster="videoUrl+'?x-oss-process=video/snapshot,t_0,f_jpg'"></video>
</template>
<script setup>
    import {ref} from "vue";
    let videoUrl = ref("https://haokan.baidu.com/v?vid=5725386879683902914&tab=recommend&sfrom=recommend")
</script>  

对象OSS视频截帧参数 

uniapp video组件,uniapp,uni-app 

2. video这个原生控件层级层级太高无法覆盖

我想在video视频组件上覆盖一个返回按钮(图片) 和 一段文本(文字),代码和效果图如下

uniapp video组件,uniapp,uni-app

<template>
		<!-- 视频组件 -->
		<video class="videoBox" :src="courseData.videoUrl" :autoplay="true"></video>
         <!-- 在视频上覆盖一段文本 -->
		<cover-view class="backBtn">这是内容</cover-view>
		 <!-- 在视频上覆盖图片 -->
		<cover-image style="width: 50rpx;height: 50rpx;position: fixed;top: 100rpx;right: 50rpx;background-color: #000;" src="../../static/index/return_icon_white.png"></cover-image>
</template>

3. 去掉video下面的黑边

下面就是视频组件出现黑色边线

uniapp video组件,uniapp,uni-app

出现上下出现黑边的原因是: object-fit :contain;需要修改为 fill 就可以文章来源地址https://www.toymoban.com/news/detail-716090.html

到了这里,关于uniapp video(倍速功能、层级过高、视频第一帧做封面 等问题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【uniapp】 video视频层级、遮挡其他弹窗或顶部导航 使用nvue覆盖

    uniapp 顶部导航和弹窗被video遮挡解决办法 全部代码 请前往dcloud 视频播放器 解决video视频遮挡顶部导航、 遮挡分享弹窗 组件层级 下载 话不多说 直接来干货 示例图片: 第一步:配置 subNVues 第二步:分别在index文件夹下建立三个文件分别为:index.vue 、drawer.nvue、subnvue.nvue文件

    2024年02月12日
    浏览(54)
  • 【uniapp】微信小程序,取视频第一帧,前提是 图片是在 阿里云的oss上

    上传视频等,默认为黑色,无法用视频的第一帧作为封面,以及视频的video为原生组件,层级很高无法覆盖问题,虽然有cover-view,但很多场景还是不灵活 自己服务器是不支持的 ,可以用canvas截图 方法 ,将 图片组件image 替换成 视频video 组件 视频组件video 重点 将video组件更换

    2024年02月08日
    浏览(43)
  • 关于uniapp小程序内置canvas标签层级过高,覆盖其他标签问题

    uniapp 原因:是因为canvas是原生组件,而uniapp的 view、text 等标签相当于二次封装过的,给予z-index也是不生效的,微信开发者工具没有问题,但真机测试会爆这个雷 恰巧碰上一个需求需要一个canvas生成图片放在页面,点击按钮后生成一个二维码模态框,二维码也是canvas生成图

    2024年02月12日
    浏览(58)
  • js截取video视频某一帧做封面的简单案例

    可以使用 canvas 元素来截取视频某一帧并生成封面。 首先,在 video  标签上设置视频源地址和自动播放属性: 然后,在 canvas  标签上定义宽高和样式,并通过 JavaScript 获取视频元素和 canvas 元素: 接着,定义一个函数来截取视频某一帧,并将其渲染到 canvas 上: 在需要生成

    2024年02月04日
    浏览(53)
  • uniapp实现视频上下滑动功能(小程序)以及video组件的暂停和播放

    uni推荐使用swiper组件实现,在video组件的下面介绍有写。 这里实现方式是: 父组件先用swiper组件实现纵向滑动,然后在每个swiper-item中插入视屏组件video-item-vx(自己定义的组件),在video-item-vx组件中实现视屏播放,具体别的细节根据需要自己实现。 注意:不能无限添加swi

    2023年04月22日
    浏览(60)
  • Vue实现video视频倍速播放、调节声音、拖动进度条、生成智能字幕等

    前言介绍 在现代化的网站中,视频播放已经成为了不可或缺的一部分。而对于视频播放的需求也越来越多样化,比如倍速播放、调节声音、拖动进度条、生成智能字幕等。本文将介绍如何使用Vue实现这些功能。 组件实现思路 首先,我们需要一个video标签来播放视频。然后,

    2024年02月11日
    浏览(44)
  • Java实现截取视频第一帧

    目录 前言 一、通过Java借助第三方库实现 1.引用ffmpeg 使用maven,导入pom依赖:  工具类 2.引用jcodec 二、使用第三方存储自带的方法实现(如阿里云OSS、华为云OBS) 在实际项目中,会遇到上传视频后,需要截取视频的首帧或指定帧为图片,作为展示使用的需求。这个需求本身

    2024年02月06日
    浏览(42)
  • 前端截取视频第一帧作为封面

    概述 1.做项目的时候突然想截取视频第一帧,作为视频的封面,然后搜了很多博客都发现得到空白的图片,最后得到了解决。 2.方法:通过创建canvas标签,利用其drawImage() 方法在画布上绘制该视频,然后运用toDataURL方法转换canvas上的图片为base64格式,并将base64格式的图片作为

    2023年04月23日
    浏览(40)
  • vue 获取上传视频的第一帧做为视频封面

    上一篇文章记录了vue上传视频,接下来,需要在上传成功后截取视频第一帧做为视频封面。 具体实现如下: 上传视频之后,在成功回调函数中拿到视频地址, video.src=url ,然后,使用canvas截取图片。 截取视频第一帧使用的是canvas,相关步骤如下: canvas 可以用来截取图片。

    2024年02月03日
    浏览(44)
  • vue自定义h5video视频播放器进度条组件,可拖拽、跳转、倍速、全屏

    一个进度条组件控制多个视频的播放、进度调整。视频可点击全屏观看,唯一的进度条是某个指定视频的视频信息。 全屏 点击进度条跳转 拖动滑块 在菜鸟教程上有以下几个参数的详细解说,这张图忘记哪里看的了,如有认领可评论我贴链接 倍速 // 倍速 handleChangeSpeed(item)

    2024年02月12日
    浏览(105)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包