这篇文章是基于在家有一台长期开机的设备(比如Mac Mini)的背景下而写的。
这篇文章会给你提供一个家庭Emby的环境总览,你可以根据自己的实际情况选择不同的方案。
家庭网络一般使用运营商提供的家用宽带,这类宽带的实际情况是上下行不对等,且没有公网IP。
我们说的XXXM宽带,特指下行带宽。上行带宽一般为下行的10%,但是运营商并不提供保证。(下行一旦跨网其实也很慢)。
在外,使用家里的Emby时,大部分使用的家里的上行带宽,速度会比较慢,一般能到 20-30 Mbit/s。
在家里,使用家里的Emby时,大部分使用的是内网。Wifi连接的设备一般都至少有 300 Mbit/s的带宽。
在家里,下载的时候大部分使用的是家里的下行带宽,速度比较快,一般有 300-1000 Mbit/s。
因为家庭宽带没有公网IP,因此需要找到一个稳定的组网方式,便于我们在公网上,将家里的设备和移动设备连接到一起。
我个人使用的是Tailscale。其他相关的产品有ZeroTier,Netbird,Surge Ponte等。
这类产品的原理大同小异,基本是通过一个公网的协调服务器,将各个设备通过STUN获取的IP&端口进行分发,然后尝试相互进行UDP打洞,完成连接。流量一般通过wireguard进行承载。实际在公网上的流量都是加密的,可以不用担心泄密问题。
Tailscale个人使用是永久免费的。支持3个管理账户+100台设备,完全足够家庭使用了。
Tailscale的基础使用是很简单的,在每台设备上安装Tailscale,就可以通过Tailscale分配的IP进行互联了。
打洞和穿透工作会由Tailscale在后台静默完成。
tips: 因为需要STUN获取机器出口IP,因此,如果使用了网关级代理,请添加STUN协议为直连策略,确保获取到正确的出口IP和端口。
!!注意!!
!!注意!!
!!注意!!
公网访问容易引发安全问题,请慎重选择。
公网访问容易引发安全问题,请慎重选择。
公网访问容易引发安全问题,请慎重选择。
除了私有组网,也可以使用公网访问。
下面介绍的是基于 cloudflare tunnel 产品。
整体访问请求的网络走向是,客户端访问cloudflare,流量通过cloudflare网络,回到家里的机器上。
客户端需要连接cloudflare,家里的机器需要启动cloudflared
作为 cloudflare网络 的连接器。
因此,需要家里,客户端到cloudflare的网络质量都足够好。才能获得一个比较正常的体验。
因为安全问题,我在家里没有使用任何tunnel。如果你决定使用,请做好访问控制和隔离。
可以使用
cloudflared tunnel --url http://localhost:8096
启动一个临时隧道进行体验。
终端会打印一个可以访问的URL,直接访问即可。
产品参考:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/tunnel-useful-terms/
Tunnel分三种:Remotely-managed、Locally-managed、Quick
我在服务器上大量使用Remotely-managed Tunnel,顺带还能免费享受cloudflare的argo加速服务。
解决了网络访问的问题后,接下来要决定的是存储问题。
存储影响使用体验的重中之重。比如说起播慢,拖动进度条慢,一般都是因为存储的延迟或带宽问题而产生的。
存储和日常使用体验相关的有两个指标:延迟和带宽。
小白或者刚开始使用的话,建议直接使用本机存储作为媒体库,能够先完整体验。
缺点就是所有媒体都要下载到本地。但延迟和带宽都没有什么瓶颈。
使用一段时间之后,本机存储大概率会被占满(比如丐版Mac Mini只有200G左右的可用空间)
那么可以选择外挂一个硬盘柜,硬盘柜里可以安装多个机械硬盘,同时连接到设备上进行使用。
因为硬盘就在本地,基本没有延迟。带宽也能满足使用需求。
我使用的是一个五盘位的硬盘柜,单盘顺序读取速度约100MByte/s,换算码流有800Mbit/s,完全满足日常使用了。
tips: 家庭使用不需要组Raid。组Raid在家庭场景下没有太多的必要(2025年)。切记做好备份和异地备份(云备份)。
我没有使用这种方式,所以没有太多经验。
像这个wiki里提到的小雅alist就是网络存储的一种。本质上是外挂一个网络硬盘。
一般是用alist,webdav+rclone进行挂载。看起来就像本地的一个盘,但是实际是远程的。
延迟和带宽都会存在巨大的瓶颈,带宽取决于网盘的下载速度。延迟取决于网盘的接口设计。
一般需要和本地rclone的LRU缓存一起使用以获得更好的体验。配合STRM文件可以加速Emby的刮削速度。
也有一种操作模式,是将串流直接302到实际的存储后端。但是不一定所有网盘都会持续支持这种模式。
严重情况下可能导致网盘封号。
搞定网络和存储之后,接下来就是在设备上进行播放了。
串流是将存储里的视频文件分片后,传输到客户端进行播放。
使用客户端的不同,会影响到视频解码的正确性。如果视频看起来颜色/亮度不对,那么大概率是播放器解码有问题导致的。
转码是为了解决家里上行带宽不够的临时解决方案。比如码流是25Mbit/s的视频,通过上行带宽20Mbit/s的网络进行传输就会有非常大的压力,可能导致客户端观看卡顿等问题。此时可以开启转码,实时将视频压缩到2Mbit/s,此时播放就毫无压力了。
但是因为经过转码步骤,起播可能比较慢,而且会特别消耗服务器的资源。在合理配置硬件转码器后,也是可用而已,算不上流畅。
也可以选择带缓存的客户端,尽可能缓存多一点数据到客户端,再播放,体验会好很多。
这个部分我也是一知半解。但我按照这个模式操作,没有遇到过问题。
Emby对于影视文件有着严格的命名规则及文件夹层级要求。
我是用的是tinyMediaManager进行刮削,并存储到对应的NFO文件中。
同时使用tinyMediaManager的媒体整理功能进行重命名和文件夹结构整理。
我的文件名设定是 ${title} ${- ,edition,} (${year}) - ${videoFormat} ${videoBitRate}
Emby会从NFO文件中读取,并使用Emby中的插件进一步深入刮削。