MoreRSS

site iconvillivateur | 冯锦瑾修改

嵌入式工程师,博客名:嵌入式工程猫。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

villivateur | 冯锦瑾的 RSS 预览

使用树莓派 4 和 Moonlight 串流游戏的实践

2026-05-20 09:16:40

家庭内网,串流打游戏是真需求,电脑放书房,在客厅电视玩,真的爽。

设备清单

  • Windows 11 PC,显卡 RTX5070,安装 Sunshine
  • 树莓派 4B,2GB RAM,安装 Lineage OS TV,以及 Moonlight 安卓版
  • XBOX 游戏手柄
  • 小米电视 ES55
  • 千兆以上的有线家庭内网

软件说明

  • Sunshine 在 这里 下载
  • Moonlight 在 这里 下载
  • Lineage OS TV 在 这里 下载

    小声 bb ,这个开发者很牛逼,但他不允许其他人给他的固件做镜像重分发,必须到他那个满是广告的网页下载

为什么我要选这些软硬件

  • PC 不谈,显卡是中端显卡
  • 用树莓派和小米电视是因为,我家已经用这套设备很久了,基本上是完美的安卓电视体验,电视仅用作显示,不联网,所以就没有广告
  • konstakang 给树莓派 4 适配的 Lineage OS,是目前能找到的最完美的树莓派安卓固件
  • Sunshine 和 Moonlight,是当今做串流的不二之选
  • XBOX 手柄,我只有这么一个手柄

部署方案

Lineage OS 的刷写不难,上述下载站有介绍。Moonlight 和 Sunshine 的部署都非常简单,开箱即用。

手柄是连接树莓派的,蓝牙连接即可,安卓系统很方便连接。

核心的坑都在下面:

  1. 电视的 HDMI 图像模式,一定要改成“游戏模式”,不然延迟爆表
  2. 我的树莓派性能,只能支持到 1080P 60Hz 的串流,再高就卡顿了
  3. Moonlight 解码模式一定要选择 H.264 。默认的是 HEVC,解码要 90ms,改了之后只要 20ms。

实际体验

1080P 画质,在 4K 电视上还是能接受的。另外幸好整体性能支持 60Hz,不然 30Hz 会瞎眼。

总体的输入延迟(手柄按下到画面响应),大概 100ms,有很小抖动。抖动我觉得是蓝牙连接不稳定的原因,但基础延迟这么大,大概率还是电视显示延迟的原因。

如果我没分析错的话,手柄到树莓派大概 10ms,树莓派到电脑 1ms,电脑处理 10ms,传回树莓派 1ms,树莓派解码 20ms,电视显示延迟可能得有 50ms 以上。

虽然延迟可观,但已经能玩大多数游戏了。(音游是不可能的,我上面的 100ms 就是用 muse dash 测出来的。)

试了下《地平线 5》,跟我在电脑上玩的区别不大。《欧卡 2》也能玩。其他的以后慢慢试。

如果把电视换成大点的显示器(或者更高端的电视),应该可以再减 40ms 延迟,树莓派换成 x86 平台的小主机,还能再减 15ms。这样整体延迟就到 40ms 左右了,音游甚至都能拼一下。

如果有相同需求的朋友,可以找我交流,或者我哪里做得不对的也欢迎指出。

维护 Nginx 时,什么时候应该用 reload,什么时候应该用 restart?

2024-10-06 22:15:51

本文是“攻玉计划”的一部分,翻译自 https://stackoverflow.com/questions/13525465/when-to-restart-and-not-reload-nginx/20215497

问题描述

使用 Nginx 时,什么情况下 reload 无法满足需求,而必须要使用 restart 命令呢?

如果 Nginx 进程占用了过多内存,是不是应该用 restart 来重启?如果修改了 Nginx 的核心配置,或者某些插件的配置,是不是也需要使用 restart 命令?

修改 Nginx 配置后,用户既可以使用 restart 也可以使用 reload 来使配置生效,见 Ubuntu 上 /etc/init.d/nginx -h 的输出。

那么,哪种方案更优呢?

回答 1

reload 比 restart 更安全,因为如果使用 reload 命令,在旧的进程终止之前,Nginx 会先解析配置文件,如果配置文件有问题,那么就会退出重启流程。

也就是说,如果你的配置文件有问题,比如存在语法错误,那么使用 restart 命令后,Nginx 会先停止,然后就无法再启动了。

reload 命令如果成功执行,同样会终止旧的进程,所以如果存在内存泄漏问题,也一样可以清除掉。

回答 2 & 3

我遇到过一种情形,如果我修改了监听的 IP 地址,也就是配置文件里的 listen 字段,那就必须使用 restart 命令。

从 1.6.x 版本开始,如果仅把监听的 IP 地址从一个改为另一个,那么 reload 可以生效,但如果把监听地址从 listen *:80 修改为 listen x.x.x.x:80,依然需要 restart。

我只验证了 IPv4 的场景,IPv6 应该类似。

译者按:译者今天遇到过一样的问题,我修改了 listen 80; listen 172.0.0.1:80,结果发现 reload 不生效,必须 restart。

批量修改 qbittorrent-nox 内种子的 tracker 地址

2024-09-13 20:40:18

背景

馒头 PT 站的默认 tracker 出了问题,我到现在都没搞懂是被墙了还是我自己设备的问题,反正就是无法访问默认的 .cc 域名,但 .io 的域名是可以的。

但手动修改 .cc 倒 .io ,也太麻烦了,我有上百个种子。

我是在一台 Ubuntu 服务器上运行的原版 qbittorrent-nox,用 webui 访问。

解决方案

qbittorrent-nox 会在当前用户的家目录中的 ~/.local/share/qBittorrent/BT_backup 目录内存放所有正在使用的种子(虽然我也不清楚为啥名字里有 backup),vim 看了一眼,就是很正常的种子文件格式。

所以,理论上,直接批量替换这些种子文件里面的 tracker URL,就能解决问题。

说干就干,先停掉 qb 的服务,然后备份 BT_backup,再在 BT_backup 内执行 find . -type f -exec sed -i 's/example.cc/example.io/' {} \; ,最后重启 qb 服务,果然解决问题。

把 vim 的缩进设为 4 个字符,并且 tab 自动转空格

2024-05-07 20:36:47

修改本用户的 ~/.vimrc 文件,添加以下内容。如果要想 sudo vim 也生效,那 /root/.vimrc 也要改。

1
2
3
4
5
6
7
filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

上面的注释已经解释了含义。

不用 snap,在 Ubuntu 上安装 certbot

2024-05-07 20:36:30

Certbot 官网居然只提供 snap 方式安装,而 snap 是我在 Ubuntu 上最不喜欢的东西

那就直接用 pip 安装吧~

1
sudo apt install certbot python3-certbot-nginx

在 Ubuntu 中启用 swap

2024-05-07 20:35:55

首先,swap 多大比较好?如果你有一个 2G 内存的服务器,偶尔内存有点吃紧,那就再开 2G 的 swap 吧。其他的情况,随缘。如果内存不紧张,就不用开。

依次执行:

1
2
3
4
5
6
7
8
9
10
sudo fallocate -l 2G /swapfile # 在根目录下创建一个 2G 大小的 swap 文件
sudo chmod 600 /swapfile # 修改权限配置
sudo mkswap /swapfile # 把这个文件作为 swap
sudo swapon /swapfile # 启用 swap

sudo vim /etc/fstab # 编辑 fstab 以自动挂载 swap 文件
# 添加以下内容
/swapfile swap swap defaults 0 0

sudo swapon --show # 查看 swap 是否已经开启成功