
在Plex或Kodi上看电视
2022年11月17日
编程
当我们在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 命令行工具测试视频源能否使用、是否流畅。  ## 电子节目单获取 只有直播源就可以在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文件。  除了该网站,[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 两栏,后文会介绍如何打开。  点击 New 按钮后弹出一个对话框,选择 M3U 类型,然后在 M3U File 中输入地址,可以是本地文件的地址,也可以是网络地址。我这里使用了自己修改后的 m3u 文件,所以是本地地址。Tuner / Streams 一项中填写允许的最大同时连接的设备数,我这里填了10,以保证支持足够的设备同时观看。 但此时依然还不算配置完成。点击左侧的 Filter ,通过过滤器筛选出需要显示的视频源。  在 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 按钮保存。  刷新页面,会发现左侧多出了一个 XMLTV 和 Mapping 菜单项。进入 XMLTV 可以配置 EPG。我们将之前介绍的 EPG 的地址配置到 XMLTV 中,并进行命名,例如 `51zmt` 。  添加完成后,进入 Mapping 页面,如果前面配置的好,这里面是可以自动匹配出来的。每一行表示一个频道,前面出现绿线,说明已启用。如果是红线,则说明配置未完成,无法启用。点击某一行,可以看到很多配置项。但主要的是最下面两行。我们在 XMLTV File 中选择相应的 EPG 来源,然后在 XMLTV Channel 中选择对应的频道。编辑完成后点击 Save 按钮保存。  这样,xTeVe 的配置就完成了。我们可以访问一下两个地址 - `http://xTeVe地址:34400/m3u/xteve.m3u` 获取 xTeVe 提供的视频源列表 - `http://xTeVe地址:34400/xmltv/xteve.xml` 获取 xTeVe 提供的电子节目单 如果可以访问,说明配置已经生效。 ## Plex配置 进入 Plex 设置页面中的“电视直播和数字录像机”页面,点击“添加一台设备”,会出现“调谐器设置”对话框。一般情况下搜索不到 xTeVe 服务,需要手动输入网络地址。此时只需要输入 `xTeVe地址:34400` 即可。  之后Plex会要求我们设置数字节目导览的地址,也就是电子节目单,我们直接输入 xTeVe 提供的地址即可。然后会进入频道匹配界面,如果没有自动匹配,就需要手动进行绑定。  设置完成后,就可以在 Plex 中看到这些频道了。如果有 Plex Pass 会员,还可以进行节目录像,如果有一些节目想看但没时间看,录像后可以随时观看。   # Kodi上配置PVR 若要在 Kodi 上观看电视直播,需要安装一个 PVR 插件,只需要自带的 PVR IPTV Simple Client 即可,无需其他插件。   安装完成后,打开其设置界面,在“常规 - 位置 - M3U播放列表URL”中填入 xTeVe 提供的地址,   回到首页的电视一栏,即可查看所有频道,并选择频道进行观看。    如果不想通过 xTeVe ,可以直接在插件设置中填写原始的电视源和电子节目单地址,无需使用 xTeVe 提供的地址。 # xTeVe缓冲配置 有的时候,电视节目源可能由于编码的问题,在Plex或Kodi中无法播放或没有声音;又或者电视节目源是IPv6地址,但机顶盒没有IPv6的IP。此时可以通过设置缓冲解决。 在 xTeVe 的设置界面,“Streaming”一栏可以设置缓冲。除了无缓冲之外,支持三种缓冲模式:xTeVe、FFmpeg、VLC。可以在 Stream Buffer 中进行选择。如果没有转码需求,可以使用 xTeVe 。如果有转码需求,可以使用 FFmpeg (或 VLC)。具体的配置方法如下图所示。  > 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,打开频道需要一定的时间才有反应。
感谢您的阅读。本网站 MyZone 对本文保留所有权利。