- // ==UserScript==
- // @name HTML5播放器自定义配置
- // @name:en HTML5 player enhanced script custom configuration
- // @namespace https://github.com/xxxily/h5player
- // @homepage https://github.com/xxxily/h5player
- // @version 0.0.1
- // @description HTML5播放器自定义配置,按需定制自己的功能
- // @description:en HTML5 video player enhanced script custom configuration
- // @author ankvps
- // @icon https://cdn.jsdelivr.net/gh/xxxily/h5player@master/logo.png
- // @match *://*/*
- // @grant unsafeWindow
- // @run-at document-start
- // @license GPL
- // ==/UserScript==
-
- /* 自定义配置 */
- const customConfiguration = {
- media: {
- autoPlay: false,
- playbackRate: 1,
- volume: 1,
-
- /* 是否允许存储播放进度 */
- allowRestorePlayProgress: {
-
- },
- /* 视频播放进度映射表 */
- progress: {}
- },
- hotkeys: [
- {
- desc: '网页全屏',
- key: 'shift+enter',
- command: 'setWebFullScreen',
- /* 如需禁用快捷键,将disabled设为true */
- disabled: false
- },
- {
- desc: '全屏',
- key: 'enter',
- command: 'setFullScreen'
- },
- {
- desc: '切换画中画模式',
- key: 'shift+p',
- command: 'togglePictureInPicture'
- },
- {
- desc: '视频截图',
- key: 'shift+s',
- command: 'capture'
- },
- {
- desc: '启用或禁止自动恢复播放进度功能',
- key: 'shift+r',
- command: 'capture'
- },
- {
- desc: '垂直镜像翻转',
- key: 'shift+m',
- command: 'setMirror',
- args: [true]
- },
- {
- desc: '水平镜像翻转',
- key: 'm',
- command: 'setMirror'
- },
- {
- desc: '下载音视频文件(实验性功能)',
- key: 'shift+d',
- command: 'mediaDownload'
- },
- {
- desc: '缩小视频画面 -0.05',
- key: 'shift+x',
- command: 'setScaleDown'
- },
- {
- desc: '放大视频画面 +0.05',
- key: 'shift+c',
- command: 'setScaleUp'
- },
- {
- desc: '恢复视频画面',
- key: 'shift+z',
- command: 'resetTransform'
- },
- {
- desc: '画面向右移动10px',
- key: 'shift+arrowright',
- command: 'setTranslateRight'
- },
- {
- desc: '画面向左移动10px',
- key: 'shift+arrowleft',
- command: 'setTranslateLeft'
- },
- {
- desc: '画面向上移动10px',
- key: 'shift+arrowup',
- command: 'setTranslateUp'
- },
- {
- desc: '画面向下移动10px',
- key: 'shift+arrowdown',
- command: 'setTranslateDown'
- },
- {
- desc: '前进5秒',
- key: 'arrowright',
- command: 'setCurrentTimeUp'
- },
- {
- desc: '后退5秒',
- key: 'arrowleft',
- command: 'setCurrentTimeDown'
- },
- {
- desc: '前进30秒',
- key: 'ctrl+arrowright',
- command: 'setCurrentTimeUp',
- args: [30]
- },
- {
- desc: '后退30秒',
- key: 'ctrl+arrowleft',
- command: 'setCurrentTimeDown',
- args: [-30]
- },
- {
- desc: '音量升高 5%',
- key: 'arrowup',
- command: 'setVolumeUp',
- args: [0.05]
- },
- {
- desc: '音量降低 5%',
- key: 'arrowdown',
- command: 'setVolumeDown',
- args: [-0.05]
- },
- {
- desc: '音量升高 20%',
- key: 'ctrl+arrowup',
- command: 'setVolumeUp',
- args: [0.2]
- },
- {
- desc: '音量降低 20%',
- key: 'ctrl+arrowdown',
- command: 'setVolumeDown',
- args: [-0.2]
- },
- {
- desc: '切换暂停/播放',
- key: 'space',
- command: 'switchPlayStatus'
- },
- {
- desc: '减速播放 -0.1',
- key: 'x',
- command: 'setPlaybackRateDown'
- },
- {
- desc: '加速播放 +0.1',
- key: 'c',
- command: 'setPlaybackRateUp'
- },
- {
- desc: '正常速度播放',
- key: 'z',
- command: 'resetPlaybackRate'
- },
- {
- desc: '设置1x的播放速度',
- key: 'Digit1',
- command: 'setPlaybackRatePlus',
- args: 1
- },
- {
- desc: '设置1x的播放速度',
- key: 'Numpad1',
- command: 'setPlaybackRatePlus',
- args: 1
- },
- {
- desc: '设置2x的播放速度',
- key: 'Digit2',
- command: 'setPlaybackRatePlus',
- args: 2
- },
- {
- desc: '设置2x的播放速度',
- key: 'Numpad2',
- command: 'setPlaybackRatePlus',
- args: 2
- },
- {
- desc: '设置3x的播放速度',
- key: 'Digit3',
- command: 'setPlaybackRatePlus',
- args: 3
- },
- {
- desc: '设置3x的播放速度',
- key: 'Numpad3',
- command: 'setPlaybackRatePlus',
- args: 3
- },
- {
- desc: '设置4x的播放速度',
- key: 'Digit4',
- command: 'setPlaybackRatePlus',
- args: 4
- },
- {
- desc: '设置4x的播放速度',
- key: 'Numpad4',
- command: 'setPlaybackRatePlus',
- args: 4
- },
- {
- desc: '下一帧',
- key: 'F',
- command: 'freezeFrame',
- args: 1
- },
- {
- desc: '上一帧',
- key: 'D',
- command: 'freezeFrame',
- args: -1
- },
- {
- desc: '增加亮度',
- key: 'E',
- command: 'setBrightnessUp'
- },
- {
- desc: '减少亮度',
- key: 'W',
- command: 'setBrightnessDown'
- },
- {
- desc: '增加对比度',
- key: 'T',
- command: 'setContrastUp'
- },
- {
- desc: '减少对比度',
- key: 'R',
- command: 'setContrastDown'
- },
- {
- desc: '增加饱和度',
- key: 'U',
- command: 'setSaturationUp'
- },
- {
- desc: '减少饱和度',
- key: 'Y',
- command: 'setSaturationDown'
- },
- {
- desc: '增加色相',
- key: 'O',
- command: 'setHueUp'
- },
- {
- desc: '减少色相',
- key: 'I',
- command: 'setHueDown'
- },
- {
- desc: '模糊增加 1 px',
- key: 'K',
- command: 'setBlurUp'
- },
- {
- desc: '模糊减少 1 px',
- key: 'J',
- command: 'setBlurDown'
- },
- {
- desc: '图像复位',
- key: 'Q',
- command: 'resetFilterAndTransform'
- },
- {
- desc: '画面旋转 90 度',
- key: 'S',
- command: 'setRotate'
- },
- {
- desc: '播放下一集',
- key: 'N',
- command: 'setNextVideo'
- },
- {
- desc: '执行JS脚本',
- key: 'ctrl+j ctrl+s',
- command: () => {
- alert('自定义JS脚本-demo')
- },
- when: ''
- }
- ],
- enhance: {
- /* 不禁用默认的调速逻辑,则在多个视频切换时,速度很容易被重置,所以该选项默认开启 */
- blockSetPlaybackRate: true,
-
- blockSetCurrentTime: false,
- blockSetVolume: false,
- allowExperimentFeatures: false
- },
- debug: false
- }
-
- /**
- * 任务配置中心 Task Control Center
- * 用于配置所有无法进行通用处理的任务,如不同网站的全屏方式不一样,必须调用网站本身的全屏逻辑,才能确保字幕、弹幕等正常工作
- **/
- const customTaskControlCenter = {
- /**
- * 配置示例
- * 父级键名对应的是一级域名,
- * 子级键名对应的相关功能名称,键值对应的该功能要触发的点击选择器或者要调用的相关函数
- * 所有子级的键值都支持使用选择器触发或函数调用
- * 配置了子级的则使用子级配置逻辑进行操作,否则使用默认逻辑
- * 注意:include,exclude这两个子级键名除外,这两个是用来进行url范围匹配的
- * */
- 'demo.demo': {
- fullScreen: '.fullscreen-btn',
- exitFullScreen: '.exit-fullscreen-btn',
- webFullScreen: function () {},
- exitWebFullScreen: '.exit-fullscreen-btn',
- autoPlay: '.player-start-btn',
- pause: '.player-pause',
- play: '.player-play',
- switchPlayStatus: '.player-play',
- playbackRate: function () {},
- currentTime: function () {},
- addCurrentTime: '.add-currenttime',
- subtractCurrentTime: '.subtract-currenttime',
- // 自定义快捷键的执行方式,如果是组合键,必须是 ctrl-->shift-->alt 这样的顺序,没有可以忽略,键名必须全小写
- shortcuts: {
- /* 注册(不可用)要执行自定义回调操作的快捷键 */
- register: [
- 'ctrl+shift+alt+c',
- 'ctrl+shift+c',
- 'ctrl+alt+c',
- 'ctrl+c',
- 'c'
- ],
- /* 自定义快捷键的回调操作 */
- callback: function (h5Player, taskConf, data) {
- const { event, player } = data
- console.log(event, player)
- }
- },
- /* 当前域名下需包含的路径信息,默认整个域名下所有路径可用 必须是正则 */
- include: /^.*/,
- /* 当前域名下需排除的路径信息,默认不排除任何路径 必须是正则 */
- exclude: /\t/
- },
- 'netflix.com': {
- // 停止在netflix下使用插件的所有功能
- // disable: true,
- fullScreen: 'button.button-nfplayerFullscreen',
- addCurrentTime: 'button.button-nfplayerFastForward',
- subtractCurrentTime: 'button.button-nfplayerBackTen',
- /**
- * 使用netflix自身的调速,因为目前插件没法解决调速导致的服务中断问题
- * https://github.com/xxxily/h5player/issues/234
- * https://github.com/xxxily/h5player/issues/317
- * https://github.com/xxxily/h5player/issues/381
- * https://github.com/xxxily/h5player/issues/179
- * https://github.com/xxxily/h5player/issues/147
- */
- playbackRate: true,
- shortcuts: {
- /**
- * TODO
- * netflix 一些用户习惯使用F键进行全屏,所以此处屏蔽掉f键的下一帧功能
- * 后续开放自定义配置能力后,让用户自行决定是否屏蔽
- */
- register: [
- 'f'
- ],
- callback: function (h5Player, taskConf, data) {
- return true
- }
- }
- }
- }
-
- /* 注册(不可用)自定义配置信息 */
- const pageWin = window.unsafeWindow
- if (pageWin) {
- const configuration = { customConfiguration, customTaskControlCenter }
- pageWin.__h5PlayerCustomConfiguration__ = configuration
- pageWin.__setH5PlayerCustomConfiguration__ instanceof Function && pageWin.__setH5PlayerCustomConfiguration__(configuration, 'External')
- }