Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request]: 支持弹幕匹配加载 #51

Open
BakerBunker opened this issue Apr 27, 2024 · 11 comments
Open

[Feature Request]: 支持弹幕匹配加载 #51

BakerBunker opened this issue Apr 27, 2024 · 11 comments
Labels
enhancement New feature or request

Comments

@BakerBunker
Copy link

Current application version

0.4.7

Feature Request

参考现有的一些Emby弹幕实现,为播放器添加弹幕支持

References

@BakerBunker BakerBunker changed the title [Feature Request]: 支持弹幕匹配 [Feature Request]: 支持弹幕匹配加载 Apr 27, 2024
@tsukinaha
Copy link
Owner

@BakerBunker 桌面端实现并不容易 但也许将来会做吧

@BakerBunker
Copy link
Author

这里有个用cpp写的弹幕->ass的代码,可能比较好bind到rust上
https://github.com/HFrost0/danmakuC/blob/main/danmakuC/csrc/ass.cpp
这样是不是就可以

  1. 从弹弹play api搜到episodeID, 拿到弹幕
  2. 转换成ass文件,写到临时文件
  3. mpv加载文件播放

@tsukinaha
Copy link
Owner

tsukinaha commented Apr 27, 2024

@BakerBunker 后续不会使用裸 mpv 窗口 并且可能会引入 gst
如果你有能力在 gtkwindow 下实现 nested subcompositor 加入弹幕渲染层,欢迎随时 pr

@BakerBunker
Copy link
Author

@tsukinaha 抱歉,这个确实超出能力范围了😂

@baize0rzj2
Copy link

大佬,更新了0.49版本发现了一些问题,软件调用mpv播放器会缺失一些功能,比如没有全屏按键,没有进度条显示。
屏幕截图 2024-05-02 132218

@ZBound
Copy link
Contributor

ZBound commented May 2, 2024

@baize0rzj2 把mpv文件夹完全删除,重新用新版本的覆盖

@tsukinaha
Copy link
Owner

@baize0rzj2 请不要占用别人的 issue

@baize0rzj2
Copy link

@baize0rzj2 把mpv文件夹完全删除,重新用新版本的覆盖

感谢,已经解决了

@baize0rzj2
Copy link

@baize0rzj2 请不要占用别人的 issue

好的,下次会注意

@tsukinaha
Copy link
Owner

说一下我的想法
现在的渲染画面由 GtkGLArea 呈现

因为后续我想使用 wid 在 x11 表面上渲染,所以不考虑在这个 GLArea 中合成弹幕。

在 MPV 中以字幕的方式挂载弹幕我觉得可操作空间有点小,所以我想在 Overlay 中再渲染一层 GLArea。

主要有以下两个问题

  1. 弹幕引擎没有现成的工具,需要从头手写
  2. 渲染视频内容的 GLArea 需要找到一种方法让他以匹配合成器帧率更新内容

目前其他功能都已经基本实现了,所以我想接下来考虑弹幕的问题。如果有想法的话请随意提出 PR。

@lu0se
Copy link

lu0se commented Sep 21, 2024

@tsukinaha 抱歉,这个确实超出能力范围了😂

可以试试我的mpv danmaku插件
,按d根据视频标题来对弹幕进行匹配,需要对tsukimi项目进行一些修改,保证mpv的media-title设置正确,下面是修改:

diff --git a/src/ui/mpv/mpvglarea.rs b/src/ui/mpv/mpvglarea.rs
index c430854..18a9f6a 100644
--- a/src/ui/mpv/mpvglarea.rs
+++ b/src/ui/mpv/mpvglarea.rs
@@ -116,6 +116,10 @@ impl MPVGLArea {
         mpv.pause(false);
     }
 
+    pub fn set_media_title(&self, title: &str) {
+        self.imp().mpv.set_media_title(title)
+    }
+
     pub fn add_sub(&self, url: &str) {
         self.imp().mpv.add_sub(url)
     }
diff --git a/src/ui/mpv/page.rs b/src/ui/mpv/page.rs
index 9361af8..edabd71 100644
--- a/src/ui/mpv/page.rs
+++ b/src/ui/mpv/page.rs
@@ -265,6 +265,7 @@ impl MPVPage {
                 imp.suburl
                     .replace(suburi.map(|suburi| EMBY_CLIENT.get_streaming_url(&suburi)));
                 imp.video.play(&url, percentage);
+                imp.video.set_media_title(&name);
                 imp.back.replace(back);
                 obj.handle_callback(BackType::Start);
             }
diff --git a/src/ui/mpv/tsukimi_mpv.rs b/src/ui/mpv/tsukimi_mpv.rs
index 2f130c7..ab39425 100644
--- a/src/ui/mpv/tsukimi_mpv.rs
+++ b/src/ui/mpv/tsukimi_mpv.rs
@@ -164,6 +164,10 @@ impl TsukimiMPV {
         self.ctx.replace(Some(ctx));
     }
 
+    pub fn set_media_title(&self, value: &str) {
+        self.set_property("options/force-media-title", value);
+    }
+
     pub fn set_position(&self, value: f64) {
         self.set_property("time-pos", value);
     }

这是效果
图片

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

5 participants