个人IPTV服务器ErsatzTV

什么是 ErsatzTV ?

ErsatzTV 目前还是测试版软件,主要用于使用您的媒体库配置和流式传输自定义直播频道。该软件可能不稳定,正在积极开发中。

家里有小朋友的话,可以用 ErsatzTV创建一个动画片频道,用来播放你指定的片子 🙂

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 ersatztv ,选择第一个 jasongdove/ersatztv,版本选择 latest

这个镜像的版本比较多,大致分为:

  • jasongdove/ersatztv:latest:这是基础镜像,采用软件转码;
  • jasongdove/ersatztv:latest-nvidia:采用 Nvidia 硬件转码;
  • jasongdove/ersatztv:latest-vaapi:采用 VAAPI 硬件转码;

除了上面列的 x86 平台外,还支持 ARM 平台。此外还有以 DevelopmentTags 的开发版

老苏测试主机不支持硬件转码,所以选择了基础镜像。本文写作时, latest 版本对应为 v0.8.4

docker 文件夹中,创建一个新文件夹 ersatztv,并在其中建两个子文件夹 configmedia

文件夹 装载路径 说明
docker/ersatztv/config /root/.local/share/ersatztv 存放设置、日志等文件
docker/ersatztv/media /media 存放媒体文件

其中 media 文件夹不是必须的,可以使用原有的媒体文件夹,而装载路径,是可以自己定义的,并且可以加载多个;

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
8409 8409

环境

可变
TZ 设为 Asia/Shanghai

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 新建文件夹 ersatztv 和 子目录
mkdir -p /volume1/docker/ersatztv/{config,media}

# 进入 ersatztv 目录
cd /volume1/docker/ersatztv

# 运行容器
docker run -d \
--restart unless-stopped \
--name ersatztv \
-p 8409:8409 \
-v $(pwd)/config:/root/.local/share/ersatztv \
-v $(pwd)/media:/media:ro \
-e TZ=Asia/Shanghai \
jasongdove/ersatztv

# 示例
docker run -d \
--restart unless-stopped \
--name ersatztv \
-p 8409:8409 \
-v $(pwd)/config:/root/.local/share/ersatztv \
-v /volume1/netdisk/AirDisk/USB-DISK-A:/media:ro \
-e TZ=Asia/Shanghai \
jasongdove/ersatztv

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'

services:
ersatztv:
image: jasongdove/ersatztv
container_name: ersatztv
restart: unless-stopped
ports:
- 8409:8409
volumes:
- ./config:/root/.local/share/ersatztv
- ./media:/media:ro
environment:
- TZ=Asia/Shanghai

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 ersatztv 和 子目录
mkdir -p /volume1/docker/ersatztv/{config,media}

# 进入 ersatztv 目录
cd /volume1/docker/ersatztv

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:8409 就能看到 Health Checks界面

Hardware Acceleration 是感叹号,显示找不到 ffmpeg 兼容的硬件加速类型

Local 库

如果你没有安装PlexEmby 或者 Jellyfin 媒体服务器,可以选择本地库,而且本地库支持的媒体类型更多,包括:MoviesShowsMusic VideosOther VideosSongs。而前面三种媒体库只支持 Movies 和 Shows

左侧菜单 Media Source 中找到 Local,可以编辑也可以新增

新增一个,添加好路径之后,先 ADD PATH

这里的路径就是我们前面对应的媒体文件的 装载路径

添加完路径之后,再 SAVE CHANGES

其他用不上,老苏都给删了,主要是为了看着比较清爽;

添加完成后,会在 Media –> Libraries 中看到,转圈表示正在扫描中

扫描完成后,在 Movies 中会看到,因为之前添加的类型就是电影

老苏的机器上有 JellyfinPlex,但其实指向的是同一个网络磁盘,所以内容和 Local 库是一样的

老苏觉得没有必要再通过 Jellyfin 多绕一圈了,所以这里就略过了,有兴趣可以去看官方文档:https://ersatztv.org/docs/user-guide/add-media-items

创建 Collection(集合)

集合(Collection) 有三种类型:

  • Collection:包含手动添加的项目;
  • Smart Collection:包含搜索结果或导入的 Trakt 列表中的项目,并动态更新;
  • Multi Collection:包含其他集合和智能集合;

