您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
调用本地的播放器来播放 Emby Web 中的视频。
// ==UserScript== // @name Emby Local Player // @namespace https://gf.qytechs.cn/zh-CN/scripts/419804-emby-local-player // @version 0.1.2 // @description 调用本地的播放器来播放 Emby Web 中的视频。 // @author Cybit // @grant none // @match none // ==/UserScript== /* jshint esversion:8 */ function init(pluginManager, dialog) { class PotPlayer { constructor() { this.id = 'potplayer' this.type = 'mediaplayer' this.name = 'Pot Player' function dummy() {} for (const k of ['volume', 'isMuted', 'paused', 'currentTime', 'currentSrc']) { this[k] = dummy; } } canPlayMediaType() { return true; } getPlayerUrl(url) { if (navigator.userAgent.includes('Macintosh')) { return `iina://open?url=${encodeURIComponent(url)}`; } return `potplayer://${encodeURI(url)}`; } async play(item, options) { console.log(item, options); const playerUrl = this.getPlayerUrl(item.url); window.open(playerUrl, '_self'); if (item.textTracks.length === 0) { return; } const mediaStreams = item.mediaSource.MediaStreams; const html = item.textTracks.map(track => { return `<p><a href="${track.url}" target="_blank">${mediaStreams[track.index].DisplayTitle}</a></p>` }).join('\n'); dialog({ html, title: 'Subtitles', buttons: [ { name: 'Close', type: 'cancel', }, ], }); } async stop() {} async getDeviceProfile(item, options) { const subFormats = ['ass', 'srt']; return { SubtitleProfiles: subFormats.map(type => ( { "Format": type, "Method": "External" } )), }; } } pluginManager.register(new PotPlayer()); console.log('Pot Player plugin registered'); } (async function() { 'use strict'; while (!window.require || !window.ConnectionManager) { await new Promise(resolve => setTimeout(resolve, 200)); } window.require(['pluginManager', 'dialog'], init); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址