在Plex或Kodi上看电视

当我们在NAS上搭建好Plex Media Server,就可以在Plex客户端上轻松观看影视剧,通过PlexKodiConnect就可以在Kodi上连接到Plex数据库进行影视观看。这个部分网络上教程很多。但是如何在Plex或Kodi上看各大电视台的内容呢?这就需要在Plex上配置电视直播和数字录像机(Kodi中也叫PVR)了。

# 电视直播源和电子节目单

现在国内IPTV已经比较普及了,家里安装的电视机顶盒只要没有接闭路电视线,基本上就都是使用IPTV的方式看电视。简单地说就是将电视节目以直播视频流的形式进行播出,机顶盒通过访问直播流地址进行观看,并且可以通过添加一些参数来查看往期节目。既然是网络流,主要就是几种格式:RTP、RTSP、RTMP、HLS、m3u8等。这些格式是封装格式,类似于MP4、MKV这些。所以我们只需要找到这些地址就可以播放视频了。

## 直播源地址获取

通常一个频道是一个直播流地址。如果想要在Plex或Kodi中看电视直播,我们需要将这些频道的直播流地址组织成一个文件,后缀是 m3u 。这个文件大概是这样的。不以 `#` 开头的行是视频流地址,地址前面以 `#` 开头的行是地址的元数据,通常有频道编号、名称、logo等信息。

```m3u8
#EXTM3U
#EXTINF:-1 tvg-id="1" tvg-name="CCTV1" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV-1综合HD
http://39.134.115.163:8080/PLTV/88888910/224/3221225618/index.m3u8
#EXTINF:-1 tvg-id="2" tvg-name="CCTV2" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/c/ce/CCTV-2_Logo.png" group-title="Business",CCTV-2财经
http://39.134.115.163:8080/PLTV/88888910/224/3221225619/index.m3u8
#EXTINF:-1 tvg-id="3" tvg-name="CCTV3" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/34/CCTV-3_Logo.png" group-title="Entertainment",CCTV-3综艺
http://39.134.115.163:8080/PLTV/88888910/224/3221225634/index.m3u8
#EXTINF:-1 tvg-id="4" tvg-name="CCTV4" tvg-logo="http://epg.51zmt.top:8000/tb1/CCTV/CCTV4.png" group-title="Undefined",CCTV-4中文国际
http://39.134.115.163:8080/PLTV/88888910/224/3221225621/index.m3u8
#EXTINF:-1 tvg-id="5" tvg-name="CCTV5" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/33/CCTV-5_Logo.png" group-title="Sports",CCTV-5体育
http://39.134.115.163:8080/PLTV/88888910/224/3221225633/index.m3u8
```

如何获取电视直播流地址呢?主要两种方法:

