File streamlink.patch of Package streamlink-6
diff -U 3 -H -d -r -N -- a/src/streamlink/session/options.py b/src/streamlink/session/options.py
--- a/src/streamlink/session/options.py 2024-09-06 17:23:12.000000000 +0200
+++ b/src/streamlink/session/options.py 2024-09-13 17:00:36.555307389 +0200
@@ -258,6 +258,22 @@
- ``str | None``
- ``None``
- Set the output format of muxed streams, e.g. ``"matroska"``
+ * - ffmpeg-dkey
+ - ``str | None``
+ - ``None``
+ - key
+ * - ffmpeg-dkeys
+ - ``str | None``
+ - ``None``
+ - key
+ * - ffmpeg-video-filter
+ - ``str | None``
+ - ``None``
+ - The video filter to use if transcoding video when muxing streams
+ * - ffmpeg-audio-filter
+ - ``str | None``
+ - ``None``
+ - The audio filter to use if transcoding video when muxing streams
* - ffmpeg-video-transcode
- ``str | None``
- ``None``
@@ -335,6 +351,10 @@
"ffmpeg-verbose-path": None,
"ffmpeg-loglevel": None,
"ffmpeg-fout": None,
+ "ffmpeg-dkey": None,
+ "ffmpeg-dkeys": None,
+ "ffmpeg-video-filter": None,
+ "ffmpeg-audio-filter": None,
"ffmpeg-video-transcode": None,
"ffmpeg-audio-transcode": None,
"ffmpeg-copyts": False,
diff -U 3 -H -d -r -N -- a/src/streamlink/stream/dash/dash.py b/src/streamlink/stream/dash/dash.py
--- a/src/streamlink/stream/dash/dash.py 2024-09-06 17:23:12.000000000 +0200
+++ b/src/streamlink/stream/dash/dash.py 2024-06-17 22:55:33.000000000 +0200
@@ -293,11 +293,11 @@
# Search for suitable video and audio representations
for aset in mpd.periods[period].adaptationSets:
- if aset.contentProtections:
- raise PluginError(f"{source} is protected by DRM")
+ # if aset.contentProtections:
+ # raise PluginError(f"{source} is protected by DRM")
for rep in aset.representations:
- if rep.contentProtections:
- raise PluginError(f"{source} is protected by DRM")
+ # if rep.contentProtections:
+ # raise PluginError(f"{source} is protected by DRM")
if rep.mimeType.startswith("video"):
video.append(rep)
elif rep.mimeType.startswith("audio"): # pragma: no branch
diff -U 3 -H -d -r -N -- a/src/streamlink/stream/ffmpegmux.py b/src/streamlink/stream/ffmpegmux.py
--- a/src/streamlink/stream/ffmpegmux.py 2024-09-06 17:23:12.000000000 +0200
+++ b/src/streamlink/stream/ffmpegmux.py 2024-09-13 17:09:28.507090327 +0200
@@ -176,13 +176,24 @@
loglevel = session.options.get("ffmpeg-loglevel") or options.pop("loglevel", self.DEFAULT_LOGLEVEL)
ofmt = session.options.get("ffmpeg-fout") or options.pop("format", self.DEFAULT_OUTPUT_FORMAT)
outpath = options.pop("outpath", "pipe:1")
- videocodec = session.options.get("ffmpeg-video-transcode") or options.pop("vcodec", self.DEFAULT_VIDEO_CODEC)
- audiocodec = session.options.get("ffmpeg-audio-transcode") or options.pop("acodec", self.DEFAULT_AUDIO_CODEC)
+ videofilter = session.options.get("ffmpeg-video-filter")
+ if videofilter:
+ videocodec = session.options.get("ffmpeg-video-transcode")
+ else:
+ videocodec = session.options.get("ffmpeg-video-transcode") or options.pop("vcodec", self.DEFAULT_VIDEO_CODEC)
+ audiofilter = session.options.get("ffmpeg-audio-filter")
+ if audiofilter:
+ audiocodec = session.options.get("ffmpeg-audio-transcode")
+ else:
+ audiocodec = session.options.get("ffmpeg-audio-transcode") or options.pop("acodec", self.DEFAULT_AUDIO_CODEC)
metadata = options.pop("metadata", {})
maps = options.pop("maps", [])
copyts = session.options.get("ffmpeg-copyts") or options.pop("copyts", False)
start_at_zero = session.options.get("ffmpeg-start-at-zero") or options.pop("start_at_zero", False)
+ dkey = session.options.get("ffmpeg-dkey") or options.pop("dkey", False)
+ dkeys = session.options.get("ffmpeg-dkeys") or options.pop("dkey", False)
+
self._cmd = [
self.command(session),
"-y",
@@ -192,10 +203,21 @@
]
for np in self.pipes:
+ self._cmd.extend(['-thread_queue_size', '32768'])
+ if dkey:
+ self._cmd.extend(['-decryption_key', dkey])
+ if dkeys:
+ self._cmd.extend(['-decryption_keys', dkeys])
self._cmd.extend(["-i", str(np.path)])
- self._cmd.extend(["-c:v", videocodec])
- self._cmd.extend(["-c:a", audiocodec])
+ if videofilter:
+ self._cmd.extend(["-vf", videofilter])
+ if videocodec:
+ self._cmd.extend(["-c:v", videocodec])
+ if audiofilter:
+ self._cmd.extend(["-af", audiofilter])
+ if audiocodec:
+ self._cmd.extend(["-c:a", audiocodec])
for m in maps:
self._cmd.extend(["-map", str(m)])
diff -U 3 -H -d -r -N -- a/src/streamlink_cli/argparser.py b/src/streamlink_cli/argparser.py
--- a/src/streamlink_cli/argparser.py 2024-09-06 17:23:12.000000000 +0200
+++ b/src/streamlink_cli/argparser.py 2024-09-13 17:12:46.156511723 +0200
@@ -1180,6 +1180,34 @@
""",
)
transport_ffmpeg.add_argument(
+ "--ffmpeg-dkey",
+ type=str,
+ metavar="DKEY",
+ help="""
+ Set the decryption key
+ """
+ )
+ transport_ffmpeg.add_argument(
+ "--ffmpeg-dkeys",
+ type=str,
+ metavar="DKEYS",
+ help="""
+ Set the decryption keys with id
+ """
+ )
+ transport_ffmpeg.add_argument(
+ "--ffmpeg-video-filter",
+ help="""
+ Add video filter.
+ """,
+ )
+ transport_ffmpeg.add_argument(
+ "--ffmpeg-audio-filter",
+ help="""
+ Add audio filter.
+ """,
+ )
+ transport_ffmpeg.add_argument(
"--ffmpeg-video-transcode",
metavar="CODEC",
help="""
@@ -1463,6 +1491,10 @@
("ffmpeg_verbose_path", "ffmpeg-verbose-path", None),
("ffmpeg_loglevel", "ffmpeg-loglevel", None),
("ffmpeg_fout", "ffmpeg-fout", None),
+ ("ffmpeg_dkey", "ffmpeg-dkey", None),
+ ("ffmpeg_dkeys", "ffmpeg-dkeys", None),
+ ("ffmpeg_video_filter", "ffmpeg-video-filter", None),
+ ("ffmpeg_audio_filter", "ffmpeg-audio-filter", None),
("ffmpeg_video_transcode", "ffmpeg-video-transcode", None),
("ffmpeg_audio_transcode", "ffmpeg-audio-transcode", None),
("ffmpeg_copyts", "ffmpeg-copyts", None),