Jellium Desktop插件开发文档:API参考与示例
2026/7/27 16:09:52 网站建设 项目流程

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采用面向对象的插件架构,所有插件都通过类定义实现。核心插件类型包括视频播放器、音频播放器和输入处理插件,分别对应mpvVideoPlayermpvAudioPlayerinputPlugin三大类。

// 插件注册示例 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

调试方法

  1. 将插件文件放入src/web/目录
  2. native-shim.js中注册插件:
    const plugins = ['mpvVideoPlayer', 'mpvAudioPlayer', 'inputPlugin', 'customVideoPlayer'];
  3. 使用开发者工具查看调试信息:
    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.jssrc/web/mpv-audio-player.js,了解完整的插件结构和API使用方法。

【免费下载链接】jellium-desktopAn unofficial desktop client for Jellyfin项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询