uniapp 基于xgplayer(西瓜视频) + renderjs开发,实现APP视频播放
背景:在uniapp中因原生video组件功能有限,选择引入
xgplayer
库来展示视频播放等功能。并且APP端无法操作dom
,所以使用了renderjs
。
其他的不多说,主要列举一下renderjs中需要注意的点:
1、使用:在标签后,添加<script module="xgPlayerModule" lang="renderjs"></script >
,然后有关操作dom的代码都写在script 标签里面。其中module的值是自定义
的,后续会用这个值来调用renderjs的方法。
2、普通 script 标签是逻辑层
,带renderjs的 script 标签是视图层
。
3、逻辑层向视图层传值:在 template 某元素上添加 :属性名=“vue 变量”:change:属性名=“renderjs 模块名.方法名”
(其中 vue 变量 为 Vue 组件中的某个数据, renderjs 模块名 为之前定义的 module 属性的值,当 vue 变量 值改变时会触发 renderjs模块名.方法名 的方法)。例如:
<view :iosTimes="iosTimes" :change:iosTimes="xgPlayerModule.changeTimes"></view><script module="xgPlayerModule" lang="renderjs">export default {data(){return {renderIosTimes: null}},methods: {changeTimes() { // 当检测到iosTimes变化时,触发此方法,重新赋值后,保存在renderjs里面的renderIosTimes 变量中,因为后面renderjs里面的其他方法要使用这个值。this.renderIosTimes = this.iosTimes}}}
</script>
4、**视图层向逻辑层传参:**在 template 元素的事件绑定中使用 @事件=“renderjs 模块名.方法名”
,通过该方式触发 renderjs 中的方法,然后在这个方法中可以使用 this.$ownerinstance.callmethod('vue 组件中的方法名', 参数)
来调用普通 Vue 组件中的方法并传值。
this.$ownerInstance.callMethod('playerMethods')
接下来就是在renderjs中,通过xgplayer创建视频,并且完成交互
准备:
npm install xgplayer --save
以下是完整的代码案例:
video.vue中调用xgplayer组件
<xg-player :data-idkey="modId" ref="video" :videoConfig="videoConfig" ></xg-player>import xgPlayer from '@/components/player/xgplayer';
<script>export default {data(){return {videoConfig: {videoUrl: '', // 播放地址lastPlayTime: '' // 上次播放时间} }},methods: {changeTimes() { // 当检测到iosTimes变化时,触发此方法,重新赋值后,保存在renderjs里面的renderIosTimes 变量中,因为后面renderjs里面的其他方法要使用这个值。this.renderIosTimes = this.iosTimes}},onHide: function() { // 退出应用时调用this.$refs['video'].beforeLeave() // 调用子组件的方法,暂停视频播放}}
</script>
xgplayer.vue组件中:
<template><view><!-- 视频 --><view:id='videoId'class="mse-box":style="customStyle"v-if="type === 'VOD'":conEnd="conEnd" :change:conEnd="xgPlayerModule.initVideo"></view><view :iosTimes="iosTimes" :change:iosTimes="xgPlayerModule.changeTimes"></view><view :modOpenTrial="modOpenTrial" :change:modOpenTrial="xgPlayerModule.changeModOpenTrial"></view><view :playOrPauseStatus="playOrPauseStatus" :change:playOrPauseStatus="xgPlayerModule.playOrPauseVideoRenderjs"></view></view>
</template><!-- 逻辑层 -->
<script>
export default {name: 'xgPlayerHls',data: function() {return {config: {id: this.videoId,url: '',fluid: true,playbackRate: [0.75, 1, 1.5, 2],defaultPlaybackRate: 1,definitionActive: 'click',poster: '',volume: 1,autoplay: false, // 手动点击播放,节省用户流量playsinline: true,lastPlayTime: 0, //视频起播时间(单位:秒)lastPlayTimeHideDelay: 3,enableVideoDbltouch: true,rotateFullscreen: true,// rotate: {// innerRotate: true,// clockwise: false// },fitVideoSize: 'auto'},inFullscreen: false,inLandscape: false,conEnd: null,playOrPauseStatus: 'pause'};},components: {},computed: {// h5通过监听屏幕角度去写入样式customStyle() {const that = this;if (that.inFullscreen && that.inLandscape) {return {height: '100vh !important',minWidth: '100%',width: '100% !important',left: '0%',transform: 'rotate(0deg)'};} else if (that.inLandscape) {return {width: '100% !important',height: '400rpx !important'};} else {return {width: '100%',height: '400rpx'};}}},props: {rootStyle: {type: Object,default() {return {};}},iosTimes: {type: Boolean,default() {return false;}},videoConfig: {type: Object,default() {return {videoUrl: '', lastPlayTime: 0};}},modOpenTrial: {type: Boolean,default() {return true;}},modDrag: {type: Boolean,default() {return true;}},fastForward: {type: Boolean,default() {return true;}},type: {type: String,default() {return 'VOD';}},videoId: {type: String,default() {return 'mse';}}},methods: {beforeLeave() { // 离开页面暂停视频播放this.playOrPauseStatus = 'pause'},playVideo() {this.playOrPauseStatus = 'play'},pauseVideo() {this.playOrPauseStatus = 'pause'},handleOrientation() {const orientation = window.orientation;console.log('orientation=当设备的方向发生变化时触发的事件===', orientation);switch (orientation) {case 0:// 竖屏this.inLandscape = false;break;case 90:// 左横屏this.inLandscape = true;break;case -90:// 右横屏this.inLandscape = true;break;case 180:// 倒立break;default:// 未知break;}},fullScreenMe() { // 进入全屏this.inFullscreen = true;this.$emit('on-goLandscape', 'ON');},exitFullScreenMe() { // 退出全屏this.inFullscreen = false;this.$emit('on-goLandscape', 'OFF');},playTimeUpdate(currentTime) { // timeupdate播放中// console.log('播放中=============');this.$emit('playerVideo', currentTime);},openTrialMe() {// 弹框有问题this.$dialog.alert({width: '80%',confirmButtonColor: '#00aeef',confirmButtonText: this.$t('mall_10'),message: this.$t('see_end')});},playerMethods() { // 播放console.log('播放============');this.playOrPauseStatus = 'play'this.$emit('videoPlay')},playerPauseMethods() { // 暂停console.log('暂停============');this.playOrPauseStatus = 'pause'this.$emit('videoPause')},init() {if (this.videoConfig.videoUrl) {if (this.type === 'VOD') {this.config.id = this.videoId;this.config.lastPlayTime = this.videoConfig.lastPlayTime;this.config.url = this.videoConfig.videoUrl;this.config.autoplay =this.videoConfig.autoplaythis.config.ignores = this.fastForward ? [] : ['progress'];if (this.videoConfig.duration) {this.config.duration = this.videoConfig.duration;}// m3u8 格式播放if (this.videoConfig.videoUrl.indexOf('m3u8') !== -1) {this.config.preloadTime = 15; // 预加载时间15sthis.config.minCachedTime = 5; // 最小缓存时间// iOS手机不兼容此项属性,故作此判断// 使用 uni.getSystemInfoSync() 获取系统信息const systemInfo = uni.getSystemInfoSync();const platform = systemInfo.platform;if (platform === 'android') {this.config.useHls = true;}}this.conEnd = this.config; // config赋值完成}}}},mounted() {// 是否有权限观看完整视频, true: 能 , false: 禁止拖拽; 限制 10%;this.config.disableProgress = !this.modOpenTrial;//如果禁止拖动,后台设置的false,前端设置值得是true.如果允许拖动,后台设置的true,前端设置值得是false.this.config.allowSeekPlayed = !this.modDrag;// #ifdef APP-PLUS// 监听事件 当设备的方向发生变化时触发的事件plus.globalEvent.addEventListener('orientationchange', this.handleOrientation);// #endif// #ifndef APP-PLUSwindow.addEventListener('orientationchange', this.handleOrientation);// #endifthis.init();},watch: {modOpenTrial(val) {// 是否有权限观看完整视频, true: 能 , false: 禁止拖拽; 限制 10%;this.config.disableProgress = !this.val;}}
};
</script><!-- 视图层 -->
<script module="xgPlayerModule" lang="renderjs">import xgPlayer from 'xgplayer';import HlsJsPlayer from 'xgplayer-hls.js';export default {data(){return {player: null,renderIosTimes: null,renderModOpenTrial: null}},mounted() {},beforeDestroy() {this.player && typeof this.player.destroy === 'function' && this.player.destroy();},methods: {playOrPauseVideoRenderjs() { // 控制视频播放和暂停console.log('暂停视频 或者 播放', this.playOrPauseStatus);if (this.player) {if (this.playOrPauseStatus === 'play') {this.player.play();} else {this.player.pause();}}},changeTimes() {this.renderIosTimes = this.iosTimes},changeModOpenTrial() {this.renderModOpenTrial = this.modOpenTrial},initVideo(newVal,old,ownerInstance,instance) {let that = thisif (that.conEnd && that.conEnd.id && that.conEnd.url && !that.player) {console.log('视图层的initVideo方法========');if (that.player) {that.player.destroy();}if (that.conEnd.url.indexOf('m3u8') !== -1) {that.player = new HlsJsPlayer(that.conEnd);} else { // 不是m3u8that.player = new xgPlayer(that.conEnd);if (that.renderIosTimes) {if (that.player) {that.player.start(that.conEnd.url);that.player.play();}}}console.log('that.player=======', that.player);// 播放that.player.on('play', function () {// 调用逻辑层方法that.$ownerInstance.callMethod('playerMethods')})// 暂停that.player.on('pause', function () {// 调用逻辑层方法that.$ownerInstance.callMethod('playerPauseMethods')})// 播放中that.player.on('timeupdate', function(resPlayer) {// 是否有权限观看完整视频, true: 能 , false: 禁止拖拽; 限制 10%;if (!that.renderModOpenTrial && (resPlayer.currentTime / resPlayer.duration) >= 0.1) {resPlayer.pause();// resPlayer.currentTime = 0;that.$ownerInstance.callMethod('openTrialMe')}// 调用逻辑层方法that.$ownerInstance.callMethod('playTimeUpdate', resPlayer.currentTime)});// 进入全屏that.player.on('getRotateFullscreen', function(value) {if (document.getElementsByClassName('water-turn')[0]) {document.getElementsByClassName('water-turn')[0].style.transform = 'rotate(90deg)';}that.$ownerInstance.callMethod('fullScreenMe')});// 退出全屏that.player.on('exitRotateFullscreen', function(value) {if (document.getElementsByClassName('water-turn')[0]) {document.getElementsByClassName('water-turn')[0].style.transform = 'rotate(0deg)';}that.$ownerInstance.callMethod('exitFullScreenMe')});}}}}
</script>
相关文章:
uniapp 基于xgplayer(西瓜视频) + renderjs开发,实现APP视频播放
背景:在uniapp中因原生video组件功能有限,选择引入xgplayer库来展示视频播放等功能。并且APP端无法操作dom,所以使用了renderjs。 其他的不多说,主要列举一下renderjs中需要注意的点: 1、使用:在标签后&…...
[1111].集成开发工具Pycharm安装与使用
所有博客大纲 后端学习大纲 Python大纲 1.下载: 官方下载地址 2.安装: 1.双击exe文件,然后下一步选择安装目录 2.选择桌面快捷方式及安装: 3.安装完成 3.启动: 4.设置: 4.1.设置运行时环境:…...
【玩转OCR】 | 腾讯云智能结构化OCR在多场景的实际应用与体验
文章目录 引言产品简介产品功能产品优势 API调用与场景实践图像增强API调用实例发票API调用实例其他场景 结语相关链接 引言 在数字化信息处理的时代,如何高效、精准地提取和结构化各类文档数据成为了企业和政府部门的重要需求。尤其是在面对海量票据、证件、表单和…...
红狮金业:2024年尾声,黄金市场需要关注的消息面
随着2024年的尾声渐近,全球金融市场在美联储的年度最后一次降息决策中迎来了新的波澜。上周,美联储宣布降息,而美联储主席鲍威尔随后的发言更是在市场上掀起了巨大波动。他透露,美联储计划在明年放缓降息步伐,可能仅实…...
使用BCrypt进行密码加密
1. 添加依赖: 在pom.xml文件中添加Spring Security依赖,以使用BCryptPasswordEncoder。 <!-- Spring Security 依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-secu…...
《智启新材热学性能优化之路:人工智能的神奇力量》
在当今科技飞速发展的时代,材料科学与人工智能的融合正成为创新的前沿阵地。其中,利用人工智能优化材料的热学性能,为众多领域的突破带来了新的曙光,从航空航天的高效热防护到电子设备的散热管理,其影响深远且广泛&…...
IIC驱动EEPROM
代码参考正点原子 i2c_dri:主要是三段式状态机的编写 module iic_dri#(parameter SLAVE_ADDR 7b1010000 , //EEPROM从机地址parameter CLK_FREQ 26d50_000_000, //模块输入的时钟频率parameter I2C_FREQ 18d250_000 //IIC_SCL的时钟频率)( …...
目标检测——基于yolov8和pyqt的螺栓松动检测系统
目录 1.项目克隆和环境配置1.1 我这里使用的是v8.0.6版本1.2 项目代码结构介绍 2.数据集介绍2.1 数据集采集2.2采集结果介绍 3.模型训练4.pyqt界面设计4.1 界面内容介绍4.2 界面实现 5.操作中的逻辑实现5.1 图片检测5.2 文件夹检测5.3 视频检测和摄像头检测 6. 效果展示 1.项目…...
JVM系列(十三) -常用调优工具介绍
最近对 JVM 技术知识进行了重新整理,再次献上 JVM系列文章合集索引,感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…...
酷睿i7和i5哪个好?i5和i7的区别介绍
在英特尔酷睿处理器家族中,i7与i5作为面向不同用户群体的主流产品,各自承载着不同的性能定位与使用价值。在面对“酷睿i7和i5哪个好”的问题时,答案并非一概而论,而是取决于具体的应用需求、预算考量以及对性能与效率的期待。本文…...
实现用户登录系统的前后端开发
**一、**实验名称 实现用户登录系统的前后端开发。 **二、**参考资料 Web开发技术第一章课件。 **三、**实验目的 1.练习前端基本技术的使用。 2.练习使用Servlet/JSP开发简单后端程序。 3.练习使用Tomcat发布Web应用。 4.练习使用Spring Boot开发简单的后端程序。 **…...
Log4j1.27配置日志输出级别不起效
起因:构建独立版本debezuim使用时,日志一直打印debug信息。 原因:包冲突问题,进行排包操作。 参考log4j日志级别配置完成后不生效 系统一直打印debug日志_log4j不起作用-CSDN博客 1、application.properties logging.configc…...
一、后端到摄像头(监控摄像头IOT)
前言: 开发流程从 后端到摄像头 打通是第一步,那么我们可以着手设计 后端实现 的具体步骤,确保能够稳定地接收和处理来自摄像头的视频流,并提供后续的功能扩展,如视频流转发、存储和控制。 1. 后端系统架构设计 在开始…...
H3C MPLS跨域optionB
实验拓扑 实验需求 如图,VPN1 和 VPN2 分别通过运营商 MPLS VPN 连接各自分支机构按照图示配置 IP 地址,VPN1 和 VPN2 连接同一个 PE 设备的私网 IP 网段存在地址复用,使用多 VRF 技术来防止 IP 冲突AS 100 和 AS 200 内部的公共网络中各自运行 OSPF 使 AS 内各设备的 Loo…...
微信小程序中momentjs无法切换中文问题处理
微信小程序中momentj.s无法切换中文问题处理. 表现为 使用 locale(“zh-cn”)无效。 处理方法 # 1、先删除 miniprogram_npm\moment\index.js # 2、将 node_modules\moment\min\moment-with-locales.min.js 复制到 miniprogram_npm\moment下 并重命名为index.js # 3、修改mi…...
Linux零基础速成篇一(理论+实操)
前言:本教程适合Linux零基础学习,也适合Linux期末考试的小伙伴,从头到尾理论与实操相结合,让你快速对Linux进行了解和掌握。 一、Linux概述 为什么要学习Linux操作系统? 完全免费-开源 任何用户均可下载使用 安全…...
【087】基于51单片机智能宠物喂食器【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统LCD1602液晶显示MY1680语音播放模块DS1302时钟芯片SG90舵机AT24C02存储芯片LED灯按键设置。 1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片; 2、系统采用DS1302时钟芯片实现对日期时间计时并通过LCD1602液晶显…...
全局流量管理:提升用户体验与保障服务稳定性
全局流量管理的工作原理 全局流量管理主要依赖于 DNS(域名系统)技术,通过将全球用户的访问请求引导至离他们最近的服务器或数据中心,极大减少了访问延迟和带宽负载,从而提升了用户体验。同时,GTM 还结合健…...
达梦数据守护搭建
主备库初始化 ./dminit path/dmdata/data db_nameDM01 instance_nameDMSVR01 port_num5236 page_size16 extent_size32 log_size500 case_sensitive1 SYSDBA_PWDDM01SYSDBA ./dminit path/dmdata/data db_nameDM02 instance_nameDMSVR02 port_num5236 page_size16 extent_size3…...
【C++】容器适配器全知道
亲爱的读者朋友们😃,此文开启知识盛宴与思想碰撞🎉。 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 目录 一、前言 二、什么是适配器 (一)现实生…...
企业资源规划系统(ERP)服务器上线项目实施指南
企业资源规划系统(ERP)服务器上线项目实施指南 项目背景 在当今竞争激烈的商业环境中,企业资源规划系统(ERP)已成为企业提升内部管理效率和响应市场变化的重要工具。为了实现业务流程的整合和优化,公司决…...
Kubernetes(k8s)离线部署DolphinScheduler3.2.2
1.环境准备 1.1 集群规划 本次安装环境为:3台k8s现有的postgreSql数据库zookeeper服务 1.2 下载及介绍 DolphinScheduler-3.2.2官网:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2 官网安装文档:https://dolphinscheduler.apach…...
嵌入式linux驱动框架 从0到1编写设备驱动 i2c_driver i2c_client
一、编写最简单的IIC驱动框架 在之前的文章中,我们已经深入探讨了I2C通信的基本原理、硬件架构以及时序等基础知识。现在,我们将进入一个更加实际和深入的层面,构建一个完整的I2C驱动程序,并阐述驱动框架的设计。这将帮助你不仅能…...
小程序canvas画环形百分比进度图
组件封装 component/canvas-ring目录下 canvas-ring.js <canvas style"width:{{canvasWidth}}px;height:{{canvasWidth}}px; margin:0 auto;position:relative" type"2d" id"myCanvas"><view class"circle-bar" style&quo…...
面试经验分享 | 北京渗透测试岗位
更多大厂面试经验的视频经验分享看主页 目录: 所面试的公司:安全大厂 所在城市:北京 面试职位:渗透测试工程师 面试方式:腾讯会议线上面试线下面试 面试过程: 面试官的问题: 1、说一下XSS有哪…...
安卓 SystemServer 启动流程
目录 引言 Android系统服务启动顺序 zygote fork SystemServer 进程 SystemServer启动流程 1、SystemServer.main() 2、SystemServer.run() 3、初始化系统上下文 4、创建系统服务管理 5、启动系统各种服务 总结 引言 开机启动时 PowerManagerService 调用 AudioSer…...
opencv存图速度测试
以下测试的图片,均为5488x3672分辨率的三通道彩色图。 分别使用opencv和halcon存图,测试速度,存100次取平均值,结果如下: image size:5488 3672 opencv jpg save time 0.12809s opencv bmp save time 0.02197s hal…...
[ffmpeg]编译 libx264
步骤 下载 libx264 git clone https://code.videolan.org/videolan/x264.git cd x264环境搭建 然后在开始菜单中找到并打开 x64 Native Tools Command Prompt for VS 2019 : 打开 msys2_shell.cmd -use-full-path 这时会打开 MSYS 的新窗口,先把一些汇…...
常见API
1.API 1.1API概述 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要…...
vscode写python,遇到问题:ModuleNotFoundError: No module named ‘pillow‘(已解决 避坑)
1 问题: ModuleNotFoundError: No module named pillow 2 原因: 原因1:安装Pillow的pip命令所处的python版本与vscode调用的python解释器版本不同。 如: 原因2:虽然用的是pillow,但是写代码的时候只能用…...
【mysql】id主键列乱了之后,重新排序(可根据日期顺序)
一、ID中断不连续的,重新设置为连续的ID alter table table_name drop id; alter table table_name add id int not null first; alter table table_name modify column id int not null auto_increment, add primary key(id); select * from table_name order by …...
SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测
SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测(多输入单输出) 目录 SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测(多输入单输出)分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matl…...
原点安全再次入选信通院 2024 大数据“星河”案例
近日,中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织开展的 2024 大数据“星河(Galaxy)”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…...
Hadoop
HDFS一键启动/停止 start-dfs.sh stop-dfs.sh 单进程启动/停止 $HADOOP_HOME/bin/hdfs,此程序也可以用以单独控制所在机器的进程的启停 hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)#例如启动namenode,去到需要启动的服…...
【Ambari】使用 Knox 进行 LDAP 身份认证
目录 一、knox介绍 二、Ambari配置LDAP认证 三、验证Knox网关 3.1YARNUI 3.2 HDFSUI 3.3 HDFS RestFULL 3.4 SparkHistoryserver 3.5 HBASEUI 一、knox介绍 Apache Knox网关是一个用于与Apache Hadoop部署的REST api和ui交互的应用程序网关。Knox网关为所有与Apache Ha…...
计算机网络习题( 第3章 物理层 第4章 数据链路层 )
第3章 物理层 一、单选题 1、下列选项中,不属于物理层接口规范定义范畴的是( )。 A、 接口形状 B、 引脚功能 C、 传输媒体 D、 信号电平 正确答案: C 2、在物理层接口特性中,用于描述完成每种功能的事件发…...
Windows系统中mt6.dll文件缺失是什么原因?mt6.dll文件缺失详解与修复指南
mt6.dll文件的作用 mt6.dll是一个动态链接库文件,它通常与特定的软件或游戏相关联,用于支持这些程序中的某些功能。虽然它并非Windows系统的核心文件,但对于依赖于它的程序来说,mt6.dll的缺失可能导致程序无法正常运行或启动。 …...
homebrew,gem,cocoapod 换源,以及安装依赖
安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 再按照成功提示配置环境变量 ruby 更新ruby到最新 brew install ruby 如果安装了会自动升级 安装完成后根据提示配置环境变量 再执行命令使其生效 s…...
uni-app开发商品详情页面实现
目录 一:功能描述 二:功能实现 一:功能描述 商品详情页主要展示商品的图片,基础信息,详细描述信息,以及销量,库存信息等。 首先在顶部以轮播图形式展示图片信息,下面展示商品价格和商品名称和描述信息,然后显示商品的关键卖点信息,最后展示商品详情信息。 二:功…...
mvn install:install-file jar 打入本地仓库
安装指定文件到本地仓库命令:mvn http://install:install-file -DgroupId : 设置上传到仓库的包名 -DartifactId : 设置该包所属的模块名 -Dversion1.0.0 : 设置该包的版本号 -Dpackagingjar : 设置该包的类型(很显然jar包) -Dfile : 设置该jar包文件所在的路径…...
亚式期权定价模型Turnbull-Wakeman进行delta对冲
Turnbull-Wakeman Model是一种用于定价和对冲亚式期权的数学模型。该模型由David Turnbull和Keith Wakeman在1990年提出,用于解决亚式期权的定价问题。 亚式期权是一种路径依赖类型的期权,其期权价格与标的资产价格某个期间内的平均值有关,假…...
Qt之CAN设计(十三)
Qt开发 系列文章 - CAN(十三) 目录 前言 一、CAN 二、实现方式 1.创建类 2.相关功能函数 3.用户使用 4.效果演示 5.拓展应用-实时刷新 总结 前言 Qt框架中并没有提供关于CAN接口的相关模块,需要用户自己根据CAN接口硬件模块&#…...
windows10/windows11运行ps1脚本报错的解决方法,签名错误解决方法
使用win10/win11运行ps1脚本时报错,提示“禁止运行此脚本”,错误如图所示: 此问题通常是由于windows默认的策略导致,解决方法是重新设置权限策略。 1. 设置windows配置 1). 使用管理员权限运行powershell 搜索power…...
在 Mac M2 上安装 PyTorch 并启用 MPS 加速的详细教程与性能对比
1. 安装torch 在官网上可以查看安装教程,Start Locally | PyTorch 作者安装了目前最新的torch版本2.5.1,需要提前安装python3.9及以上版本,作者python版本是python3.11最新版本 使用conda安装torch,在终端进入要安装的环境&…...
vulnhub matrix-breakout靶场
1.搭建靶机 这样就是装好了 获取靶机IP nmap -O 192.168.47.129/24 2.信息收集 dirb http://192.168.47.128 dirb 首页 81端口一个登录页面 gobuster dir -u http://192.168.152.154 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html gra…...
Hive SQL 窗口函数 `ROW_NUMBER() ` 案例分析
一文彻底搞懂 ROW_NUMBER() 和 PARTITION BY 1. 引言 在处理大规模数据集时,Hive SQL 提供了强大的窗口函数(Window Function),如 ROW_NUMBER(),用于为结果集中的每一行分配唯一的行号。当与 PARTITION BY 和 ORDER …...
windows C++ TCP客户端
demo有一下功能 1、心跳包 2、断开重连 3、非阻塞 4、接受数据单独线程处理 #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> #include <string> #include <process.h> // 用于Windows下的线程相…...
【C++】初识C++之C语言加入光荣的进化(上)
写在前面 本篇笔记作为C的开篇笔记,主要是讲解C关键字(C98)连带一点点(C11)的知识。掌握的C新语法新特性,当然C是兼容C的,我们学习C的那套在C中也是受用。 文章目录 写在前面一、命名空间域1.1、命名空间域的定义与使用1.2、命名空间域的细节…...
Linux文件目录 --- 文件时间戳、atime、mtime、ctime、指定格式查看
三、文件时间戳 1. atime 文件最近被访问时间,是在读取文件或者执行文件时更改的,如果只cd进入一个目录然后cd . .不会引起atime的改变,要是使用ll命令进行查看后,再cd . . 离开就不同了。 2. mtime 文件最近内容修改时间,在目录中有文件…...
网页博客风格未完
实现类似的博客风格: 学习前端开发基础: HTML & CSS:掌握网页结构和样式设计的基础知识。JavaScript:增强网页的互动性和动态效果。响应式设计:确保您的博客在不同设备上都有良好的显示效果。 使用开源模板&#x…...