Browse Source

demux: add YT-DLP module path argument

pull/188/head
Brandon Li 5 months ago
committed by Steve Lhomme
parent
commit
81cda61816
  1. 16
      modules/demux/ytdl.c
  2. 18
      share/ytdl-extract.py

16
modules/demux/ytdl.c

@ -353,7 +353,16 @@ static int OpenCommon(vlc_object_t *obj)
struct ytdl_json jsdata;
pid_t pid;
const char *argv[] = { path, s->psz_url, NULL };
char *py_path = var_InheritString(obj, "ytdl-path");
const char *argv[5];
size_t i = 0;
argv[i++] = path;
if (py_path != NULL && py_path[0] != '\0') {
argv[i++] = "--py-path"; // add additional path
argv[i++] = py_path;
}
argv[i++] = s->psz_url;
argv[i] = NULL;
jsdata.logger = s->obj.logger;
jsdata.fd = ytdl_popen(&pid, argv);
@ -361,10 +370,11 @@ static int OpenCommon(vlc_object_t *obj)
if (jsdata.fd == -1) {
msg_Dbg(obj, "cannot start %s: %s", path, vlc_strerror_c(errno));
free(path);
free(py_path);
return VLC_EGENERIC;
}
free(path);
free(py_path);
int val = json_parse(&jsdata, &sys->json);
@ -442,7 +452,7 @@ vlc_module_begin()
set_callbacks(OpenFilter, Close)
add_bool("ytdl", true, N_("Enable YT-DL"), NULL)
change_safe()
add_directory("ytdl-path", NULL, N_("YT-DL Module Path"), NULL)
add_submodule()
set_capability("access", 0)
add_shortcut("ytdl")

18
share/ytdl-extract.py

@ -1,6 +1,6 @@
#! /usr/bin/python3
#
# Copyright (C) 2020 Rémi Denis-Courmont
# Copyright (C) 2020 Rémi Denis-Courmont, Brandon Li
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
@ -17,8 +17,20 @@
# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
import sys
import os
import json
import urllib.parse
import argparse
# Parse first so we can set sys.path
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('--py-path', dest='py_path')
parser.add_argument('url')
args, _ = parser.parse_known_args()
if args.py_path:
sys.path.insert(0, args.py_path)
import yt_dlp
class logger(object):
@ -63,13 +75,13 @@ def url_process(ie_url):
# Rebuild the original IE entry
entry = { }
for p in urllib.parse.parse_qsl(url[9:]):
for p in urllib.parse.parse_qsl(ie_url[9:]): # <-- use parameter
entry[p[0]] = p[1]
infos = dl.process_ie_result(entry, download=False)
print(json.dumps(infos))
url = sys.argv[1]
url = args.url
if url.startswith('ytdl:///?'):
url_process(url)

Loading…
Cancel
Save