一键安装脚本(支持 amd64/arm64)
curl -fsSL https://php.946985.filegear-sg.me/mpd-hls/install.sh -o install.sh && chmod +x install.sh && ./install.sh
这是一个独立的 DASH / ClearKey / CENC -> HLS Rust 项目。
当前版本已经可以处理这类直播源:
MPD
ClearKey
cenc
项目运行模式是:
enabled=true + run_mode=persistent 时,频道启用后立即启动常驻转换,服务启动时也会自动恢复enabled=true + run_mode=on_demand 时,只有收到播放请求才会启动,空闲一段时间后会自动停机raw/ 负责吸收上游 MPD 和 CDN 抖动clear/ 中间目录video + primary audio 都准备好时,主 HLS 播放列表才会推进text 字幕独立发布,不再阻塞视频/音频主流hls/ 的媒体片按静态文件直接服务,不再依赖会话触发 touch/ensure_started
#EXT-X-DISCONTINUITY
AdaptationSet / Representation / SegmentTemplate / SegmentTimeline
KID:KEY 与 MPD 中的 default_KID
N 片直播分片cenc 分片.m4s/.mp4 媒体片支持单区间与多区间 Range 请求hls/
#EXT-X-DISCONTINUITY
playlist 内容未变化时不重写,减少临时文件和磁盘抖动curl -u admin:change-this-password \
-H "Content-Type: application/json" \
-X POST \
http://127.0.0.1:9100/api/channels \
-d '{
"name":"Test Channel",
"source_url":"https://example.com/live/entry.php?id=J",
"license_key":"0123456789abcdef0123456789abcdef:abcdef0123456789abcdef0123456789",
"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"upstream_referer":"https://example.com/watch",
"enabled":true,
"run_mode":"persistent"
}'
返回中会包含:
stream_keyplaylist_pathplaylist_urlrun_mode其中:
run_mode="persistent"
run_mode="on_demand"
curl -u admin:change-this-password \
-X POST \
http://127.0.0.1:9100/api/channels/stream-xxxxxxxxxxxxxxxx/enable
返回会是这条频道最新的 ChannelView,其中 enabled 会变成 true。
curl -u admin:change-this-password \
-X POST \
http://127.0.0.1:9100/api/channels/stream-xxxxxxxxxxxxxxxx/disable
返回会是这条频道最新的 ChannelView,其中 enabled 会变成 false。
curl -u admin:change-this-password \
-H "Content-Type: application/json" \
-X POST \
http://127.0.0.1:9100/api/channels/stream-xxxxxxxxxxxxxxxx/run-mode \
-d '{
"run_mode":"on_demand"
}'
可选值:
persistent
on_demand
返回会是这条频道最新的 ChannelView,其中 run_mode 会更新。
curl -u admin:change-this-password \
-X DELETE \
http://127.0.0.1:9100/api/channels/stream-xxxxxxxxxxxxxxxx
返回会是被删除频道最后一次的 ChannelView。
curl -u admin:change-this-password \
-X POST \
http://127.0.0.1:9100/api/channels/enable-all
返回:
items
enabled 都会是 true
curl -u admin:change-this-password \
-X POST \
http://127.0.0.1:9100/api/channels/disable-all
返回:
items
enabled 都会是 false
curl -u admin:change-this-password \
http://127.0.0.1:9100/api/channels/export.m3u
如果播放器支持在 URL 中直接携带 Basic Auth,也可以直接请求:
http://admin:[email protected]:9100/api/channels/export.m3u
如果你的服务没有开启后台认证,也可以直接用:
http://127.0.0.1:9100/api/channels/export.m3u
如果你想直接保存成文件:
curl -u admin:change-this-password \
-o channels.m3u \
http://127.0.0.1:9100/api/channels/export.m3u
返回内容类似:
#EXTM3U
#EXTINF:-1,Test Channel
http://127.0.0.1:9100/live/stream-xxxxxxxxxxxxxxxx/index.m3u8