我想先说一下,我已经问了很多问题,并咨询了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"
]
}
它应该使上下文菜单可用,并将带有从 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"]
}
这个脚本应该从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 :)
提前非常感谢
我不知道如何帮助你,但我知道一个项目可以做类似的事情,但使用 mpv,也许会有所帮助:https://github.com/woodruffw/ff2mpv