使用 yt-dlp.exe 在 VLC 中播放 Youtube(无广告)——Firefox 中的上下文菜单

问题描述 投票:0回答:1

我想先说一下,我已经问了很多问题,并咨询了developer.mozilla.org,甚至尝试了openAI

这是我的第一个项目,请耐心等待。

我已经使用了一个简单的bat脚本来通过yt-dlp.exe程序播放URL。所以我测试了“命令”,因此它在作为后续批次执行时确实有效

@echo off
:link
set "url="
set /p url="link: "
"C:\\Program Files\\VideoLAN\\VLC\\yt-dlp.exe" --get-url -f b "%url%" | "C:\\Program Files\\VideoLAN\\VLC\\vlc.exe" --meta-title "%url%" --fullscreen --no-video-title

但是我尝试编写的扩展无法将其发送到批处理脚本

它应该做什么:

鼠标右键菜单内的上下文菜单,允许将 YouTube 站点内的 URL 发送到批处理脚本。批处理脚本将执行在 background.js start yt-dlp.exe 中生成的“命令”,并将生成的流通过管道传输到 VLC。

它有什么作用

当然我写在这里是因为它不起作用。在调试器中,我在 background.js 第 12 行之后收到一条错误消息 --

let port = browser.runtime.connectNative("vlchost");

错误:尝试在断开连接的端口上发布消息

系统的特殊之处在于在编辑器中打开 vlchost.json 文件(我的 json 默认应用程序是 VS Code)

这是该项目的所有部分

本机消息传递的注册表项

[HKEY_CURRENT_USER\SOFTWARE\Mozilla\NativeMessagingHosts\vlchost]
@="C:\\Users\\me\\ytdlpvlc\\vlchost.json"
[HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\NativeMessagingHosts\vlchost]
@="C:\\Users\\me\\ytdlpvlc\\vlchost.json"

清单

C:\Users\me\ytdlpvlc\manifest.json

{
  "manifest_version": 2,
  "name": "YTDLPVLC",
  "version": "0.8",
  "description": "YouTube ytdlp VLC",
  "applications": {
    "gecko": {
      "id": "vlchost@localhost",
      "strict_min_version": "50.0"
    }
  },
  "background": {
    "scripts": [
      "background.js"
    ],
    "persistent": false
  },
  "permissions": [
    "contextMenus",
    "nativeMessaging",
    "tabs"
  ]
}

JS后台脚本

它应该使上下文菜单可用,并将带有从 YT 复制的适当 URL 的“命令”发送到与 VLC 位于同一目录中的 yt-dlp.exe

C:\Users\me\ytdlpvlc ackground.js

browser.contextMenus.create({
  id: "ytdlpvlc",
  title: "play in VLC",
  contexts: ["link"],
  targetUrlPatterns: ["*://*.youtube.com/watch*"]
});

browser.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === "ytdlpvlc") {
    let videoUrl = info.linkUrl;
    let command = `"C:\\Program Files\\VideoLAN\\VLC\\yt-dlp.exe" --get-url -f b "${videoUrl}" | "C:\\Program Files\\VideoLAN\\VLC\\vlc.exe" --meta-title "${videoUrl}" --fullscreen --no-video-title fd://0`;
    let port = browser.runtime.connectNative("vlchost");
    port.postMessage(command);
    port.onMessage.addListener(response => {
      console.log(response);
    });
  }
});

主机清单

C:\Users\me\ytdlpvlc lchost.json

{
  "name": "yt_dlp_vlc_host",
  "description": "Native messaging host for YT-DLP-VLC extension",
  "path": "C:\\Users\\me\\ytdlpvlc\\vlchost.bat",
  "type": "stdio",
  "allowed_extensions": ["vlchost@localhost"]
}

.bat脚本

这个脚本应该从background.js获取“命令”并执行它,以便URL可以传递到yt-dlp.exe并通过管道传输到VLC

C:\Users\me\ytdlpvlc lchost.bat

@echo off
set command=%1
echo Command to execute: %command%
%command%
echo Done

请有人至少为我指明解决方案的方向——即使这个解决方案将是对该项目的彻底检修。我可以想象我的延期可以通过多种方式解决。我只知道 yt-dlp.exe 并且已经习惯了。如果此信息有帮助的话,我的计算机上安装了 Python :)

提前非常感谢

javascript firefox-addon vlc chrome-native-messaging yt-dlp
1个回答
0
投票

我不知道如何帮助你,但我知道一个项目可以做类似的事情,但使用 mpv,也许会有所帮助:https://github.com/woodruffw/ff2mpv

© www.soinside.com 2019 - 2024. All rights reserved.