emby挂载115


# 大致逻辑

普通的挂载大家应该都会,alist挂载115网盘,然后通过使用rclone采用webdav协议将alist挂载至本地,然后emby设置媒体库文件即可。但这样有个问题,就是会默认反代115的链接,而我在国内肯定直链是更快的,因而寻找并采用了emby2Alist的方式。这是项目链接,原理大致为:nginx端进行分流判断,如果是请求文件则直接302跳转至alist端而不是走emby端,而alist115返回302直链,这样就实现了。

搭建教程

前置环境需求

  1. 挂载了115网盘的alist(此处称为a1)。文件为已经刮削完成了的
  2. rclone使用webdav挂载a1至本地。
  3. 正常配置并能正常识别a1里文件的emby(此处称为e1)。
  4. 该项目克隆至本地。

修改emby2Alist项目的文件

进入emby2Alist/nginx/conf.d目录,修改constant.js文件。

//e1的链接
const embyHost = "http://0.0.0.0:48072";
// rclone 的挂载目录, 例如将od, gd挂载到/mnt目录下: /mnt/onedrive /mnt/gd ,那么这里就填写 /mnt
// 通常配置一个远程挂载根路径就够了,默认非此路径开头文件将转给原始emby处理,不用重复填写至disableRedirectRule
// 如果没有挂载,全部使用strm文件,此项填[""],必须要是数组
const embyMountPath = ["/data/alldrive/115"];
// emby/jellyfin api key, 在emby/jellyfin后台设置
const embyApiKey = "111111111111111";
// 访问宿主机上5244端口的alist地址, 要注意iptables给容器放行端口。我因为宿主机的alist带路径,所以此处使用的不是5244的宿主机alist,而是另外起的一个alist docker的端口
const alistAddr = "http://0.0.0.0:3988";
// alist token, 在alist后台查看,同上的alist
const alistToken = "alist-XXXXXXXXX";

// 选填项,用不到保持默认即可
// alist公网地址, 用于需要alist server代理流量的情况, 按需填写
const alistPublicAddr = "http://0.0.0.0:3988";

启动nginx镜像

进入emby2Alist/docker文件夹,如果不需要另起一个alist来获取直链,则可以将alist部分注释掉。

按个人需求修改完docker-compose.yml之后运行docker-compose up -d。默认起的nginx镜像是端口8091。此时emby客户端访问http://IP:8091登录并进入,然后尝试播放视频,如果播放拖动视频的时候服务器几乎没有速度,则证明直链转发成功。

进阶操作

由于海报图、nfo之类的小文件每次都需要从115网盘下载然后读取,体验并不好,所以我产生了将这类小文件提前缓存到本地的想法,而又因为我对备份转移有需求,所以传统的软链接也就不再适用了。幸好找到了Auto_Symlink这个项目。逻辑是一样的,将指定后缀的文件提前下载到对应目录,然后视频文件软链接指向实际挂载网盘的目录。

由于我的emby也是docker,所以我的云端硬盘挂载至auto_symlink的目录与云端硬盘挂载至emby的目录需要完全一致,这样软链接才能成功读取

Auto_Symlink按官方配置即可,可参考我的docker-compose.yml

同步功能中的元数据模式选择本地模式,这样能直接从挂载目录复制至刮削读取目录。

以及这样修改之后nginx转发直链的部分也需要更改,按我本文的所有逻辑,const embyMountPath = ["/data/alldrive/115"];需要修改为const embyMountPath = ["/cloud"];;

同时docker端的alist也需要更改,原本挂载115的路径为/115,现在修改为/cloud/115

一些文件参考

emby的镜像docker-compose.yml

x86

---
version: "2.1"
services:
  emby:
    image: codion/emby_crack:4.7.6.0-X86
    container_name: emby
    volumes:
      - ~/emby/config:/config
      #- ~/emby/data/115:/data/115
      - ~/emby/drive:/data/alldrive
      - /root/embydrive:/cloud
    ports:
      - 48072:8096

arm64

---
version: "2.1"
services:
  emby:
    image: codion/emby_crack:4.7.6.0-ARM
    container_name: emby
    volumes:
      - ~/emby/config:/config
      #- ~/emby/data/115:/data/115
      - ~/emby/drive:/data/alldrive
      - /root/embydrive:/cloud
    ports:
      - 48072:8096

emby2Alistdocker-compose.yml

因为我宿主机的alist带了路径,所以我就另起了一个alistdocker挂载的115配置要和原来的一模一样

version: '3.5'

services:

    service.nginx:
      image: nginx:latest
      container_name: nginx-emby
      # 更改为默认host网络,纠正流量标识,直接占用宿主机端口,docker层会禁用端口映射
      network_mode: host
      # 如果需要使用bridge(桥接)网络,请取消ports(端口映射)注释,并注释network_mode
      # 端口映射规则为,宿主机端口:容器内部端口
      # ports:
      #   - 8091:8091
      volumes:
        - ../nginx/nginx.conf:/etc/nginx/nginx.conf
        - ../nginx/conf.d:/etc/nginx/conf.d
        - ../nginx/embyCache:/var/cache/nginx/emby
        - ../nginx/log:/var/log/nginx
      restart: always
       depends_on:
         - service.ali

    service.ali:
      image: xhofe/alist:latest
      container_name: alist
      ports:
        - 3988:5244
      volumes:
        - ./alist:/opt/alist/data
      restart: always

    # service.ali-webdav:
    #   image: messense/aliyundrive-webdav
    #   container_name: ali-webdav
    #   ports:
    #     - 8080:8080
    #   volumes:
    #     - ./aliyundrive-webdav/:/etc/aliyundrive-webdav/
    #   environment:
    #     - REFRESH_TOKEN=1111111111111aaaaaaaaaa
    #     - WEBDAV_AUTH_USER=admin
    #     - WEBDAV_AUTH_PASSWORD=admin
    #   restart: always

rclone挂载

rclone.conf

我的带了alist路径,如果没有带路径的就应该是127.0.0.1:5244/dav

[alist]
type = webdav
url = http://127.0.0.1:5244/alist/dav
vendor = Other
user = admin
pass = XXX

embyalist.service

[Unit]
Description=Rclone Emby
AssertPathIsDirectory=/root/emby
After=network-online.target alist.service

[Service]
Type=simple
ExecStart=/usr/bin/rclone mount alist: /root/emby/drive/115 --allow-other --allow-non-empty --dir-cache-time 24h --cache-dir=/root/cache --vfs-cache-mode full --buffer-size 32M --vfs-read-ahead 512M --vfs-read-chunk-size 64M --vfs-read-chunk-size-limit off --vfs-cache-max-size 3G  --low-level-retries 200 --read-only
ExecStop=/bin/fusermount -u /root/emby/drive/115
Restart=on-abort                                                                                 
                                          

User=root

[Install]
WantedBy=default.target
#version: '3.8'

services:
 # auto_symlink:
    image: shenxianmq/auto_symlink:latest
    container_name: auto_symlink
    environment:
      - TZ=Asia/Shanghai
    volumes:
     # 左边为实际目录,右边与emby挂载到的视频目录完全一致
      - /root/embydrive:/cloud
     # 左边为emby刮削读取的目录
      - /root/emby/drive/115:/Media
      - ./config:/app/config
    ports:
      - "48315:8095"
   # user: "0:0"
    restart: unless-stopped


文章作者: xieshang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 xieshang !
评论
  目录