Jellium Desktop插件开发文档:API参考与示例
【免费下载链接】jellium-desktopAn unofficial desktop client for Jellyfin项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop
Jellium Desktop是一款非官方的Jellyfin桌面客户端,它通过插件系统提供了丰富的媒体播放功能扩展。本文将详细介绍Jellium Desktop的插件开发API,帮助开发者快速构建自己的媒体播放插件。
插件基础架构
Jellium Desktop采用面向对象的插件架构,所有插件都通过类定义实现。核心插件类型包括视频播放器、音频播放器和输入处理插件,分别对应mpvVideoPlayer、mpvAudioPlayer和inputPlugin三大类。
// 插件注册示例 window._mpvVideoPlayer = mpvVideoPlayer; window._mpvAudioPlayer = mpvAudioPlayer; window._inputPlugin = inputPlugin;插件系统通过native-shim.js统一管理所有可用插件:
const plugins = ['mpvVideoPlayer', 'mpvAudioPlayer', 'inputPlugin']; for (const plugin of plugins) { window[plugin] = () => window['_' + plugin]; }核心API参考
播放器基类 (MpvPlayerBase)
所有媒体播放器插件都继承自MpvPlayerBase基类,该类提供了统一的播放控制接口:
| 方法名 | 描述 | 参数 | 返回值 |
|---|---|---|---|
play(options) | 开始播放媒体 | options- 播放参数 | Promise |
stop(destroyPlayer) | 停止播放 | destroyPlayer- 是否销毁播放器 | Promise |
setPlaybackRate(value) | 设置播放速率 | value- 速率值(如1.0) | void |
setAudioStreamIndex(index) | 切换音频流 | index- 音频流索引 | void |
setSubtitleStreamIndex(index) | 切换字幕流 | index- 字幕流索引 | void |
视频播放器API
mpvVideoPlayer类实现了完整的视频播放功能,关键API包括:
class mpvVideoPlayer extends window.MpvPlayerBase { constructor(args) { super(args); this.id = 'mpvvideoplayer'; this.name = 'MPV Video Player'; // 初始化播放器实例 window._mpvVideoPlayerInstance = this; } // 创建媒体播放界面 createMediaElement(options) { // 创建视频容器和控制界面 } // 设置播放源 async setCurrentSrc(options) { // 解析媒体流并初始化播放 } // 设置字幕偏移 setSubtitleOffset(offset) { window.api.player.setSubtitleDelay(Math.round(offset * 1000)); } // 设置画面比例 setAspectRatio(value) { window.api.player.setAspectMode(value); } }原生API接口
插件通过window.api对象与底层原生功能交互,主要接口包括:
window.api.player- 媒体播放控制接口setVideoRectangle(x, y, width, height)- 设置视频渲染区域setAspectMode(mode)- 设置画面比例模式setSubtitleDelay(delay)- 设置字幕延迟(毫秒)setAudioStream(index)- 选择音频流setSubtitleStream(index)- 选择字幕流
插件开发示例
简单视频插件实现
以下是一个基本的视频播放器插件实现框架:
(function() { class customVideoPlayer extends window.MpvPlayerBase { constructor(args) { super(args); this.id = 'customvideoplayer'; this.name = 'Custom Video Player'; this.logTag = 'CustomVideo'; // 初始化事件处理器 this.handlers.onPlaying = () => { console.log('[CustomVideo] Media started playing'); this._emitPlaying(); }; this.handlers.onTimeUpdate = (time) => { this._currentTime = time; this.events.trigger(this, 'timeupdate'); }; } // 实现播放方法 async play(options) { console.debug(`[${this.logTag}] Playing media with options:`, options); await this.createMediaElement(options); return this.setCurrentSrc(options); } // 创建播放界面 createMediaElement(options) { // 创建自定义播放界面元素 const container = document.createElement('div'); container.className = 'custom-player-container'; // 添加到DOM document.body.appendChild(container); return Promise.resolve(); } // 支持的功能 static getSupportedFeatures() { return ['PlaybackRate', 'SetAspectRatio', 'CustomFeature']; } } // 注册插件 window._customVideoPlayer = customVideoPlayer; console.debug('[Media] Custom video player plugin installed'); })();事件处理
插件通过事件系统与主应用交互,常用事件包括:
// 触发事件 this.events.trigger(this, 'timeupdate'); this.events.trigger(this, 'error', [{ type: 'mediadecodeerror' }]); // 注册事件处理器 this.handlers.onPlaying = () => { /* 处理播放开始 */ }; this.handlers.onTimeUpdate = (time) => { /* 处理时间更新 */ }; this.handlers.onEnded = () => { /* 处理播放结束 */ }; this.handlers.onError = (error) => { /* 处理错误 */ };插件安装与调试
插件文件结构
Jellium Desktop插件通常放置在src/web/目录下,遵循以下命名约定:
- 视频播放器插件:
[name]-video-player.js - 音频播放器插件:
[name]-audio-player.js - 输入处理插件:
[name]-input-plugin.js
调试方法
- 将插件文件放入
src/web/目录 - 在
native-shim.js中注册插件:const plugins = ['mpvVideoPlayer', 'mpvAudioPlayer', 'inputPlugin', 'customVideoPlayer']; - 使用开发者工具查看调试信息:
console.debug('[Media] Custom video player plugin installed');
高级功能
自定义画面渲染
插件可以通过window.api.player接口控制视频渲染参数:
// 设置视频渲染区域 window.api.player.setVideoRectangle(0, 0, 1920, 1080); // 设置画面比例模式 window.api.player.setAspectMode('cover'); // 覆盖模式 window.api.player.setAspectMode('fill'); // 填充模式 window.api.player.setAspectMode('auto'); // 自动模式字幕控制
高级字幕控制功能示例:
// 设置字幕偏移 this.setSubtitleOffset(0.5); // 提前0.5秒 // 重置字幕偏移 this.resetSubtitleOffset(); // 启用/禁用字幕显示 window.api.player.setSubtitleStream(MpvPlayerBase.TRACK_DISABLE); // 禁用字幕 window.api.player.setSubtitleStream(1); // 启用第一字幕流总结
Jellium Desktop提供了灵活强大的插件系统,使开发者能够扩展媒体播放功能。通过继承MpvPlayerBase基类并实现核心API,开发者可以快速创建自定义播放器插件。插件系统通过window.api对象与底层原生功能交互,支持视频渲染控制、音频/字幕流切换等高级功能。
要开始开发插件,建议参考现有插件实现,如src/web/mpv-video-player.js和src/web/mpv-audio-player.js,了解完整的插件结构和API使用方法。
【免费下载链接】jellium-desktopAn unofficial desktop client for Jellyfin项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考