不识情愁枉少年,檐下赐酒结仙缘。
情难消受美人恩,仗剑江湖为红颜。
一首仙剑诗词仿佛又将我们带回到那个仙侠游戏佳作百出的90年代. 洗练的台词, 华丽的演出, 招招到位的打击感是属于那个年代的独特游戏记忆.
本文是”云芯一号云游戏服务器” 系列企划的开篇, 本企划将借助云芯一号这一强大的单板服务器平台, 在日新月异蓬勃发展的云技术协助之下, 与众位玩机爱好者们一起探索经典老游戏的云端之路.
作为系列企划的第一篇, 本文将以仙剑奇侠传为用例, 介绍相关云游戏技术的配置与使用. 闲话少叙, 现请众看官一齐踏上重温仙剑之路.
前置要求
使用 DOSBOX 运行 <<仙剑奇侠传>>
1 - Dosbox 作为一款优秀的 x86 模拟器为我们提供了完备的 DOS 模拟环境, 我们的 <<仙剑奇侠传>> 就将运行于 Dosbox 之上. 我们首先使用如下命令安装 Dosbox:
sudo apt install dosbox
2 - 为使 Dosbox 充分利用云芯一号的强大性能, 我们需要对 Dosbox 进行配置, 为此我们需要编辑 ~/.dosbox/dosbox-0.74.conf
文件, 详情如下 [1].
(1) 首先将 [dosbox]
一栏中的 memsize=16
修改为 memsize=128
, 从而给我们的 dos 虚拟机 128M 的大内存.
(2) 然后将 [cpu]
一栏中的 cycles=auto
修改为 cycles=max
使 Dosbox 能够不受限制地使用 CPU 资源.
(3) 最后将文件最后的 [autoexec]
一栏中添加如下代码:
mount c ~
c:
如此 Dosbox 在启动之后就会自动切换到 c 盘, 而 c 盘对应的是我们云芯一号 linux 的 home 目录.
3 - 下载安装仙剑奇侠传放到 home 目录下, 比如 /home/jishu/pal
4 - 在 Dosbox 下启动仙剑奇侠传:
cd pal
pal!
熟悉的画面, 熟悉的音乐, 熟悉的记忆再次浮现.
此外, 由于 Dosbox 提供的是完整的 Dos 环境, 这意味着我们可以运行完整的 Windows 98 [2], 而且在正确配置 libpcap
后还可以实现 Windows 98 连接互联网 [3].
* 题外话:
看到绿色背景的 Windows 98, 是不是又想起当年被蓝屏支配的恐惧呢? 不过, 正如朴树在其 1999 年的歌曲 \<\<New Boy\>\> 中所唱, “轻松一下WINDOWS98, 以后的路不再会有痛苦”, 确实, 随着微软的进步以及 NT 内核技术的普及, Windows 的蓝屏问题现在已经几乎不存在了.
配置云游戏环境: 画面传输
我们这里使用的是 VNC(Virtual Network Computing, 虚拟网络计算) 技术进行云游戏的图像传输. 可能有朋友会问为什么不直接使用 Linux 原生的 X11 进行图传, 又或是流行的远程桌面 RDP 协议.
我这里是基于如下两点考量: 1) 他们都不是为了实时画面传输而设计的, 2) 无法捕获GPU渲染的画面. 尤其是后者, 直接导致了后面两项技术无法使用.
现有的很多云游戏解决方案, 如 Parsec 等使用的都是基于 VNC 修改的方案, 由此可见 VNC 技术在云游戏领域内有一定的市场认可.
对于我们自己搭建 VNC 环境, 有一点需要注意的是 VNC 技术有 RealVNC, TightVNC, UltraVNC 等诸多实现方案. 其中 RealVNC 提供最新的 VNC 实现, 并且能够实现声音的传输, 是理想的方案.
可惜的是在嵌入式环境中 RealVNC 只提供树莓派的方案, 对于非树莓派的 Arm 板即便是强行安装也会因为缺少树莓派专有的 libbcm_host.so
动态库而无法运行.
这里我们选用的是 X11VNC
, 主要的考量是它可以直接通过 apt 工具安装从而避免了繁琐的编译等过程.
1 - 我们首先使用安装代码如下:
sudo apt install x11vnc
2 - 安装完毕后直接运行如下代码即可打开 x11vnc 服务:
x11vnc -ncache 10 -forever
3 - 最后在我们的电脑(非云芯一号)上安装 TurboVNC Viewer (支持 Mac, Linux, Windows, 可充分发挥 X11VNC 的速度), 或 RealVNC Viewer (更好的兼容性) 并输入 云芯一号的 IP 地址
就可以连接到我们的云芯一号并实现 图传 以及 游戏控制 了.
图传 及 游戏控制 的实机演示见以下录屏视频:
https://www.bilibili.com/vide...
配置云游戏环境: 音频传输
音频传输部分本文提供两种方案, 各位玩家可酌情选用.
- 方案1: 使用蓝牙
蓝牙配置可参见教程, 其优点是实时性强, 可以绝对保证音画同步, 且不占用网络带宽. 缺点是蓝牙传输范围以及穿墙等问题.
- 方案2: 使用 ffmpeg 以及 ffserver 进行音频推流
方案2是本文论述的重点, 也是云游戏的云音频技术所在.
我们知道 ffmpeg
是最为知名的全能型 音视频 编解码器, 提供了非常丰富的功能. 这里用到的主要是音频采集, 音频实时编码和推流功能.
而 ffserver
是 ffmpeg 配套的流媒体服务端程序(现在大火的直播也是流媒体服务的一种应用), 本文中二者的使用逻辑是 :
ffmpeg进行音频采集 -> 实时编码 -> 推送到ffserver -> 音频流广播
1 - 首先进行环境安装:
sudo apt install ffmpeg
该命令将同时安装 ffmpeg 本体和相关组件, 其中包括 ffserver.
2 - 然后配置ffserver, 具体为 创建 并 编辑 /etc/ffserver.conf
文件. 这里提供一个配置好的模板, 可直接复制使用 [4] :
Port 8090
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2M
ACL allow 192.168.0.0 192.168.255.255
</Feed>
<Stream test.mp3>
Feed feed1.ffm
Format mp2
AudioCodec mp2
AudioBitRate 64
AudioChannels 1
AudioSampleRate 44100
NoVideo
</Stream>
3 - 使用如下命令启动 ffserver :
ffserver -f /etc/ffserver.conf
4 - 使用 ffmpeg 捕获声卡输出的音频:
ffmpeg -f pulse -i default http://localhost:8090/feed1.ffm
其中, pulse
指的是从 PulseAudio
音频驱动中捕获系统音频, default
是指使用 PulseAudio
的默认输出频道, localhost
则是指输出到本机运行的 ffserver. 因为 ffserver 也可以运行在局域网或公网的其他机器上接收 ffmpeg 推流.
5 - 最后在我们的电脑上(非云芯一号)使用 VLC
等软件打开如下地址以接收音频.
http://云芯一号的IP:8090/test.mp3
这里的 test.mp3
对应的是 ffserver 配置文件中的 <stream>
一栏内给出的文件名.
PS: 注意二者的启动顺序, 一定是先启动 ffserver, 后启动 ffmpeg.
基于 方案2
的带声音的实机演示画面录屏见如下视频 (吐槽一下由于社区暂时不支持B站视频切p, 本来这个视频是上个视频的第二p的; 所以就只得在优酷上单独上传了这个视频并使用优酷作为视频源在此嵌入):
https://www.youku.com/video/X...
感谢大家耐心看完, 还请大家继续期待和支持后续作品, 预祝大家云游戏愉快!
参考文献
[1] Dosbox Wiki - https://www.dosbox.com/wiki/Dosbox.conf#Linux
[2] 在树莓派上安装 Windows 98 - https://magpi.raspberrypi.org/articles/run-windows-98-on-raspberry-pi-with-dosbox-x
[3] DOSBox装Windows 98 上网 - https://tieba.baidu.com/p/2292299208?alath=2&red_tag=3477870722
[4] ffserver Wiki -https://trac.ffmpeg.org/wiki/ffserver