快手短剧播放器uniapp如何引入与对接?

uniApp前端微短剧项目开源分享
开源地址:git开源下载地址

文章目录

  • 快手短剧播放器uniapp如何引入与对接?
    • 1.引入短剧播放器
    • 2.创建文件kscomponents组件
    • 3.local-stream.js文件说明
    • 4.用户行为事件
    • 4.local-stream.ksml文件参考如下

快手短剧播放器uniapp如何引入与对接?

1.引入短剧播放器

组件名: playlet
作用:专用于短剧行业播放器,内置提供内容库资源、提供上下滑交互能力,统一短剧C端交互
引入:打开源码视图或点击快手小程序配置appid

在这里插入图片描述

在 pages.json 对应页面的 style -> usingComponents 引入组件:

在这里插入图片描述

2.创建文件kscomponents组件

由于这里使用的是uniapp开发的,所以需要用到小程序原生组件
创建文件kscomponents
如下图所示

在这里插入图片描述

3.local-stream.js文件说明

下面这个是官方的使用实例代码

 <!-- 使用示例 -->
// js
Page({
  data: {
		playletAble: ks.canIUse('playlet'),// 用于判断当前播放是是否可用,不可用时,需降级为开发者原有播放能力
		playId: 'kmp5197435572253913798',
	    playletId: 'kmp5220516518114815260',
	    episodeIdList: [
					"kmp5214324068735814356",
			        "kmp5197435572253913798",
			        "kmp5190117222967049206",
			        "kmp5252041717489368041",
			        "kmp5210101945142343238",
			        "kmp5233464369157754857",
			        "kmp5207850144175705929",
			        "kmp5232056994883566342",
			        "kmp5199124419888573424",
					"kmp5228679295623438411"],
		extParams: {
               freeList: [1,2], // 已付费的剧集号,对应上传资源库的episodeNumber
               payedList: [3,4], // 已付费的剧集号,对应上传资源库的episodeNumber
               configList: {
                 1: { //   
                    "like": {
                      "liked": true, // 是否已点赞
                      "likedCount": 123, // 点赞数
                    },
                    "collect": {
                      "hasCollected": true, // 是否已收藏
                    },
                    "operation": {
                      "operationUrl": "http://xxx.com/xx.png", // 运营位图片
                      "operationDesc": "运营位" // 运营位描述
                    },
                    "follow": {
                      "avatar": "http://xxx.com/xx.png", // 头像
                      "followed": true  // 是否已关注
                    }
                  }
               },
               sourceList: {
                  "filingNumber": "备案号",
                  "totalEpisodeNumber": "",
                  "episodeList": [
                    {
                      "coverUrl": "封面链接",
                      "introduction": "简介",
                      "videoUrl": "http://xxx/xxx.mp4",
                      "duration": "600",
                      "episodeNumber": 1
                    }
                  ]
                }
      }
  },
})
// ksml 
<playlet 
    ks:if="{{playletAble}}" // 判断当前短剧播放器是否可用
    class="my-playlet-class"
    playletId="{{ playletId }}" // 剧目id
    episodeIdList="{{ episodeIdList }}"  //  剧集id 
    playId="{{playId}}"
    extParams="{{extParams}}"
    >
</playlet>
<view ks:else>
	<!-- 原有播放能力 -->
</view>

这里是用uniapp开发的也需要整体进行改造、如下所示,将会在代码中进行备注