1. 网络抓包。根据[相关参考文章](https://zhuanlan.zhihu.com/p/114037061?from_voters_page=true),基本的思路是让机顶盒通过电脑上网(连电脑热点或挂电脑代理),通过Wireshark软件分析网络中的数据包,提取出视频流的链接,编写成 m3u 格式的媒体源文件即可。
2. 网上搜索。网络上有一些已经整理好的视频流地址,例如仓库 [iptv-org/iptv](https://github.com/iptv-org/iptv) 的。也有一些别的仓库,例如 [Tvlist](https://github.com/imDazui/Tvlist-awesome-m3u-m3u8) 、 [MyIPTV](https://github.com/SPX372928/MyIPTV) 等,都有一些整理好的。直接拿过来就可以用了。比如我家里有 IPv6 地址,所以使用的是 MyIPTV 仓库中 `河南PLTV移动CDN修改版IPv6.txt` 提供的地址,并组织成了 m3u 文件。

获取到了媒体源文件,我们可以用一些视频播放器打开测试一下,例如 PotPlayer 、 VLC 等。也可以使用 ffplay 命令行工具测试视频源能否使用、是否流畅。

![image.png](/media/3acfe7af-e1b4-4026-8e25-e9b4a6abf723_image.png)

## 电子节目单获取

只有直播源就可以在Kodi上看直播了,但是如果没有电子节目单(Electron Program Guide, EPG),想在Plex上看电视直播,貌似是不行的。而且如果没有EPG,在Kodi上也无从得知当前播放的是什么节目,也无法实现电视录像机的功能。

其实电子节目单的获取非常简单,有现成的服务可以使用,即 [epg.51zmt.top](http://epg.51zmt.top:8000/) ,里面提供了几乎所有能找到的电视台的电子节目单。通常软件所需要的是XML格式的电子节目单,这个网站也提供了[节目总表](http://epg.51zmt.top:8000/e.xml)以及[央视+卫视节目表](http://epg.51zmt.top:8000/cc.xml)。甚至还可以将节目源的 m3u8 上传,网站会自动将该节目源与网站所支持的频道进行匹配,得到带有台标和EPG的m3u文件。

![image.png](/media/6276924d-72ff-4fe7-b2c8-405f53895562_image.png)

除了该网站,[iptv-org/epg](https://github.com/iptv-org/epg) 仓库也提供了相应的 EPG ,但不是很全。此外还可以自己搭建电视猫、[CCTV节目单](https://tv.cctv.cn/epg/) 爬虫,自行提供 EPG。

有了节目源和节目单,数据源的获取工作才算完成。剩下的只需要做配置即可。

# Plex上配置电视直播和数字录像机

Plex并不支持直接使用 m3u 文件作为电视直播源,我们需要安装一个软件 [xTeVe](https://github.com/xteve-project/xTeVe) ,这个软件的作用是搭建 m3u 文件与 Plex 电视直播功能的代理,也就是 Plex 通过 xTeVe 获取播放源。我们也可以将电子节目单集成在 xTeVe 中,统一管理。

## xTeVe 安装与配置

我比较推荐使用 Docker 部署 [xTeVe_guide2go](https://hub.docker.com/r/alturismo/xteve_guide2go) 镜像,部署方法在文档中已经写明了。xTeVe 使用的是 34400 端口,部署完成后访问 `http://xTeVe地址:34400/web/` 即可打开其 Web 管理界面。点击左侧 Playlist 即可进行视频源配置。

> 刚安装好的 xTeVe 可能左侧不会出现 XMLTV 和 Mapping 两栏,后文会介绍如何打开。

![image.png](/media/0b86a386-af21-455a-a3ca-a31e1b9c31c0_image.png)

点击 New 按钮后弹出一个对话框,选择 M3U 类型,然后在 M3U File 中输入地址,可以是本地文件的地址,也可以是网络地址。我这里使用了自己修改后的 m3u 文件,所以是本地地址。Tuner / Streams 一项中填写允许的最大同时连接的设备数,我这里填了10,以保证支持足够的设备同时观看。

但此时依然还不算配置完成。点击左侧的 Filter ,通过过滤器筛选出需要显示的视频源。

![image.png](/media/853ffb36-4cf5-4a04-ab34-a6103f55b2f0_image.png)

在 Filter Rule 中,虽然不支持正则表达式,但是也可以使用一些特殊字符实现通配。首先如果像图中,只写 `CCTV` 那么只会筛选出包含 `CCTV` 的频道。如果写 `CCTV {1080p}` 则会筛选出包含 `CCTV` 且包含 `1080p` 的频道。具体用法请参考[文档](https://github.com/xteve-project/xTeVe-Documentation/blob/master/en/configuration.md#filter)。

点击左侧的 Settings ,将 EPG Source 一项修改为 XEPG ,点击 Save 按钮保存。

![image.png](/media/37740587-8b86-49ab-a10e-135ec705cda5_image.png)

刷新页面,会发现左侧多出了一个 XMLTV 和 Mapping 菜单项。进入 XMLTV 可以配置 EPG。我们将之前介绍的 EPG 的地址配置到 XMLTV 中,并进行命名,例如 `51zmt` 。

![image.png](/media/2d2e3ba5-6be8-4987-a8ae-c755de30c153_image.png)

添加完成后,进入 Mapping 页面,如果前面配置的好,这里面是可以自动匹配出来的。每一行表示一个频道,前面出现绿线,说明已启用。如果是红线,则说明配置未完成,无法启用。点击某一行,可以看到很多配置项。但主要的是最下面两行。我们在 XMLTV File 中选择相应的 EPG 来源,然后在 XMLTV Channel 中选择对应的频道。编辑完成后点击 Save 按钮保存。

![image.png](/media/47b19937-734c-4a35-9c31-657f9f52b74c_image.png)

这样,xTeVe 的配置就完成了。我们可以访问一下两个地址

- `http://xTeVe地址:34400/m3u/xteve.m3u` 获取 xTeVe 提供的视频源列表
- `http://xTeVe地址:34400/xmltv/xteve.xml` 获取 xTeVe 提供的电子节目单

如果可以访问,说明配置已经生效。

## Plex配置

进入 Plex 设置页面中的“电视直播和数字录像机”页面,点击“添加一台设备”,会出现“调谐器设置”对话框。一般情况下搜索不到 xTeVe 服务,需要手动输入网络地址。此时只需要输入 `xTeVe地址:34400` 即可。

![image.png](/media/dc6f1b11-cfe9-48d3-83d1-11e49458e612_image.png)

之后Plex会要求我们设置数字节目导览的地址,也就是电子节目单,我们直接输入 xTeVe 提供的地址即可。然后会进入频道匹配界面,如果没有自动匹配,就需要手动进行绑定。

![image.png](/media/65984301-ea77-4fd4-bc0a-c5fbbdac14eb_image.png)

设置完成后,就可以在 Plex 中看到这些频道了。如果有 Plex Pass 会员,还可以进行节目录像,如果有一些节目想看但没时间看,录像后可以随时观看。

![image.png](/media/81825217-3193-45f7-8b90-33b854369f03_image.png)

![image.png](/media/5d10800a-826e-4ad4-adc4-5643bebdf46a_image.png)

# Kodi上配置PVR

若要在 Kodi 上观看电视直播,需要安装一个 PVR 插件,只需要自带的 PVR IPTV Simple Client 即可,无需其他插件。

![image.png](/media/980ba1b0-f358-46af-a84e-caec4b073d45_image.png)

![image.png](/media/a076b27b-1a07-4be2-ab26-5e43a9b96b36_image.png)

安装完成后,打开其设置界面,在“常规 - 位置 - M3U播放列表URL”中填入 xTeVe 提供的地址,

![image.png](/media/05573dda-b39f-4fcb-ad5a-ab66592639e2_image.png)

![image.png](/media/3bc26b4c-879e-4ff8-bdd1-514357c09089_image.png)

回到首页的电视一栏,即可查看所有频道,并选择频道进行观看。

![image.png](/media/50fd2421-ee61-4a04-a0ec-09cd289b8c90_image.png)

![image.png](/media/5e5993a5-3fee-42c6-9050-38ab056cb6fe_image.png)

![image.png](/media/fff16129-941b-4526-a84e-3d5950ed5b43_image.png)

如果不想通过 xTeVe ,可以直接在插件设置中填写原始的电视源和电子节目单地址,无需使用 xTeVe 提供的地址。

# xTeVe缓冲配置

有的时候,电视节目源可能由于编码的问题,在Plex或Kodi中无法播放或没有声音;又或者电视节目源是IPv6地址,但机顶盒没有IPv6的IP。此时可以通过设置缓冲解决。

在 xTeVe 的设置界面,“Streaming”一栏可以设置缓冲。除了无缓冲之外,支持三种缓冲模式:xTeVe、FFmpeg、VLC。可以在 Stream Buffer 中进行选择。如果没有转码需求,可以使用 xTeVe 。如果有转码需求,可以使用 FFmpeg (或 VLC)。具体的配置方法如下图所示。

![image.png](/media/817b8a3f-c91c-4ad3-9e76-aa16d4770921_image.png)

> FFmpeg Options 中填的是 `-hide_banner -loglevel error -i [URL] -c:a libmp3lame -c:v copy -f mpegts pipe:1`

Buffer Size 和 Timeout for new client connections 需要根据网络情况自行设定。我这里由于网络比较好,设定比较极端。

配置完成后点击 Save ,重新打开 Plex 或 Kodi ,就会发现和之前不太一样了。尤其是 Kodi,打开频道需要一定的时间才有反应。