只能说还是沙雕群友思路多。我的格局还是太小了被局限在通常的解决方法上。因为大多数直播的情况下推流的电脑肯定是自己家里的电脑。很少有我这种循环放LoFi的需求可以在一个无人值守的云服务器上干这个事情的。
但是问题又来了。我的云主机是一个虚拟机,并没有显示器和GUI界面而OBS是一个GUI程序。所以第一个要解决的问题是给云主机安装图形界面并能通过远程登录的方法来访问服务器。(后面发现可能还有更简单更省资源的方法比如用PyLivestream 去调用FFmpeg https://github.com/scivision/PyLivestream 不过因为我已经弄好了GUI的界面,目前懒得折腾了等以后有空再说吧)
这里我推荐用XFCE做GUI因为系统占用比较小。然后安装一个VNC Server来远程登录GUI界面。VNC有点类似Windows的远程桌面。我这里装的TightVNC。我发现TightVNC还有个好处他似乎是能够虚拟一个屏幕给Linux的,所以当你的VNC Client关闭以后OBS也还是在运行的。我不知道其他VNC Server是不是也是有类似的效果,有玩过的大佬在评论里说说。
安装过程可以参考:
How to Install a GUI Desktop for Ubuntu Server with XFCE and VNC
Create a Streaming Server with OBS and Ubuntu 需要注意的是安装OBS和一些其他软件的时候最好不要用SNAP的包,最好去官网下原来的安装程序。不知道为什么我用SNAP的包似乎在VNC下运行会遇到权限问题,导致程序不能运行。
等全部安装完以后就可以远程登录云主机用OBS直播了
在播放软件和obs选择相应的设备后就可以通过音乐播放器来播放你的lofi歌单而不是限制在视频的内嵌音频了。音乐播放器的话推荐strawberry因为开发还是比较active而且还能够选择输出设备(比较流行的rythmbox好像不行)。还有一个小问题是我一开始用modprobe激活snd-aloop这个module后用aplay -l打印声音设备一直显示sound card not found。然后也不知道是重启了几把还是改了asound的配置文件才显示。所以对alsa驱动比较熟悉的大佬可以评论一下到底怎么回事。
在starwberry中选择之前激活的ALSA loopback输出设备
在obs中选择之前激活的loopback输入设备
至于上传文件和视频的话可以安装一个FTP Server到云服务器,然后用FileZilla之类的客户端上传视频文件。具体FTP服务器安装可以参考:Install an FTP Server With ProFTPd on Debian or Ubuntu
最后要说一下的是因为我的服务器比较拉只有双核所以就播放一个720p的视频都能够把cpu的占用率用到80-90%。所以需要高分辨率推流的话可能需要4-8核的处理器才行。2核的极限大概是在480p 24fps并且obs的画布大小要和视频分辨率一样这样推流的时候obs就不用再缩放分辨率。视频转码的话可以用ffmpeg来转,比如要转成852x480 24fps 的mp4视频可以用下面的命令:
ffmpeg -i “输入文件名” -vf scale=852:480 -r 24 “输出文件名”.mp4有事没事也可以来听听我的lofi电台:P