Component({
	properties: {
		playletAble: {
			type: Boolean,
			value: true,
		},
		item: {
			type: Object,
			value: {},
			observer: function(newVal) {
				// 当 item 属性变化时调用 getVideo
				if (newVal && newVal.playletId) {
					this.getVideo();
				}
			}
		},
		payplayId: {
			type: String,
			value: {},
			observer: function(payplayId) {
				if (payplayId) {
					this.getpayplayIdFreeList(payplayId)
				}
			}
		},
		buyPlayIdStatus: { // 0 等于切换时已购买需要刷新界面 1表示免费的可直接播放 3表示未解锁的
			type: Number,
			value: {},
		},
	},
	observers: {},
	data: {
		show:false,
		activePlayIndex: 1,
		playletAble: ks.canIUse('playlet'), // 用于判断当前播放是否可用,不可用时,需降级为开发者原有播放能力
		playId: '',// 这个是剧目ID,用户点击剧目进入详情的时候传这个ID过来
		playletId: '',// 这个是剧集ID,传了剧集ID过来之后就会默认播放这一集的视频,比如历史播放到第几集这个用的比较频繁
		episodeIdList: [], // 这个是剧集列表的ID,传递数组过来就行 
		extParams: {
			freeList: [1, 2, 3], // 免费的剧集号,对应上传资源库的episodeNumber
			payedList: [4, 5], // 付费的剧集号,对应上传资源库的episodeNumber
			configList: {
				1: {   
					"like": {
						"liked": false, // 是否已点赞
						"likedCount": 123 // 点赞数
					},
					"collect": {
						"hasCollected": false // 是否已收藏
					},
					"operation": {
						"operationUrl": "http://xxx.com/xx.png", // 运营位图片
						"operationDesc": "运营位" // 运营位描述
					},
					"follow": {
						"avatar": "http://xxx.com/xx.png", // 头像
						"followed": false // 是否已关注
					}
				},
			},
			sourceList: {
				"filingNumber": "备案号",
				"totalEpisodeNumber": "",
				"episodeList": [{
					"coverUrl": "封面链接",
					"introduction": "简介",
					"videoUrl": "http://xxx/xxx.mp4",
					"duration": "600",
					"episodeNumber": 1
				}]
			},

		},

4.用户行为事件

调用bindaction,里边有event事件,操作时会返回对应的event.detail.type ,拿到之后就可以进行对应的操作了

在这里插入图片描述

bindaction(event) {
			const self = this; // 保存 `this` 的引用
			// this.getVideo()
			console.log('行为事件:', event.detail);
			console.log('行为事件:', event.detail.type);
			// console.log('item获取到的数据:', this.data.item);
			console.log('Received item in component1:', this.properties.item);
			if (event.detail.type == 'operation') {
				// 运营位置
				ks.redirectTo({
					url: 'pages/home/bonus/bonus'
				});
			} else if (event.detail.type == 'like') {
				const events = 'like'
				var event = {
					detail:{
						playletId: self.data.episodeIdList[event.detail.episodeNumber - 1],
						episodeNumber: event.detail.episodeNumber
					}
				}
				console.log('暂停event:', event);
				self.bindpause(event)
				self.getState(event.detail.episodeNumber, events)
				
			} else if (event.detail.type == 'collect') {
				const events = 'collect'
				self.getState(event.detail.episodeNumber, events)
			} else if (event.detail.type == 'share') {
				// 转发
			}
		},

4.local-stream.ksml文件参考如下

<view class="centert-lsty"  ks:if="{{show}}" >
	<playlet
		  ks:if="{{playletAble}}" 
		  class="my-playlet-class"
		  playletId="{{ playletId }}" 
		  episodeIdList="{{ episodeIdList }}" 
		  playId="{{ playId }}"
		  extParams="{{ extParams }}"
		  showBottomSafeArea = "{{false}}"
		  showShare = "{{true}}"
		  bind:play="bindplay" 
		  bind:change="bindchange" 
		  bind:action="bindaction" 
		  bind:error="binderror"
		  bind:pause="bindpause" 
		  showBottomSafeArea="{{true}}"
		  objectFit="cover"
	  >
	</playlet>
	<slot></slot>
</view>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人

资源及介绍接上篇 nuget引用以下组件 效果展示&#xff1a; 内存和cpu占有&#xff1a; 代码如下&#xff1a;路径换成自己的模型路径 模型请从上篇文尾下载 internal class Program{private static CancellationTokenSource? cts;private static IChatClient? model;privat…

如何构建多层决策树

构建一颗多层的决策树时&#xff0c;通过递归选择最佳划分特征&#xff08;依据 信息增益 或 基尼系数&#xff09;对数据集进行划分&#xff0c;直到满足停止条件&#xff08;例如叶节点纯度达到要求或树的深度限制&#xff09;。以下是基于 信息增益 和 基尼系数 的递推公式和…

VSCode 使用鼠标滚轮控制字体

一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意&#xff1a;保存哦&#xff01;ctrlS 三、测试 按住ctrl鼠标滚轮&#xff0c;控制字体大小

十年后LabVIEW编程知识是否会过时?

在考虑LabVIEW编程知识在未来十年内的有效性时&#xff0c;我们可以从几个角度进行分析&#xff1a; ​ 1. 技术发展与软件更新 随着技术的快速发展&#xff0c;许多编程工具和平台不断更新和改进&#xff0c;LabVIEW也不例外。十年后&#xff0c;可能会有新的编程语言或平台…

注册中心如何选型?Eureka、Zookeeper、Nacos怎么选

这是小卷对分布式系统架构学习的第9篇文章&#xff0c;第8篇时只回答了注册中心的工作原理的内容&#xff0c;面试官的第二个问题还没回答&#xff0c;今天再来讲讲各个注册中心的原理&#xff0c;以及区别&#xff0c;最后如何进行选型 上一篇文章&#xff1a;如何设计一个注册…

C++ 复习总结记录三

C 复习总结记录三 主要内容 1、类的六个默认成员函数 2、构造函数 3、析构函数 4、拷贝构造函数 5、赋值运算符重载 6、const 成员函数 7、取地址及 const 取地址操作符重载 一 类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中并不是…

【简博士统计学习方法】第1章:4. 模型的评估与选择

4. 模型的评估与选择 4.1 训练误差与测试误差 假如存在样本容量为 N N N的训练集&#xff0c;将训练集送入学习系统可以训练学习得到一个模型&#xff0c;我们将这么模型用决策函数的形式表达&#xff0c;也就是 y f ^ ( x ) y\hat{f}(x) yf^​(x)&#xff0c;关于模型的拟合…

计算机网络 (30)多协议标签交换MPLS

前言 多协议标签交换&#xff08;Multi-Protocol Label Switching&#xff0c;MPLS&#xff09;是一种在开放的通信网上利用标签引导数据高速、高效传输的新技术。 一、基本概念 MPLS是一种第三代网络架构技术&#xff0c;旨在提供高速、可靠的IP骨干网络交换。它通过将IP地址映…

【Java】JVM内存相关笔记

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是依赖用户线程的启动和结束而建立和销毁。 程序计数器&am…

鸿蒙 ArkUI实现地图找房效果

常用的地图找房功能&#xff0c;是在地图上添加区域、商圈、房源等一些自定义 marker&#xff0c;然后配上自己应用的一些筛选逻辑构成&#xff0c;在这里使用鸿蒙 ArkUI 简单实现下怎么添加区域/商圈、房源等 Marker. 1、开启地图服务 在华为开发者官网&#xff0c;注册应用&…

STM32-WWDG/IWDG看门狗

WWDG/IWDG一旦开启不能关闭&#xff0c;可通过选项字节在上电时启动硬件看门狗&#xff0c;看门狗计数只能写入不能读取。看门狗启用时&#xff0c;T6bit必须置1&#xff0c;防止立即重置。 一、原理 独立看门狗-超时复位 窗口看门狗-喂狗&#xff08;重置计数器&#xff0c;…

基于JAVA+SSM的车辆运输管理

基于JAVASSM的车辆运输管理 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈喽兄弟们&#…

【Linux系列】Vim 编辑器中的高效文本编辑技巧:删除操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

win10 VS2019上libtorch库配置过程

win10 VS2019上libtorch库配置过程 0 引言1 获取libtorch2 在VS上配置使用libtorch库3 结语 0 引言 &#x1f4bb;&#x1f4bb;AI一下&#x1f4bb;&#x1f4bb;   libtorch库是一个用于深度学习的C库&#xff0c;是PyTorch的官方C前端。它提供了用于构建和训练深度学习模…

通过gradle发布aar或jar携带sources-jar到maven nexus

找了很久&#xff0c;没有找到满意的。终于找到一个好的办法。 gradle7.x适用。比以前的写法简洁。 发布传统的jar工程 比如okhttp&#xff0c;fastjson等项目&#xff0c;纯java工程。 直接创建新文件publish.gradle: apply plugin: maven-publishProperties properties …

STM32-笔记38-I2C-oled实验

一、什么是I2C&#xff1f; I2C总线&#xff0c;全称Inter-Integrated Circuit&#xff08;互连集成电路&#xff09;&#xff0c;是一种由Philips&#xff08;现NXP半导体&#xff09;公司在1980年代初开发的同步 串行 半双工通信总线。 二、有了串口通信为什么要使用I2C&…

【Linux系列】并发与顺序执行:在 Linux 脚本中的应用与选择

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

“AI 视频图像识别系统,开启智能新视界

咱老百姓现在的生活啊&#xff0c;那是越来越离不开高科技了&#xff0c;就说这 AI 视频图像识别系统&#xff0c;听起来挺高大上&#xff0c;实际上已经悄无声息地融入到咱们日常的方方面面&#xff0c;给咱带来了超多便利。 先讲讲安防领域吧&#xff0c;这可是 AI 图像识别的…

Burpsuite20241102macM1版安装

1、安装jdk11 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew update brew install openjdk11 echo export PATH"/opt/homebrew/opt/openjdk11/bin:$PATH" >> ~/.zshrc source ~/.zshrc j…

NVIDIA在CES 2025上的三大亮点:AI芯片、机器人与自动驾驶、全新游戏显卡

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…