Emby

来自 ArchWiki

Emby 是一个个人媒体服务器,它为许多平台提供了客户端。它用于组织个人家庭媒体,以及在其他设备上播放。社区支持大量的频道,甚至可以与 PVR 和 Tuner 卡一起使用,以远程提供电视流。

安装

安装 emby-server 软件包。

使用

启用启动 emby-server.service

通过浏览器访问 Emby,导航至 https://127.0.0.1:8096/

写入权限

Emby 在 用户用户组 emby 下运行,使用 systemd 的 DynamicUser 功能。默认情况下,由于 systemd 的文件系统抽象,Emby 最多只能拥有对您的媒体文件的读取权限。

您可能希望授予 emby 写入权限并启用媒体删除、本地元数据保存、字幕下载等功能。

您将需要为您的媒体文件创建一个专用组,或者使用您已经属于的组,并授予它访问您的文件夹的权限,如下所示

# create the media group
groupadd media

# optionally add your_user to the media group
usermod -aG media your_user

# give ownership of your media files to the media group
chgrp -R media /mnt/media_files

# make the files writeable to the media group
find /mnt/media_files -type f -exec chmod 664 {} +

# make the directories writeable to the media group
find /mnt/media_files -type d -exec chmod 775 {} +

# add the sticky group bit so that newly created directories belong to the media group
find /mnt/media_files -type d -exec chmod g+s {} +

然后扩展单元

/etc/systemd/system/emby-server.service.d/write-permissions.conf
[Service]
SupplementaryGroups=media
ReadWritePaths=/mnt/media_files
UMask=0002

这将把 emby 用户添加到 media 组,并通过 systemd 启用对 /mnt/media_files 目录的写入权限。对您可能拥有的任何其他媒体文件夹重复执行此操作。

硬件加速

Emby 支持使用 GPU 的硬件加速转码。这大大降低了转码时的 CPU 使用率,并且对于某些系统来说,如果 CPU 本身不够强大,这是唯一的选择。

要检查硬件加速是否可用,请导航到 Emby Web 界面中的转码设置,然后在“Enable hardware acceleration when available”下选择“Advanced”。将出现可用硬件编码器和解码器的列表。如果未检测到任何内容,请参阅以下特定于 GPU 的说明。

Intel

要为 Intel GPU 启用硬件加速视频转码/解码,请安装 intel-media-sdk 软件包。

使用以下命令确认是否检测到硬件加速:

$ ffdetect-emby qsvenc

输出应列出检测到的编码配置文件以及其他信息。

Nvidia

要为 Nvidia GPU 启用硬件加速视频转码/解码,需要专有的 Nvidia 驱动程序。安装 nvidianvidia-dkms 软件包。

使用以下命令确认是否检测到硬件加速:

$ ffdetect-emby nvenc

输出应列出检测到的编码配置文件以及其他信息。

nginx 示例

# Based on example from https://emby.media/community/index.php?/topic/47508-how-to-nginx-reverse-proxy/
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name emby.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/emby.yourdomain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/emby.yourdomain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    add_header Strict-Transport-Security "max-age=31536000" always;
    ssl_trusted_certificate /etc/letsencrypt/live/emby.yourdomain.com/chain.pem;
    ssl_stapling on;
    ssl_stapling_verify on;

    # Security / XSS Mitigation Headers
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    location = / {
        return 302 https://$host/web/;
    }

    location / {
        # Proxy main emby traffic
        proxy_pass http://127.0.0.1:8096;

        proxy_hide_header X-Powered-By;
        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;

        # Disable buffering when the nginx proxy gets very resource heavy upon streaming
        proxy_buffering off;

        # Next three lines allow websockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

}

故障排除

没有该文件或目录

确保 ReadWritePaths 引用的目录存在。如果它不存在,emby-server.service 将无法启动并显示错误。例如,如果 /mnt/media_files 不存在,systemd 将尝试将其用作挂载点

emby-server.service: Failed to set up mount namespacing: /run/systemd/unit-root/mnt/media_files: No such file or directory
emby-server.service: Failed at step NAMESPACE spawning /usr/bin/emby-server: No such file or directory