|
|
本帖最后由 ColorStripes 于 2026-1-22 16:24 编辑
OECT最近在折腾群辉的jellyfin 我发现手机APP和客户端的页面没有手势功能和硬件解码变绿的问题 操作非常不好用 自行编码jellyfin-web进行功能更新。
硬件解码变绿的问题
不知道什么原因 我试了很多版本 现在latest版本指向的10.11.X版本 这个版本对于RK3566芯片来说解码HDR都变绿 下载了一堆镜像只有10.10.7版本是不变绿的
从官方文件里jellyfin/jellyfin - Docker Image,找到10.10.7的版本,映射好自己的硬件解码目录就可以了。
客户端手势操作
下面以添加状态栏+0.25 x1 -0.25按键为例:
从 https://github.com/jellyfin/jellyfin-web 下载对应jellyfin版本的源代码,我的是10.10.7。
修改src\controllers\playback\video\index.html
- <div class="osdTimeText">
- <span class="endsAtText"></span>
- </div>
-
- <!-- 增加代码开始 -->
- <button is="paper-icon-button-light" class="btnVideoSpeedDec paper-icon-button-light" title="降低 0.25倍速度播放">
- - 0.25 X
- </button>
-
- <button is="paper-icon-button-light" class="btnVideoSpeedDefault paper-icon-button-light" title="正常速度播放">
- 1 X
- </button>
- <button is="paper-icon-button-light" class="btnVideoSpeedInc paper-icon-button-light" title="增加 0.25倍速度播放">
- + 0.25 X
- </button>
-
- <!-- 增加代码结束 -->
- <button is="emby-ratingbutton" type="button" class="btnUserRating hide autoSize paper-icon-button-light" title="${Rate}">
- <span class="xlargePaperIconButton material-icons favorite" aria-hidden="true"></span>
- </button>
复制代码
绑定按钮事件: src\controllers\playback\video\index.js-
- // 顶部增加弹出提示的引用--------------------------
- import toast from '../../../components/toast/toast';
-
-
-
-
- view.querySelector('.btnVideoOsdSettings').addEventListener('click', onSettingsButtonClick);
-
- // 增加代码开始
- view.querySelector('.btnVideoSpeedDec').addEventListener('click', onVideoSpeedDec);
- view.querySelector('.btnVideoSpeedDefault').addEventListener('click', onVideoSpeedDefault);
- view.querySelector('.btnVideoSpeedInc').addEventListener('click', onVideoSpeedInc);
-
- const container = document.querySelector('#videoOsdPage');
- //增加触摸,鼠标按下+2倍数
- container.addEventListener('mousedown', onVideoSpeedDec2); //鼠标按下
- container.addEventListener('touchstart', onVideoSpeedDec2); //手指触摸屏幕
-
- //增加触摸,鼠标松开恢复
- container.addEventListener('mouseup', onVideoSpeedDec1Default); //鼠标松开
- container.addEventListener('touchend', onVideoSpeedDec1Default); //手指离开屏幕
-
-
- // 增加代码结束
-
- view.addEventListener('viewhide', function () {
- headerElement.classList.remove('hide');
- });
-
-
-
- // 增加事件函数--------------------------
-
- function nowPlayingDurationTextClick()
- ·············
- }
-
- //增加代码开始
-
- // 播放速度降低 0.25
- function onVideoSpeedDec() {
- const video = document.querySelector('video');
- if (!video) return;
-
- let currentSpeed = video.playbackRate; // 读取当前速度
- currentSpeed -= 0.25;
- currentSpeed = Math.max(0.25, currentSpeed); // 限制最小速度,比如不低于 0.25
- video.playbackRate = currentSpeed; // 应用新速度
- toast(`${globalize.translate('PlaybackRate')}: ${currentSpeed.toFixed(2)} 倍`);
- }
-
- // 恢复正常速度(1x)
- function onVideoSpeedDefault() {
- const video = document.querySelector('video');
- if (!video) return;
- video.playbackRate = 1.0;
- toast(`${globalize.translate('PlaybackRate')}: 1 倍`);
- }
-
- // 播放速度增加 0.25
- function onVideoSpeedInc() {
- const video = document.querySelector('video');
- if (!video) return;
-
- let currentSpeed = video.playbackRate;
- currentSpeed += 0.25;
-
- currentSpeed = Math.min(10.0, currentSpeed); // 限制最大速度
- video.playbackRate = currentSpeed;
- toast(`${globalize.translate('PlaybackRate')}: ${currentSpeed.toFixed(2)} 倍`);
- }
-
-
-
- let bfSpeed=1; //当前播放速度
- let speedHoldTimer = null; // 存储 setTimeout 的句柄
- let isSpeedApplied = false; // 标记是否已经应用了倍速
- // 播放速度+2倍速度
- function onVideoSpeedDec2(e) {
- const video = document.querySelector('video');
- if (!video) return;
- if (video.paused) return; //暂停状态不触发
- if (e.target.closest('.videoOsdBottom')) return; // 点击底部状态栏的元素,不触发
-
- // 清除之前的定时器
- if (speedHoldTimer) {
- clearTimeout(speedHoldTimer);
- speedHoldTimer = null;
- }
- isSpeedApplied = false;
- bfSpeed=video.playbackRate; //记录一下之前的播放速度
-
- // 设置 500ms 后触发倍速
- speedHoldTimer = setTimeout(() => {
- const newSpeed = bfSpeed + 2;
- video.playbackRate = newSpeed;
- isSpeedApplied = true;
- toast(`${globalize.translate('PlaybackRate')}: ${newSpeed.toFixed(2)} 倍`);
- }, 500);
-
- }
-
- // 播放速度+2倍速度 恢复之前的速度
- function onVideoSpeedDec2Default(e) {
- const video = document.querySelector('video');
- if (!video) return;
- if (video.paused) return;
- if (e.target.closest('.videoOsdBottom')) return;
-
- // 清除定时器,防止松开后延迟触发
- if (speedHoldTimer) {
- clearTimeout(speedHoldTimer);
- speedHoldTimer = null;
- }
-
- // 只有在已经应用了倍速的情况下才恢复
- if (isSpeedApplied) {
- video.playbackRate = bfSpeed;
- toast(`${globalize.translate('PlaybackRate')}: ${bfSpeed.toFixed(2)} 倍`);
- }
-
- // 重置状态
- isSpeedApplied = false;
-
- }
-
- //增加代码结束
- function onSettingsButtonClick()
复制代码 手动编译源码
在jellyfin-web10.10.7/jellyfin10.10.7文件夹下面运行,我下载的时候是有魔法网络- export http_proxy=http://127.0.0.1:7890
- export https_proxy=http://127.0.0.1:7890
- npm install --registry=https://registry.npmmirror.com
- npm run build:production
复制代码
docker设置:
修改自己的映射目录 - /volume1/docker/jellyfin/jellyfin-web:/jellyfin/jellyfin-web这个目录必须要有,然后将刚刚编译的文件放到你映射的目录里jellyfin-web里,启动docker就可以了
- version: '3.5'
- services:
- jellyfinny:
- image: jellyfin/jellyfin:10.10.7
- container_name: jellyfin
- privileged: true
- ports:
- - "8098:8096"
- volumes:
- - /volume1/docker/jellyfin/config:/config
- - /volume1/docker/jellyfin/cache:/cache
- - /volume1/docker/jellyfin/tmp:/tmp
- - /volume1/docker/jellyfin/jellyfin-web:/jellyfin/jellyfin-web
- - /volumeUSB2/usbshare:/usb2
- - /volumeUSB3/usbshare:/usb3
- - /volumeUSB4/usbshare:/usb4
- - /volumeUSB5/usbshare:/usb5
- - /volumeUSB6/usbshare:/usb6
- devices:
- - /dev/dri:/dev/dri
- - /dev/dma_heap:/dev/dma_heap
- - /dev/mali0:/dev/mali0
- - /dev/rga:/dev/rga
- - /dev/mpp_service:/dev/mpp_service
- - /dev/iep:/dev/iep
- - /dev/mpp-service:/dev/mpp-service
- - /dev/vpu_service:/dev/vpu_service
- - /dev/vpu-service:/dev/vpu-service
- - /dev/hevc_service:/dev/hevc_service
- - /dev/hevc-service:/dev/hevc-service
- - /dev/rkvdec:/dev/rkvdec
- - /dev/rkvenc:/dev/rkvenc
- - /dev/vepu:/dev/vepu
- - /dev/h265e:/dev/h265e
- restart: unless-stopped
复制代码 如果的源码不会修改:
可以用我修改好的附件,替换src\controllers\playback\video\index.html 和 src\controllers\playback\video\index.js ,然后编译
首先我的代码 功能:
1.左右滑动屏幕调整进度,只显示进度条(预览图不会消失,需要点两下屏幕收回状态栏就可以消失)
2.右边调整音量,但手机内核实际音量未变(可能是系统原因)
3.左边滑动调整亮度
4.长按屏幕四倍加速
5.双击暂停播放
6.进度图变成B站小电视,还有拖动进度条眼睛朝向拖动方向,点击眼睛变成竖线动画
运行效果图片可以看下面
本人非CSS专业方向,欢迎各位根据代码自行修改,也欢迎提出宝贵的意见修复1和2里的bug问题或提供文件。
感谢Gemini pro大学生特供版提供的代码帮助
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|