分类存档: 教程

树莓派升值计划——流畅播放 30 帧 1080p 网页视频

TL;DR

在树莓派 4B (实测 4G 内存,目测 2G 够用) 上流畅播放网页视频需要使用 OpenGL 驱动,并将 PulseAudio 调整至使用中断而不是时钟。可选的性能提升有切换至 64 位内核以及超频,但这些只能轻微提升。

可以做到的效果是 YouTube、bilibili、爱奇艺播放 30 帧 1080p 的视频的时候视频没有大卡顿(主要是偶尔有撕裂),音频完全没有卡顿。

背景

树莓派是一款便宜的卡片尺寸的小电脑。但它体型虽小五脏俱全,可以运行完整的 Linux 系统。最新的顶配版本树莓派 4B 4G 内存版仅需 55 美元,实乃便宜好用的码农玩具。考虑到它的价格,只要能实现任意一个「实用」功能就称得上是回本,而这次我想要让它「物超所值」——接在电视上播放 1080p 在线视频。

小道消息:据说树莓派是亏本卖的

树莓派一出现其实就打着可以充当视频播放器的招牌,但实际上它的实现与日常使用差距很大——早先树莓派只支持 OpenGL ES,并且视频硬解必须使用它的闭源驱动,这导致只有少数做了适配的软件可以充分利用树莓派独特的硬件资源,例如 Kodi 和 SteamLink(强烈安利,可香了,当年沉迷在客厅下自走棋)。说它硬件资源独特是因为它有着孱弱的 CPU 和难以利用的 GPU,以及非常局限的内存(1G)。而这一切随着树莓派 4 的到来不再是问题——CPU 增强,OpenGL 驱动成熟(顺带也解决了 64 位内核的驱动问题),以及 4G 内存版本的出现。

这让我重新捡起了曾经用树莓派代替上网本(即升值计划)的尝试。我的目标只有一个——能看 YouTube 视频。

继续阅读 »

使用 XLaunch 一键启动 WSL 中的 Gnome 3

升级到 Windows 1803 后可以跑更多的桌面应用了。虽说 WSL 完全不是为此设计的,但我就是乐此不疲地看着热闹,一次次地试探 WSL 的最大潜力(误,只是好玩而已)。虽然还是存在一些问题,Gnome 3 也不意外地可以运行。这篇文章将讲述如何使用 XLaunch 一键启动 WSL 中的 Gnome 3。这篇文章便是在 WSL 上的 Gnome 中完成并发布的。

由于我未能可复现地安装 Gnome 3,暂时就不详细讲怎么安装了。首先需要升级 Ubuntu 至 18.04 LTS。需要安装的包有 ubuntu-desktop 和 mesa-utils,前者包含 Gnome 3 后者包含软件渲染器(因为 WSL 不支持直接硬件访问)。


手动启动

安装完成后可以先尝试手动启动 Gnome。方法是先启动 dbus 服务:(每次启动 Gnome 前都建议重启 dbus 服务,以防 dbus 挂了)

然后使用 XLaunch 打开一个 One large window 的 X Server 并前台启动 Gnome:(或其他 Windows 上的 X Server 实现,并请根据实际 X Server 的端口修改 DISPLAY 的值)

不像之前版本的 WSL,现在使用 dbus 不需要任何的修改,因为 Windows 1803 的 Win32 及 WSL 子系统已经全部支持 Unix Domain Socket 了。对于 Gnome 3,则需要指定其以 x11 的方式启动。效果大概如图:

继续阅读 »

使用 VSCode 运行 Task 并自动 Attach Debugger

本文将讲述如何在 VSCode 中使用 Attach 模式 Debug 的时候,也能像 Launch 模式一样一键启动 Debuggee. 具体原理是使用 preLaunchTask 并将此 Task 的 isBackground 属性设置为 true.

VS Code Debug Protocol 描述了两种不同的 Debug 方式:Launch 以及 Attach. 他们分别对应了 VSCode 负责启动程序并 Debug,以及 VSCode 去 Debug 一个正在运行的程序,包括非本地的程序.

其中,Launch 模式的潜在含义是,VSCode 将负责管理 Debuggee 的生命周期,也就是说 VSCode 负责启动及停止,而这些操作对于用户而言就是按一下按钮. 反观 Attach 则是另一种设计:用户必须自行启动 Debuggee,可以在本地可以在远程,只要 Debugger 能够与之通信,而 VSCode 只负责将 Debugger 与 Debuggee 对接.

在本地开发本地运行本地调试的情况下,Launch 无疑是最好的选择,因为一旦配置完毕,今后 Debug 只需要一键启动及一键停止. 这种开发环境十分的理想化,尽管可以满足大多数需求,但当环境变得复杂时,Attach 模式将是无法避免的. 例如执行代码的机器一定是在远程,这常见于跨平台开发,包括在 Windows 上使用 WSL 做 Linux 开发,以及使用 QEMU + GDB 做内核开发. 尽管微软在近期对一些官方插件就 WSL 进行了优化,即可以使用 Launch 模式在 WSL 中运行程序,但第三方插件仍然不可避免地需要使用 Attach.

继续阅读 »

在 WSL 中使用 pulseaudio 播放声音

虽说微软最初发布 WSL 的时候就明确表示这是一个只针对开发者的平台,而现在的战略也只是更进一步支持服务器级别的应用,并没有支持桌面应用的计划(可是 CUDA 和 OpenCl 你总得支持吧),但我在很愉快地用它开发之余,也在很愉快地看热闹不嫌事大地企图让各种 GUI 应用跑起来. 得益于类 unix 系统上显示与音频的网络化设计,可以在 Linux 完全没有相关硬件资源的情况下通过网络方式用 Windows 上的服务器显示与播放,再加上 WSL 和 Win32 本身就是同一内核上的两个子系统,这样做相当于就是在原生 Linux 上正常使用声音与显示,只是没有高效的 unix socket 罢了.

关于 WSL 上跑 GUI 的相关文章已经相当多了,然而播放声音的却没有一篇完整的教程. 这里将介绍如何使用 pulseaudio 来让 WSL 播放声音.

继续阅读 »

ffmpeg 一图流参数

ffmpeg 似乎更新之后老的参数写法全部失效了,直接导致了我昨天战 ffmpeg 战了三小时. 不过最后在国外的网站上找到了一种很简单的参数写法,效果不错,视频码率能压到 17kbps

不用指定时间,时间会根据音乐的长度自动调整

Windows RT 飞天钩使用教程

Across the Great Wall, we can reach every corner in the world.

新入手了 Surface RT ,正值绕开数字签名的方法大幅简化, XDA 上的移植 也如雨后春笋啪啪啪地就这么冒出来了. 我看到有 Python 的时候就开始尝试飞天钩了.

之所以立刻就想到是因为前些日子在 iOS 上装 GoAgent 的时候死活不能用,一怒之下把 Windows 上客户端里的 proxy.py 直接拖进了 iPad,然后居然成了,没有任何修改. 果然 Python 的跨平台是靠谱.

废话不多说了,正文开始.

继续阅读 »