自建影音串流平台 Take Two

2023-01-19 (Updated 2023-01-22)

我在上一篇文章写到自己是怎么自建smb服务器来串流自己的影音。当时因为客户端软件的限制,还有一些问题没有被解决:

这几天我找到了一个兼容性更强的解决方案,就是用jellyfin服务器, 好处有三:

唯一的坏处是无法随时串流Hi-Res文件,目前在官方客户端上还不能找到不transcode的设置(更新:可以用Gelli)。不过这个和samba可以共存,所以想听无损的时候还是可以用vlc之类的。

安装

参照官网文档即可,这一步很简单。arch linux arm可以直接从aur安装。

公网访问

这一步本来可以很简单,但是要首先感谢中国工信部封禁80 / 443端口,导致客户端只能用非标准端口,同时也导致无法使用acme.sh等软件注册ssl证书。

公网访问变难了但不代表不行,在实施行动之前我想到了两种解决方案:

方案优点缺点
ssh Tunnel或者wireguard之类的vpn软件连接媒体服务器一行代码就能搞定,不会有任何报错ssh tunnel或者wireguard要一直后台运行,对移动设备不友好
自己颁发签证不需要任何vpn软件,真正的公网访问安卓客户端配置较麻烦(但可行)

权衡利弊之后还是选了自己发签证的方法,因为虽然配置麻烦了点,但是后续几乎不用维护。

发签证

网上一堆教程,我不再造轮子了。

用这个就行,要记得顺带生成CA签证和pkcs12 bundle,因为后面会用到。

https://www.baeldung.com/openssl-self-signed-cert

记得 chown jellyfin:jellyfin * 来设置权限。

设置签证

在lan用http连上媒体服务器,去networking开https,然后选pkcs12证书,点save,然后

systemctl restart jellyfin

就可以了。现在可以尝试在lan用https端口连接jellyfin

开端口

记得在路由器和服务器上开端口,这一步我经常搞忘,每次都要开netcat调试。。

到现在,已经可以用浏览器访问ip/域名了,浏览器会提示那个服务器不能被验证,但签证都是我自己发的,对自己还是要有自信,并且加密是没有问题的,所以选择忽略警告。

安卓机的客户端设置

下jellyfin安卓客户端,安装CA证书,输url就可以连接了。

但是!!!有一个很坑的点,要确定你用的是最新版原生android webview,不要用bromite之类的替代品。这个bug我调试了一上午,最后开logcat一看发现是bromite的问题。

到现在就解决所有问题了,最后一步就是连上去享受。

放一张截图: screenshot