acexy - 用 Go 编写的 AceStream 代理!⚡
目录
它是如何工作的?🛠
该项目是围绕 AceStream 中间件 HTTP API 的一个封装,支持 HLS 和 MPEG-TS 流的播放。
我厌倦了 AceStream 的限制以及播放流时存在的一些问题 📽。例如,只能为 单个客户端 播放同一频道。要让多个客户端
播放 不同的流,必须为每个客户端手动添加唯一的 pid。如果传输过程中出现错误,整个流都会中断,等等。
我觉得在家庭网络中使用 AceStream,单个服务器和多个客户端共享,试图优化资源的体验非常令人沮丧。这是我使用 AceStream 的网络拓扑:
存在一些问题:
- 同一时间只能有 一个客户端 播放同一流 🚫。
- 让每个客户端独立运行 AceStream 会浪费资源并且导致网络饱和 📉。
- 多个客户端如果拥有唯一的
pid(播放器ID)关联,可以播放不同的流 🔓。 - 标准的 AceStream HTTP API 对错误的容错能力不足,
主要特性 🔗
使用 acexy,你将自动拥有:
- 一个单一的、集中式服务器运行 你所有的 AceStream 流 ⛓。
- 自动为每个客户端每个流分配唯一的
pid(播放器ID)🪪。
- 得益于 HTTP 中间件,实现了 抗错误、稳健 的流媒体传输 🛡。
借助此代理,现可实现如下架构:
使用方法 📐
acexy 以 Docker 镜像形式发布。请确保你已安装并拥有
最新的 Docker 镜像。
Acexy 容器将连接到 AceStream 服务器。你需要 部署一个 Docker 镜像,并将 Acexy 置于相同网络中;或者 在宿主机上运行 AceStream,并以主机网络模式运行 Acexy。
提示:仓库内有一个 docker-compose.yml 文件,你可以直接
使用它来启动整个服务块。这是 从 v0.2.0 版本开始推荐的配置。要运行服务块,首先获取 docker-compose.yml 文件,然后执行:
wget https://raw.githubusercontent.com/Javinator9889/acexy/refs/heads/main/docker-compose.yml
docker compose run -d如果你不想使用 Docker Compose,假设你已经有一个 AceStream 服务器,另一种方法可以是:
docker run --network host ghcr.io/javinator9889/acexy注意:为了方便起见,提供了一个包含所有可调参数的 docker-compose.yml 文件。
它应该可以直接运行,并且从 v0.2.0 版本起推荐使用此方式。默认情况下,代理将以 MPEG-TS 模式工作。若要切换模式,
必须添加 -m3u8 标志 或设置 ACEXY_M3U8=true 环境变量。
注意:HLS 模式 -ACEXY_M3U8或-m3u8标志 - 处于未经测试的状态。
不建议使用,且不能保证其正常工作。
只有一个可用的端点:/ace/getstream,其参数与标准的
AceStream 中间件/HTTP API 相同。
因此,要运行一个流,只需在你喜欢的应用程序中打开以下链接——例如 VLC:
http://127.0.0.1:8080/ace/getstream?id=dd1e67078381739d14beca697356ab76d49d1a2where dd1e67078381739d14beca697356ab76d49d1a2 是 AceStream
频道的 ID。
优化 🚀
运行在代理后的 AceStream 引擎有多个端口可以 暴露以优化性能。默认情况下,这些端口是:
8621/tcp8621/udp
EXTRA_FLAGS 变量
使用 --port 标志进行调整。暴露这些端口应有助于获得更稳定的流媒体体验。请注意, 你还需要在网关上打开这些端口。
参考下方示例,这是运行 Docker 命令的方式:
docker run -t -p 8080:8080 -p 8621:8621 ghcr.io/javinator9889/acexy替代方案 🧃
AceStream 在底层尝试使用 UPnP IGD 连接远程机器。 问题是由于 Docker 添加的桥接层导致此方法无法工作 (参见:https://docs.docker.com/engine/network/drivers/bridge/)。
如果您只运行一个 Acexy 实例和一个 AceStream 实例, 则可以安全地使用 主机网络 运行容器。这意味着:
- 容器可以访问桥接到您主网络的任何其他应用程序。
- 您不需要暴露任何端口。
- 性能会略有优化。
。
命令非常简单明了:
docker run -t --network host ghcr.io/javinator9889/acexy
这将使 AceStream 能够自由使用 UPnP。配置选项 ⚙
Acexy 拥有大量配置选项,允许您自定义其行为。所有选项都有 经过测试以实现最佳体验的默认值,但您可能需要调整它们 以满足您的需求。
专业提示:您可以执行 acexy -help 来完整查看所有可用选项。由于 Acexy 设计为在 Docker 容器内运行,所有变量和设置均可 通过环境变量进行调整。
| 标志 | 环境变量 | 说明 | 默认值 |
|---|---|---|---|
-license |
- | 打印程序许可并退出 | - |
-help |
- | 打印帮助信息并退出 | - |
-addr |
ACEXY_LISTEN_ADDR | Acexy监听的地址。运行在host模式时有用。 |
:8080 |
-scheme |
ACEXY_SCHEME |
AceStream中间件的协议。如果你配置了AceStream使用HTTPS, 你需要调整这个值。 | http |
-acestream-host |
ACEXY_HOST |
AceStream中间件所在的位置。如果你需要Acexy连接到不同的AceStream引擎,请修改它。 | localhost |
-acestream-port |
ACEXY_PORT |
连接AceStream中间件的端口。如果你需要Acexy连接到不同的AceStream引擎,请修改它。 | 6878 |
-m3u8-stream-timeout |
ACEXY_M3U8_STREAM_TIMEOUT |
当Acexy以M3U8模式运行时,判断流结束的超时时间。 | 60s |
-m3u8 | ACEXY_M3U8 |
在Acexy中启用M3U8模式。警告:此模式为实验性,可能无法按预期工作。 | 禁用 |
-empty-timeout |
ACEXY_EMPTY_TIMEOUT |
在从中间件接收到空信息后,认为流已结束的超时时间。 在M3U8模式下无效。 | 1m |
-buffer-size |
ACEXY_BUFFER_SIZE |
在将数据复制到播放器之前,缓冲流的buffer-size字节数。
有助于播放时获得更好的稳定性。
|
4.2MiB |
-no-response-timeout |
ACEXY_NO_RESPONSE_TIMEOUT |
等待AceStream中间件对新打开流返回响应的时间。 除非您的网络连接非常差(例如:延迟非常高),否则此时间应尽可能短。 | 1s |
注意:选项列表非常多,但可能已过时。如有疑问,请始终参考
Acexy二进制文件的-help输出。--- Tranlated By Open Ai Tx | Last indexed: 2026-03-29 ---