emby开心版挂载alist生成的strm文件实现网盘直链播放


简单记录下emby开心版挂载alist生成的strm文件实现网盘直链播放步骤和设置

dpanel管理面板

dpanel是一个Docker 可视化面板系统,提供完善的 docker 管理功能,docker-compose.yml内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
dpanel:
image: dpanel/dpanel:lite
container_name: dpanel
restart: unless-stopped
ports:
- "8807:8080"
environment:
- APP_NAME=dpanel
- INSTALL_USERNAME=面板登录账号
- INSTALL_PASSWORD=面板登录密码
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./config:/dpanel
- /data:/data # 挂载资源路径,后续在面板添加docker项目挂载一些路径需要用到

运行docker compose up -d命令,等待执行完成后访问http://ip:8807即可打开面板,然后填入设置的账号密码登录

部署EMBY开心版

点击Compose-创建任务,右边填入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: "3.8"
services:
embyserver:
image: amilys/embyserver
container_name: amilys_embyserver
network_mode: bridge # DLNA and Wake-on-Lan需要bridge
environment:
- UID=0 # 设置容器用户 ID 为 0 (通常是 root)
- GID=0 # 设置容器组 ID 为 0 (通常是 root)
- GIDLIST=0 # 设置容器组 ID 列表为 0
- TZ=Asia/Shanghai # 设置容器的时区为亚洲/上海
volumes:
- /data/docker_app/amilys_embyserver/config:/config # 配置保存目录,这里的目录路径都以上述dpanel挂载为基础
- /data:/data # 媒体目录
ports:
- 7568:8096 # HTTP port
restart: unless-stopped

提交后部署,部署完毕后打开http://ip:7568就可以进行服务器设置

开启开心版高级功能

这个emby开心版支持以下功能:

  • emby-erx Emby 增强/美化 插件
  • dd-danmaku Emby 弹幕库插件
  • emby调用外部播放器
    开启方法为编辑ext.sh (/config/config/ext.sh)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ## Emby-crx 美化 媒体库ID为空时不启用

    ## 媒体库id,用逗号分隔。进入媒体库后url里的parentId
    ## MediaId="21466,21463"
    MediaId=""

    ## 扩展插件:
    # embyLaunchPotplayer 外部播放
    # ede.user 弹幕
    # actorPlus 未知演员隐藏
    extmod='["embyLaunchPotplayer","ede.user","actorPlus"]'
    修改后重启服务即可

部署alist

点击Compose-创建任务,右边填入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3.8"
services:
alist:
restart: unless-stopped
volumes:
- /data/docker_app/alist/config:/opt/alist/data
- /data:/data
ports:
- 5244:5244
environment:
- PUID=0
- PGID=0
- UMASK=022
container_name: alist
image: xhofe/alist:latest

提交后部署,部署完毕后打开http://ip:5244即可利用控制台输出的初始密码登录

部署autofilm生成strm文件

点击Compose-创建任务,右边填入

1
2
3
4
5
6
7
8
9
10
version: '3.8'
services:
autofilm:
image: akimio/autofilm
container_name: autofilm
volumes:
- /data/docker_app/autofilm/config:/config
- /data/media:/media # 存放strm文件路径
- /data/docker_app/autofilm/logs:/logs # 日志
restart: unless-stopped

提交后部署,部署完毕后打开文件管理,然后打开config文件夹,新建一个config.yaml文件,填入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 项目官方模板和教程:https://blog.akimio.top/posts/1031/
Settings:
DEV: False # 开发者模式(可选,默认 False)

Alist2StrmList:
- id: 新番
cron: 20,50 * * * *
url: http://example.com # 可访问alist url 如果是同一台服务器部署,可以填内网地址
username: alist登录名
password: alist登录密码
source_dir: alist视频文件挂载路径,如/tianyi/downloads/Bangumi/更新中
target_dir: strm存放路径,如/media/新番
flatten_mode: False
subtitle: False
image: False
nfo: False
raw_url: False
overwrite: False
other_ext: mp4,mkv
max_workers: 5

保存之后,等待定时任务执行生成文件即可,文件生成完毕后,再去emby控制台添加媒体库,即可扫描入库!

提示:只要id不一样,可以把不同网盘路径(source_dir)文件生成的strm文件放到同一个目录下(target_dir)

部署nginx实现直链播放

点击Compose-创建任务,右边填入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3.8"
services:
nginx:
image: nginx:latest
container_name: nginx
restart: unless-stopped
network_mode: host
environment:
- TZ=Asia/Shanghai # 设置容器的时区为亚洲/上海
volumes:
- /data/docker_app/nginx/nginx.conf:/etc/nginx/nginx.conf
- /data/docker_app/nginx/conf.d:/etc/nginx/conf.d
- /data/docker_app/nginx/log:/var/log/nginx
- /data/docker_app/nginx/html:/usr/share/nginx/html
- /data/docker_app/nginx/cache:/var/cache/nginx/emby
- /data/docker_app/nginx/cert:/etc/nginx/cert

提交后部署,然后前往embyExternalUrl下载最新版本,本教程用的是v0.4.5版本可正常使用
下载解压把emby2alist里的nginx文件夹内容上传至服务器/data/docker_app/nginx中,然后使用文件管理功能修改以下文件

  • /etc/nginx/conf.d/constant.js
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 这里默认 emby/jellyfin 的地址是宿主机,要注意 iptables 给容器放行端口
    const embyHost = "http://172.17.0.2:8096"; # 可以在emby控制台看到也可以在dpanel看到

    // emby/jellyfin api key, 在 emby/jellyfin 后台设置
    const embyApiKey = "8dcc57f0b3d6424a8821b75dc9808514";

    // 挂载工具 rclone/CD2 多出来的挂载目录, 例如将 od,gd 挂载到 /mnt 目录下: /mnt/onedrive /mnt/gd ,那么这里就填写 /mnt
    // 通常配置一个远程挂载根路径就够了,默认非此路径开头文件将转给原始 emby 处理
    // 如果没有挂载,全部使用 strm 文件,此项填[""],必须要是数组
    const mediaMountPath = [""];
    如果需要https,还需要修改
  • /etc/nginx/conf.d/emby.conf
    1
    2
    include /etc/nginx/conf.d/includes/http.conf;
    include /etc/nginx/conf.d/includes/https.conf; #放开这一行的注释
  • /etc/nginx/conf.d/includes/https.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    server_name emby.example.com; # 如果还有服务需要nginx这一行可以改对应域名,否则不需要改
    ## SSL SETTINGS ##
    listen [::]:443 ssl; ## 默认是8095端口,可以改成其他端口
    listen 443 ssl; ## 默认是8095端口,可以改成其他端口
    # listen 8095 quic reuseport; ## http3 enabled
    http2 on; ## since nginx 1.25.1, the "listen ... http" directive is deprecated
    add_header Alt-Svc 'h3=":$server_port"; ma=86400'; ## http3 enabled
    ssl_session_timeout 30m;
    ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
    ssl_certificate /etc/nginx/cert/example.com.pem; ## 配置正确的路径
    ssl_certificate_key /etc/nginx/cert/example.com.key; ## 配置正确的路径
    ssl_session_cache shared:SSL:10m;
    error_page 497 =307 https://$host:$server_port$request_uri; ## if http and https use same port, Redirects http:// to https://

测试

  • 先浏览器打开emby源端口网址,如http://ip:7568,播放视频测试是否正常
  • 第一步不成功请检查emby和alist的配置,可以把strm文件内容取出来看看能否正常下载播放
  • 然后打开nginx代理后的网址,如https://example.com测试播放
  • 如果不成功,打开nginx的错误日志排错