diff --git a/registry/lib/plugins/video/download/mpv-output-playlist/MpvConfig.vue b/registry/lib/plugins/video/download/mpv-output-playlist/MpvConfig.vue new file mode 100644 index 000000000..813d7479e --- /dev/null +++ b/registry/lib/plugins/video/download/mpv-output-playlist/MpvConfig.vue @@ -0,0 +1,65 @@ + + + diff --git a/registry/lib/plugins/video/download/mpv-output-playlist/index.ts b/registry/lib/plugins/video/download/mpv-output-playlist/index.ts new file mode 100644 index 000000000..8f5306b30 --- /dev/null +++ b/registry/lib/plugins/video/download/mpv-output-playlist/index.ts @@ -0,0 +1,15 @@ +import { PluginMetadata } from '@/plugins/plugin' +import { DownloadVideoOutput } from '../../../../components/video/download/types' +import { mpvPlaylist } from './mpv-playlist' + +export const plugin: PluginMetadata = { + name: 'downloadVideo.outputs.mpv-playlist', + displayName: '下载视频 - MPV 播放支持(列表)', + // FIXME: plugin 也需要 author 字段 + description: 'by [@wuliic]\n\n为下载视频增加 MPV 输出支持,支持列表播放,配置方式请参考 [playwithmpv](https://github.com/videoanywhere/playwithmpv)', + setup: ({ addData }) => { + addData('downloadVideo.outputs', (outputs: DownloadVideoOutput[]) => { + outputs.push(mpvPlaylist) + }) + }, +} diff --git a/registry/lib/plugins/video/download/mpv-output-playlist/mpv-playlist.ts b/registry/lib/plugins/video/download/mpv-output-playlist/mpv-playlist.ts new file mode 100644 index 000000000..78fffa46f --- /dev/null +++ b/registry/lib/plugins/video/download/mpv-output-playlist/mpv-playlist.ts @@ -0,0 +1,34 @@ +import { postJson } from '@/core/ajax' +import { Toast } from '@/core/toast' +import { UserAgent } from '@/core/utils/constants' +import { logError } from '@/core/utils/log' +import { DownloadVideoOutput } from '../../../../components/video/download/types' + +export const mpvPlaylist: DownloadVideoOutput = { + name: 'mpv-playlist', + displayName: 'MPV播放', + description: '格式选择flv,千万不能选音画分离的dash。建议把mpv.exe所在目录加进环境变量。', + runAction: async (action, instance) => { + const { infos } = action + const { mpvInfo } = instance + const videoUrls = infos.flatMap(it => it.titledFragments).map(f => f.url) + const videoTitles = infos.flatMap(it => it.titledFragments).map(f => f.title) + // console.log(videoTitles) + const data = { + dir: mpvInfo.dir, + referer: 'https://www.bilibili.com/', + 'user-agent': UserAgent, + urls: videoUrls, + titles: videoTitles, + } + const url = `http://${mpvInfo.host}:${mpvInfo.port}` + const result = await postJson(url, data) + const resp = JSON.parse(result) + if (resp.success) { + Toast.success(`成功发送了请求: ${resp.message}`, 'MPV播放', 3000) + } else { + logError(resp.message) + } + }, + component: () => import('./MpvConfig.vue').then(m => m.default), +}