大家好,好久不见,这里是某昨。
随着 iori
的日渐完善,在补齐了 SAMPLE-AES
解密和 DASH Archive
下载两块拼图之后,我们终于可以简单发布一下这个项目的过程中出生的一些能用的工具了。
简介
iori-minyami
的设计目标是以 iori
为核心下载组件,通过 Rust
编写以保证其高效运行,在参数上保持对 Minyami
的兼容性,并通过一些额外的参数实现 Minyami
原版尚不支持的其他特性。
iori-minyami
支持的额外特性有:
- 管道输出:支持将输出的
TS
文件通过管道传递给其他工具,例如ffmpeg
。 MPEG-DASH
下载:支持下载MPEG-DASH
播放列表(目前只支持static
,暂不支持直播下载)。DRM
解密:支持解密SAMPLE-AES-CTR
、SAMPLE-AES-CENC
、SAMPLE-AES
加密的视频(需要手动指定密钥)。
ToC
安装
本文基于
0.1.0
版本编写,因此也选择0.1.0
版本进行讲解。其他版本不会变更安装方式,请举一反三食用。
在安装上,iori-minyami
没有任何依赖,以单个可执行文件的方式进行分发,下载后就可以直接运行使用。你需要做的就是在 GitHub Release
上下载最新版本的 iori-minyami
。
首先,访问 https://github.com/Yesterday17/iori/releases/tag/minyami-v0.1.0 ,然后根据你的操作系统选择对应的二进制文件进行下载。
下载完成后解压对应的压缩包,你就可以拿到一个美味的 minyami.exe
了。对于 Windows
用户,这里强烈建议将 minyami.exe
放置在 PATH
环境变量下辖的目录中,这样就可以直接通过 minyami
来使用了。
运行
在拿到 minyami
的可执行文件后,打开终端/命令提示符,启动:
minyami --help
就可以拿到下面这样的帮助文本了:
$ minyami --helpUsage: minyami [OPTIONS] <M3U8>
Arguments: <M3U8> m3u8 file path
Options: --verbose Debug output
88 collapsed lines
--threads <THREADS> Threads limit
[default: 5]
--retries <RETRIES> Retry limit
[default: 5]
--manifest-retries <MANIFEST_RETRIES> [default: 3]
-o, --output <OUTPUT> Output file path
Default: output.ts
--temp-dir <TEMP_DIR> Temporary file path
[env: TEMP=]
--key <KEY> Set key manually (Internal use)
(Optional) Key for decrypt video.
--cookies <COOKIES> Cookies used to download
-H, --headers <HEADERS> HTTP Header used to download
Custom header. eg. "User-Agent: xxxxx". This option will override --cookies.
--live Download live
--format <FORMAT> [Unimplemented] (Optional) Set output format. default: ts Format name. ts or mkv
--proxy <PROXY> [Unimplemented] Use the specified HTTP/HTTPS/SOCKS5 proxy
Set proxy in [protocol://<host>:<port>] format. eg. --proxy "http://127.0.0.1:1080".
--slice <SLICE> [Unimplemented] Download specified part of the stream
Set time range in [<hh:mm:ss>-<hh:mm:ss> format]. eg. --slice "45:00-53:00"
--no-merge Do not merge m3u8 chunks
-k, --keep Keep temporary files
--keep-encrypted-chunks [Unimplemented] Do not delete encrypted chunks after decryption
--chunk-naming-strategy <CHUNK_NAMING_STRATEGY> [Unimplemented] Temporary file naming strategy. Defaults to 1.
MIXED = 0, USE_FILE_SEQUENCE = 1, USE_FILE_PATH = 2,
[default: 1]
--range <RANGE> [Iori Argument] Specify segment range to download in archive mode
[default: -]
--timeout <TIMEOUT> [Iori Argument] Timeout seconds for each manifest/segment request. Defaults to 10 seconds
[default: 10]
--resume-dir <RESUME_DIR> [Iori Argument] Specify the resume folder path
--pipe [Iori Argument] If set, the program will try to work in a pipe mode.
The pipe mode will pipe the downloaded segments to a specified file or stdout, depending on whether the --output option is explicitly set.
--dash [Iori Argument] Download with dash format
-h, --help Print help (see a summary with '-h')
-V, --version Print version
基础使用
由于 iori-minyami
的参数对 Minyami
保持兼容,因此你可以参考 Minyami
的相关教程食用。这里列出一些:
需要指出的是,iori-minyami
并不要求你提供 -d
参数,但也兼容这种写法。后文中我们会省略 -d
以保持命令的简单。
代理设置
与新版本 Minyami
一致,iori-minyami
会默认读取系统代理进行使用。如果你希望覆盖这个设置,你需要手动设置 https_proxy
环境变量:
# bashexport https_proxy=http://your-proxy-server:port
# cmdset https_proxy=http://your-proxy-server:port
后续 iori-minyami
可能会考虑支持 --proxy
参数。
额外功能
iori-minyami
相比 Minyami
支持一些额外的特性,这里对其中比较试用的几个进行一下讲解。
管道输出
iori-minyami
支持管道输出,你可以通过 --pipe
参数来启用这个功能。在管道模式下,iori-minyami
将会将下载的片段直接输出到指定的文件或标准输出,具体取决于是否设置了 --output
参数。
下面列举几个可能的用法:
# 通过 iori-minyami 输出到 stdout 并播放minyami <url> --live --pipe | ffplay -# 搭配 tee 实现边录边放minyami <url> --live --pipe | tee output.ts | ffplay - # or mpv -, ...
# 通过 iori-minyami 输出到 stdout 并提供给 ffmpeg 推流minyami <url> --live --pipe | ffmpeg -i pipe:0 -c copy rtmp://your-rtmp-server/live/stream
# 通过管道的方式录制,不占用系统临时空间minyami <url> --live --pipe --output output.ts
dash 模式
iori-minyami
部分支持 DASH
的下载,你只需要加上一个 --dash
参数即可使用:
minyami <url> --dash --output result.mkv
在 dash
模式下,minyami
需要调用 mkvmerge
进行最终产物的合并。请确保你的终端/命令提示符中能够正常运行 mkvmerge
。
dash
模式和 --pipe
参数的相性目前不是很好,建议生产环境下慎用该组合。但是欢迎测试(
DRM 解密
iori-minyami
支持下载 SAMPLE-AES-CTR
、SAMPLE-AES-CENC
、SAMPLE-AES
加密的 M3U8
,且下载过程中不需要安装其他依赖程序。你可以通过 --key
参数来提供解密密钥:
SAMPLE-AES-CTR
、SAMPLE-AES-CENC
: 需要提供<kid>:<key>
格式的密钥。两段均为 32 位 16 进制格式,即最终输入长度为 65(32 + 1 + 32)。SAMPLE-AES
:需要提供<key>
格式的密钥。key
为 32 位 16 进制格式。
iori-minyami
暂不支持调用 shaka-packager
进行解密。但由于 iori
本体是支持的,因此后续版本也可能会把这个功能也加上。
实例 ID
在一些情形下,我们可能会希望区分多个 iori-minyami
实例输出的日志。这时候就可以通过 INSTANCE_ID
环境变量来实现,例如:
export INSTANCE_ID=1minyami <url> --live --pipe --output 1.ts
就会产生这样的输出:
INFO 1 iori::download::parallel > Start downloading with 5 thread(s). INFO 1 iori::hls::utils > Start fetching M3U8 file. INFO 1 iori::hls::utils > M3U8 file fetched. INFO 1 iori::download::parallel > 100 new segments were added to queue. INFO 1 iori::download::parallel > Processing seg_1.ts finished. (1 / 100 or 1.00%) INFO 1 iori::download::parallel > Processing seg_4.ts finished. (2 / 100 or 2.00%) INFO 1 iori::download::parallel > Processing seg_2.ts finished. (3 / 100 or 3.00%) INFO 1 iori::download::parallel > Processing seg_0.ts finished. (4 / 100 or 4.00%) INFO 1 iori::download::parallel > Processing seg_3.ts finished. (5 / 100 or 5.00%) INFO 1 iori::download::parallel > Processing seg_7.ts finished. (6 / 100 or 6.00%) INFO 1 iori::download::parallel > Processing seg_5.ts finished. (7 / 100 or 7.00%) INFO 1 iori::download::parallel > Processing seg_6.ts finished. (8 / 100 or 8.00%) INFO 1 iori::download::parallel > Processing seg_9.ts finished. (9 / 100 or 9.00%) INFO 1 iori::download::parallel > Processing seg_12.ts finished. (10 / 100 or 10.00%) INFO 1 iori::download::parallel > Processing seg_13.ts finished. (11 / 100 or 11.00%) INFO 1 iori::download::parallel > Processing seg_14.ts finished. (12 / 100 or 12.00%) INFO 1 iori::download::parallel > Processing seg_15.ts finished. (13 / 100 or 13.00%) INFO 1 iori::download::parallel > Processing seg_8.ts finished. (14 / 100 or 14.00%) INFO 1 iori::download::parallel > Processing seg_10.ts finished. (15 / 100 or 15.00%) INFO 1 iori::download::parallel > Processing seg_11.ts finished. (16 / 100 or 16.00%) INFO 1 iori::download::parallel > Processing seg_19.ts finished. (17 / 100 or 17.00%) INFO 1 iori::download::parallel > Processing seg_20.ts finished. (18 / 100 or 18.00%) # ...
如果有多个 minyami
,就可以通过 Log Level 后面的 INSTANCE_ID
进行区分了。
结语
iori-minyami
作为 iori
项目中最早设计并实现的模块之一,见证了 iori
的成长与变化。它也是 iori
作为下载器核心孵化出的第一个下载器。希望它的出现能让大家在不改变原有习惯的情况下,享受到更多功能带来的便利(
在这里也特别感谢群友对 iori-minyami
以及相关衍生产品的使用与 Bug 反馈,iori
的稳定性全靠群友抓虫(
不久之后应该会发第二篇发布帖,是关于 ssadecrypt
的简单介绍,虽然我觉得大家都不会直接用到,但可以简单讲