YouTube playback on Linux

AV,PC Mar 02, 2019

NASとして使ってたサーバのマザーボードを交換してCoffee Lakeベースにした。ARM系で良かったのかもしれないけど、Linuxのdriverのサポートでamd64系が無難そうというのと、今回からテレビにも繋いで動画見る用途でも使ってみようと考えてARM系にしなかった。CPUとして採用したPentium G5600はUHD630 (3e91)というGraphic coreが組み込まれている。最終的にはYouTubeとかのネット動画再生環境として満足できる環境になったが、色々カスタムで入れないと動かなかったので、そのメモ。

ポイントは二つ:
drm-tip
Gnome-Wayland

まず現時点のDebian busterのデフォルトカーネル4.19で試す。Xorgのvesa driverでしか動かなかった。その環境のLXDE上のchromeでYouTubeを見ると、酷い動画再生品質に驚いた。tearingというキーワードでLinuxの動画再生環境ではよく話題に上がっている問題が起きている。現象としては、カメラがパンして背景全体が動く場面で画面の真ん中に水平に切れ目ができる。V-sync(垂直同期)がずれる。DAOKO×中田ヤスタカ「ぼくらのネットワーク」で顕著にtearingが見られた。

Window manager (composer) がV-syncに大きな影響を与えてるらしい。LXDEのような軽量DEではなくGnome/KDEを使うことがtearing解決のまず一歩のようだ。そしてXorgではなく、構造上tearingが起きにくい設計になってるWaylandというdisplay serverを使うことも推奨されてる。DebianはbusterでWaylandをデフォルトにしているので、これを機会に、stretchからbusterにアップグレードした。

% unman -a
Linux 4.19.0-2-amd64 #1 SMP Debian 4.19.16-1 (2019-01-17) x86_64 GNU/Linux

Xorgのvesa driverでは動いたが、Waylandは動かなかった。Kernel 4.19.16のDRM driverがまだUHD630に対応してない?

/var/log/messages
gnome-shell[1984]: Failed to create backend: Could not find a primary drm kms device

ここで最新のDRM driverのレポジトリであるdrm-tipを試してみる。drm-tipは最新のカーネルに組み込まれた形で開発されていて、cloneすると、その中でカーネル全体をコンパイルできる。この時点のdrm-tipではkernel 5.0.0-rc7。

まず、kernel treeとは別にIntelから配布されてるfirmwareをinstall。

apt-get install firmware-misc-nonfree
git clone git://anongit.freedesktop.org/drm-tip
cd drm-tip
cp /boot/config-4.19.0-2-amd64 .config

.configを編集

CONFIG_DRM_I915=m
CONFIG_FW_LOADER=y
CONFIG_EXTRA_FIRMWARE="i915/kbl_dmc_ver1_04.bin i915/kbl_huc_ver02_00_1810.bin i915/kbl_guc_ver9_39.bin"
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

後は通常通りmakeして出来た.debをinstall。

make oldconfig
make deb-pkg LOCALVERSION=-custom

Browserはchromeを使う。

Gnome-Waylandの環境で、YouTubeはVsyncが破綻することなく綺麗に再生できるようになった。

 

% uname -a
Linux 5.0.0-rc7-custom #6 SMP Fri Feb 22 00:58:02 CST 2019 x86_64 GNU/Linux


% lshw -class video
*-display
description: VGA compatible controller
product: 8th Gen Core Processor Gaussian Mixture Model
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:124 memory:a0000000-a0ffffff memory:90000000-9fffffff ioport:3000(size=64) memory:c0000-dffff


% lspci -nn -v
00:02.0 VGA compatible controller [0300]: Intel Corporation 8th Gen Core Processor Gaussian Mixture Model [8086:3e91] (prog-if 00 [VGA controller])
Subsystem: ASUSTeK Computer Inc. 8th Gen Core Processor Gaussian Mixture Model [1043:8694]
Flags: bus master, fast devsel, latency 0, IRQ 124
Memory at a0000000 (64-bit, non-prefetchable) [size=16M]
Memory at 90000000 (64-bit, prefetchable) [size=256M]
I/O ports at 3000 [size=64]
[virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: [40] Vendor Specific Information: Len=0c <?>
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [100] Process Address Space ID (PASID)
Capabilities: [200] Address Translation Service (ATS)
Capabilities: [300] Page Request Interface (PRI)
Kernel driver in use: i915
Kernel modules: i915

AudioはUSB-DAC経由で出してる。それに必要なkernel configは

CONFIG_SND_HDA=y
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m

さらに、HDMIに音を乗せるには多分これらが必要。(使ってないので未確認)

CONFIG_SND_HDA_INTEL=y
CONFIG_SND_HDA_CODEC_HDMI=y
CONFIG_SND_HDA_I915=y

さらに、今までremote loginでしか使ってなかったせいかもしれないが、videoとsoundを機能させるためには以下のgroup設定が必要だった。

sudo adduser Debian-gdm audio
sudo adduser Debian-gdm video
• • •
• • •
Ippei813 top
March 2019
S M T W T F S
 12
3456789
10111213141516
17181920212223
24252627282930
31  
Original Wordpress Themes by priss, customized by Ippei