选中电影,点 ADD TO COLLECTION

再次点 ADD TO COLLECTION

添加 Channels(频道)

左侧菜单找到最顶上的 Channels

ADD CHANNEL 开始创建频道

  • Number:通道号可以是整数,也可以包含一位小数,例如500500.5
  • Streaming Mode:目前支持四种流模式。一般情况下,应使用前两种流模式
    • HLS Segmenter 转码内容、支持水印并在程序边界提供最佳性能。
    • MPEG-TS 是流模式的轻量级包装 HLS Segmenter,为需要 HDHomeRun 调谐器的客户端提供支持。
    • HLS Direct 不会对内容进行转码,并且可以在低功耗系统上表现更好,但不支持水印,并且某些客户端会在程序边界出现问题。
    • MPEG-TS (Legacy) 转码内容并支持水印,但某些客户端会在程序边界出现问题。此模式将在未来版本中删除。

老苏最后选择的 Stream ModeHLS Segmenter

创建 Schedules(时间表)

左侧菜单进入 Schedules

ADD SCHEDULE 开始创建时间表

  • Keep Multi-Part Episodes Together:这仅适用于随机安排的项目,并将尝试智能地对多部分剧集(即s05e02 - whatever part 1s05e03 - whatever part 2)进行分组,以便它们始终安排在一起并始终按正确的顺序播放。
  • Treat Collections As Shows:这仅在Keep Multi-Part Episodes Together启用时适用,并且将尝试对集合中跨节目的多部分剧集进行分组(即像Show 1 - s03e04 - Whatever Part 1和 一样的交叉剧集Show 2 - s01e07 - Whatever Part 2)。
  • Shuffle Schedule Items:这会在构建播出时打乱时间表项目的顺序,并且主要用于具有混合节目且每个节目需要独特的时间表项目设置的频道。请注意,这会禁用固定开始时间和洪水模式。
  • Random Start Point:这将在集合中的随机位置启动每个计划项目。

Edit Schedule Items 添加 items

  • Start Type:有两种启动类型
    • Dynamic:在前一个计划项目之后立即开始;
    • Fixed:需要开始时间;
  • Playack Order:播放顺序
    • Chronological:项目按发布日期排序,然后按季和集数排序;
    • Random:项目是随机排序的,并且可能包含重复;
    • Shuffle:项目是随机排序的,并且在集合中的每个项目都玩过一次之前,不会再播放任何项目;
    • Shuffle In Order:项目进行分组(按节目的剧集、按艺术家的音乐视频、所有电影为一组),组内容按时间顺序排序,并且各组在保持各自的时间顺序的同时打乱在一起;
  • Playout Mode:播放时的行为方式
    • One:先播放集合中的一个媒体项目,然后再前进到下一个计划项目;
    • Multiple:在前进到下一个计划项目之前播放Multiple Count集合中指定的媒体项目;
    • Duration:播放适合指定空间的最大数量的完整媒体项目Playout Duration
    • Flood:永久播放集合中的媒体项目,或者直到下一个计划项目的开始时间(如果存在);

其他更多参数去看官方文档吧

如果不设置 Schedules,播放时会显示 Channel is Offline

创建 Playout(播放)

左侧菜单找到 Playouts

ADD PLAYOUT 将时间表分配给频道

点右侧第一个按钮 Edit Alternate Schedules

可以进行详细的设置

点频道,会显示详细的列表

客户端

主界面右上角找到 M3U

将地址复制到 IPTV 客户端中

如果设置没问题,马上就会看到视频画面了

参考文档

jasongdove/ErsatzTV: Stream custom live channels using your own media
地址:https://github.com/jasongdove/ErsatzTV

Your Personal IPTV Server | ErsatzTV
地址:https://ersatztv.org/

Introduction | ErsatzTV
地址:https://ersatztv.org/docs/intro

Custom IPTV Channels
地址:https://ryanbritton.com/2021/03/custom-iptv-channels/

How To Install ErsatzTV to create IPTV Channels in Plex - Smart Home Pursuits
地址:https://smarthomepursuits.com/how-to-install-ersatztv-to-create-iptv-channels-in-plex/