Ubuntu 20.04 环境下 Plex Media Server + TV tuner 设置笔记

Linux 系统下使用 Hauppauge TV tuner 踩了一堆坑。所以我决定单独写一篇文章记录一下各种问题和解决方法。

安装与设置

1. 安装 TV tuner 驱动

Hauppauge 官方给了详细的驱动安装方式,而且还提供了 PPA 源,可以直接通过 apt 安装。

2. 安装 Plex Media Server

Plex 官网主页上给出的是 deb 下载,但是经过搜索,找到了 Plex 官方提供的 PPA 源。这里推荐用 PPA 方式安装,方便升级、

3. 确认 TV tuner 正常工作

我这里使用的是 TV tuner for Xbox,实际上就是 WinTV-HVR-955Q 的换壳版本。可以通过 dmesg 确认 TV tuner 的内核驱动工作正常。

$ dmesg | grep -P "(dvb)|(cx231xx)"
[    3.459264] rc rc0: Conexant Hybrid TV (cx231xx) MCE IR no TX (2040:b123) as /devices/pci0000:00/0000:00:17.1/0000:14:00.0/usb3/3-3/3-3:1.0/rc/rc0
[    3.459347] input: Conexant Hybrid TV (cx231xx) MCE IR no TX (2040:b123) as /devices/pci0000:00/0000:00:17.1/0000:14:00.0/usb3/3-3/3-3:1.0/rc/rc0/input6
[    3.809380] cx231xx 3-3:1.1: New device Hauppauge Hauppauge Device @ 480 Mbps (2040:b123) with 7 interfaces
[    3.809704] cx231xx 3-3:1.1: Identified as Hauppauge WinTV-HVR-955Q (111401) (card=21)
[    4.037824] cx25840 4-0044: cx23102 A/V decoder found @ 0x88 (cx231xx #0-0)
[    6.266374] cx25840 4-0044: loaded v4l-cx231xx-avcore-01.fw firmware (16382 bytes)
[    6.358990] cx231xx 3-3:1.1: v4l2 driver version 0.0.3
[    6.538517] cx231xx 3-3:1.1: Registered video device video0 [v4l2]
[    6.538570] cx231xx 3-3:1.1: Registered VBI device vbi0
[    6.538572] cx231xx 3-3:1.1: video EndPoint Addr 0x84, Alternate settings: 5
[    6.538574] cx231xx 3-3:1.1: VBI EndPoint Addr 0x85, Alternate settings: 2
[    6.538575] cx231xx 3-3:1.1: sliced CC EndPoint Addr 0x86, Alternate settings: 2
[    6.538576] cx231xx 3-3:1.1: TS EndPoint Addr 0x81, Alternate settings: 6
[    6.538691] usbcore: registered new interface driver cx231xx
[    6.568896] cx231xx 3-3:1.1: audio EndPoint Addr 0x83, Alternate settings: 3
[    6.568900] cx231xx 3-3:1.1: Cx231xx Audio Extension initialized
[    6.660767] dvbdev: DVB: registering new adapter (cx231xx #0)
[    6.660769] cx231xx 3-3:1.1: DVB: registering adapter 0 frontend 0 (LG Electronics LGDT3306A VSB/QAM Frontend)...
[    6.660771] dvbdev: dvb_create_media_entity: media entity 'LG Electronics LGDT3306A VSB/QAM Frontend' registered.
[    6.661006] dvbdev: dvb_create_media_entity: media entity 'dvb-demux' registered.
[    6.661306] cx231xx 3-3:1.1: Successfully loaded cx231xx-dvb
[    6.661308] cx231xx 3-3:1.1: Cx231xx dvb Extension initialized

ESXi 下,如果出现 Error 27 或者 Error 110 之类的,则意味着虚拟化不成功。如果使用 USB 直通可能会被误标记成鼠标设备。推荐使用单独的 PCIe 转 USB 3.0/3.1 卡,然后将整个卡直通给虚拟机使用。

驱动成功之后就可以进入 Plex 的 Live TV & DVR 里面扫描频道了。

给 Plex 录制功能分配临时空间

在使用 Live TV 时,Plex 需要将节目实时录制。此项功能无法关掉,猜测是为了加入暂停和回放功能。虽然在退出 Live TV 的时候,Plex 会自动回收相应的临时存储空间,但是如果要长时间看电视的话,依然要分配足够多的时间给视频录制功能。

这个临时空间是在 设置 -> 转码器(Transcoder) 下面设置的。将 Transcoder temporary directory 设置到一块独立硬盘上面,避免塞满 root 造成系统运行异常。

另外,也有教程指导将转码临时空间设置到内存上去(/dev/shm),这个就要取决于系统内存大小了。毕竟家用服务器上吃内存的服务也挺多的,机械硬盘的写入速度也完全够用,还是放到硬盘上比较好。

重启 TV tuner

Live TV 在使用过程中经常会遇到服务崩溃的情况,Plex 官方修了很久也没完全修好。有时候重启 Plex Media Server 服务之后,Live TV 依然报错,这个时候就要重启 TV tuner 了。

首先,找到 TV tuner 所在的 USB 控制器以及接口(USB 树节点)。

$ sudo grep Hauppauge /sys/bus/usb/devices/*/product
/sys/bus/usb/devices/3-3/product:Hauppauge Device

然后,通过禁用再重新启用对应的 USB 接口,来重启 TV tuner。

$ sudo systemctl stop plexmediaserver.service
$ echo 0 | sudo tee /sys/bus/usb/devices/3-3/authorized
0
$ echo 1 | sudo tee /sys/bus/usb/devices/3-3/authorized
1
$ sudo systemctl start plexmediaserver.service

用这种方式可以单独重启 TV tuner,避免重启整个系统。

重置 PCIe to USB 3.0 转换卡

在使用过程中,我还遇到过完全找不到 TV Tuner 的情况。可以通过重置 PCIe to USB 3.0 转换卡来解决。

首先,找到 USB 卡的 PCI 总线 ID。

$ lspci
...
14:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03)
...

然后,重置 PCIe 设备

$ echo 1 | sudo tee /sys/bus/pci/devices/0000\:14\:00.0/remove
1
$ sleep 1
$ echo 1 | sudo tee /sys/bus/pci/rescan
1

然后再通过 dmesg | grep dvb 来确认系统已找到并成功驱动 TV tuner。

添加新评论