Wong's Cafe
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的问题。
到现在就解决所有问题了,最后一步就是连上去享受。
放一张截图: