Emby 加快扫库并使用直链播放
本文通过 Docker Compose 方式部署 Alist ,在 VPS 使用 WebDAV 本地挂载,同时通过 Auto_Symlink 生成 strm 文件加快 Emby 扫库速度,最后通过 MediaLinker 使 Emby 使用网盘直链播放。
Important
由于 Alist 已经被卖,请谨慎使用,或者使用社区 fork 再开发版。
前言#
本文的适用对象:
VPS部署Emby- 网盘存放影视资源
- 部署
Alist - 影视资源已刮削完毕
家庭 NAS 用户可适当参考。
Tip
文中所有的容器都使用docker compose方式部署,但并没有将所有项目放入同一个文件,这样方便选择性部署及调试,如果需要放入同一文件,挂载时注意各个容器内文件的映射路径。
用到的项目地址:
部署 Alist#
Alist 是一个可以将网盘集中到一个程序展示的应用,同时支持 WebDav,本文通过 docker 部署,部署后自行添加存储,同时在 设置-全局 中关闭 签名所有 选项。
Note
文章都使用docker compose部署容器。
创建配置文件:
mkdir -p /opt/alist && cd /opt/alist && vim compose.yaml添加 docker 配置:
version: '3.3'services: alist: image: 'xhofe/alist:latest' container_name: alist volumes: - './alist_data:/opt/alist/data' ports: - '5244:5244' environment: - PUID=0 - PGID=0 - UMASK=022 restart: unless-stopped启动容器,需要在 compose 文件所在目录 :
docker compose up -d# 初始化账号密码docker exec -it alist ./alist admin 你的密码部署完成后访问 http://ip:5244 添加相应的存储即可。
本地挂载 Alist#
部署后需要将 Alist 挂载到本地,以便媒体服务器 Emby 等扫描媒体文件,Alist 支持 WebDav,可以使用 CloudDrive2 或者 Rclone 挂载,这里使用 Rclone。
首先安装 fuse3 ,然后安装 Rclone。
# 安装依赖apt-get install fuse3# 安装 rclonecurl https://rclone.org/install.sh | sudo bash接下来输入 rclone config 添加本地网盘,选择 WebDAV。
# 选择新远程No remotes found, make a new one?n) New remotes) Set configuration passwordq) Quit confign/s/q> n #这里选择n
# 设置名字name> remoteType of storage to configure.Choose a number from below, or type in your own value[snip]XX / WebDAV \ "webdav"[snip]Storage> alist #这里输入远程的名字,之后就是你的远程名称
# 设置远程地址url http://your_alist_ip:port/davURL of http host to connect toChoose a number from below, or type in your own value 1 / Connect to example.com \ "https://example.com"url> http://127.0.0.1:5244/dav #这里设置alist的地址和端口,后面要带dav,这是alist要求的
# 这里选6就可以了,1-5都不是我们使用的Name of the WebDAV site/service/software you are usingChoose a number from below, or type in your own value 1 / Fastmail Files \ (fastmail) 2 / Nextcloud \ (nextcloud) 3 / Owncloud \ (owncloud) 4 / Sharepoint Online, authenticated by Microsoft account \ (sharepoint) 5 / Sharepoint with NTLM authentication, usually self-hosted or on-premises \ (sharepoint-ntlm) 6 / Other site/service or software \ (other)vendor> 6
# 设置远程账号User nameuser> admin #这里是你alist的密码
# 设置远程密码Password.y) Yes type in my own passwordg) Generate random passwordn) No leave this optional password blanky/g/n> y #这里输入yEnter the password: #这输入你的密码,密码是看不到的password:Confirm the password: #再次输入你的密码password:
# 这里直接回车即可Bearer token instead of user/pass (e.g. a Macaroon)bearer_token>Remote config
# 这里可能会问你是默认还是高级,选择默认即可
# 你的远程信息--------------------[remote]type = webdavurl = http://127.0.0.1:5244/davvendor = Otheruser = adminpass = *** ENCRYPTED ***--------------------
# 确认y) Yes this is OKe) Edit this remoted) Delete this remotey/e/d> y #输入y即可,
# 最后按q退出设置输入对应的信息后,验证是否挂载成功(第二个命令慎用):
# 查看alist的目录rclone lsd alist:
# 查看alist的文件rclone ls alist:挂载命令:
rclone mount rclone添加的名称:/ /本地挂载地址 --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty --daemon解除挂载:
# 解除本地挂载,后面跟的是挂载的本地目录fusermount -qzu /alist开机自动挂载:
vim /usr/lib/systemd/system/rclone.service粘贴下面的内容:
[Unit]Description=rcloneBefore=docker.service
[Service]User=rootExecStart=/usr/bin/rclone mount rclone添加的名称:/ /本地挂载地址 --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty --daemon
[Install]WantedBy=multi-user.targetsystemctl daemon-reloadsystemctl enable rclone.servicesystemctl start rclone.service部署 Auto_Symlink#
此项目可以为挂载到本地的网盘文件创建软链接或者供 Emby 刮削的 strm 文件。
创建配置文件:
mkdir -p /opt/auto_symlink && cd /opt/auto_symlink && vim compose.yaml添加 docker 配置:
version: '3.9'services: auto_symlink: image: 'shenxianmq/auto_symlink:latest' restart: unless-stopped user: '0:0' ports: - '8095:8095' volumes: - './config:/app/config' # auto_symlink 配置映射路径,右侧不能修改 - '/media/strm:/strm' # 软链接或者 strm 文件映射路径,左右都可修改 - '/alist:/alist:rslave' # 挂载到本地的网盘路径映射到容器内,第一个冒号左右侧要完全一致,第二个冒号右侧后不需要修改 environment: - TZ=Asia/Shanghai container_name: auto_symlink运行容器后访问 http://ip:8095 可以访问程序界面,默认账户密码为:admin, password。
在 Web 界面添加对应的同步任务,选择对应的媒体目录及链接存放目录。
- 媒体目录:
compose配置中映射到容器内的网盘路径,volume下第三行配置。这里选择会选择到 auto_symlink 容器内的映射路径。 - 本地目录:
compose配置中映射到容器内的链接存放路径,volume下第二行配置,同样会选择到 auto_symlink 容器内的映射路径。生成链接文件后会将此文件夹下的内容映射到宿主机media/strm文件夹下,可供Emby等媒体服务器访问。 - 软链接模式:推荐使用
strm,可以加速Emby扫库。 - strm 模式:选择
cloud后文件内是http开头的链接。 - 挂载类型:这里选择
Alist。 - alist 根目录:
Alist挂载的根目录,例如我的Alist网盘路径中该选择/Alist。这里仍然是映射到容器的文件夹。
AList├── E5└── 阿里云盘其余选项按需添加,保存后在 全局设置-手动同步 开启链接生成,可以在 查看日志 中看到进程,最后生成的链接会映射到 compose 配置中第二行 volumes 冒号左侧的文件夹,本文中的配置是 /media/strm。
Note
可以到对应的目录中选择一个strm文件打开,将其中的链接放入浏览器,如果出现下载视频任务,说明链接获取成功。
部署 Emby#
Emby 可以使用官方的镜像,本文使用特别版。
创建目录及 compose 文件:
mkdir -p /opt/emby && cd /opt/emby && vim compose.yml添加 docker 配置:
version: "3.3"services: emby: network_mode: bridge ports: - '8096:8096' - '8920:8920' volumes: - ./config:/config - /media/strm:/strm # 将auto_symlink 生成的链接文件夹映射到 emby 容器内 environment: - TZ=Asia/Shanghai - UID=0 - GID=0 - GIDLIST=0 restart: always container_name: embyserver image: lovechen/embyserver:latest部署完成后添加媒体库时媒体文件路径在容器 /strm 下选择,勾选下面两个选项:
- 启用实时监控
- 元数据读取器 -NFO
添加后 Emby 会很快扫库完成,此时就可以正常使用 Emby,不过此时观看使用的都是服务器流量,如果想要观看是使用网盘链接访问资源,就需要下面的项目。
部署 MediaLinker#
首先关闭 Emby 用户的转码权限,在 Emby-设置-用户编辑,将 如有必要,在媒体播放期间允许视频转码 选项关闭,拉到最下方保存。
接下来在 播放-视频 中,将 互联网质量 拉到最大。
然后部署项目,此项目是 emby2Alist 的整合版。
mkdir -p /opt/medialinker && cd /opt/medialinker && vim compose.ymlversion: '3'services: medialinker: restart: always volumes: - './config/:/opt/' # 配置文件映射,右侧不要修改 environment: - AUTO_UPDATE=true - SERVER=emby - NGINX_PORT=8091 - NGINX_SSL_PORT=8095 - SSL_ENABLE=true - SSL_CRON=0 3 * * * - SSL_DOMAIN=yourdomain.com
container_name: medialinker image: 'thsrite/medialinker:latest' network_mode: "host"配置证书脚本:
vim /opt/medialinker/config/ssl粘贴下面的内容,并更改对应的参数配置,DNS 配置:参考地址
CLOUDFLARE_DNS_API_TOKEN=apikey \/lego --email CF邮箱账号 --dns cloudflare --domains "${SSL_DOMAIN}" --accept-tos run完成后在 /opt/medialinker 目录运行 docker compose up -d 部署容器,部署后会生成 /opt/medialinker/config/constant.js 文件,在其中修改对应的参数,配置中有详细的解释。修改后可以运行下面的命令重新部署容器:
cd /opt/medialinkerdocker compose downdocker compose up -d完成后访问 https://SSL_DOMAIN:NGINX_SSL_PORT 即可访问 Emby,即 compose 文件中设置的参数。
单 Compose 文件参考#
创建文件夹及 compose 文件:
cd /opt && mkdir -p {alist,auto_symlink,medialinker,emby} && vim compose.ymlversion: '3.9'services: alist: container_name: alist image: xhofe/alist:latest volumes: - /opt/alist/alist_data:/opt/alist/data ports: - '5244:5244' environment: - PUID=0 - PGID=0 - UMASK=022 restart: unless-stopped
auto_symlink: container_name: auto_symlink image: shenxianmq/auto_symlink:latest restart: unless-stopped user: '0:0' ports: - '8095:8095' volumes: - /opt/auto_symlink/config:/app/config - /media/strm:/strm - /alist:/alist:rslave environment: - TZ=Asia/Shanghai
medialinker: container_name: medialinker image: thsrite/medialinker:latest restart: always volumes: - /opt/medialinker/config:/opt/ environment: - AUTO_UPDATE=true - SERVER=emby - NGINX_PORT=8091 - NGINX_SSL_PORT=8094 - SSL_ENABLE=true - SSL_CRON=0 3 * * * - SSL_DOMAIN=yourdomain.com network_mode: "host"
emby: container_name: embyserver image: lovechen/embyserver:latest network_mode: bridge ports: - '8096:8096' - '8920:8920' volumes: - /opt/emby/config:/config - /media/strm:/strm environment: - TZ=Asia/Shanghai - UID=0 - GID=0 - GIDLIST=0 restart: always下载 medialinker 配置文件及证书脚本文件:
wget -O /opt/medialinker/config/constant.js https://raw.githubusercontent.com/thsrite/MediaLinker/refs/heads/main/config/emby/constant.jswget -O /opt/medialinker/config/ssl https://raw.githubusercontent.com/thsrite/MediaLinker/refs/heads/main/config/ssl下载修改这两个文件中对应的配置,路径为 /opt/medialinker/config/constant.js 及 /opt/medialinker/config/ssl。
完成后运行容器:
cd /opt && docker compose up -d