分发即线路管理设置

该功能会动态修改M3U8里面的TS切片地址,使其从其它服务器、云存储等读取切片,从而解决负载、带宽等问题。

线路管理原理详解

一般我们播放m3u8视频时候,实际上是通过访问m3u8文件索引的切片达到播放目的,且默认从本地服务器读取,如:

#比如我的m3u8链接地址如下:
http://efvcms.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index.m3u8

#当用户读取m3u8后,这时候会依次从服务器读取切片文件,然后完成播放,链接大致如下:
http://efvcms.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index0.ts
http://efvcms.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index1.ts
http://efvcms.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index2.ts
http://efvcms.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index3.ts

从上面会发现,切片全部从本地服务器即m3u8的域名里读取。

接下来设置了2个线路域名,此时m3u8的切片加载和之前就不一样了,下:

#我的m3u8链接地址和之前一样,如下:
http://efvcms.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index.m3u8

#当用户读取m3u8后,这时候会分别从你添加的线路域名读取全部的切片,然后完成播放,链接大致如下:
http://a.fenfa.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index0.ts
http://b.fenfa.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index1.ts
http://a.fenfa.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index2.ts
http://b.fenfa.com/videos/201910/28/5db7045f57112a77e0aca6df/6agc5a/index3.ts

这里就可以看到,切片全部从线路域名里读取;且设置线路前后,只是加载切片链接的域名变化了,其它都不变。

所以当本地服务器因为带宽,硬盘IO等问题,导致播放卡的时候,可以利用线路管理从其它服务器,CDN或云存储等读取切片,从而解决问题。

线路管理设置步骤

设置均为动态处理,即不管是开启还是关闭线路,或新增线路域名,对所有的视频都是立即生效。

准备线路域名

线路域名只需要满足一个条件,就是用户通过该域名可以访问到视频切片,这里有2种方法,分别如下:

第一种,将切片等文件同步到其它服务器,或云存储如亚马逊S3CF R2等,同步教程 ⇒ 点击查看;然后再给云存储,或接收同步文件的服务器绑定一个域名,即线路域名;注意接收文件的服务器绑定域名的时候,根目录需要设置到桶目录,即根目录包含同步过来的videos文件夹。

第二种,使用我们自研的CDN系统,即自己准备一个网络比较好的vps,自建cdn,该cdn会将源站的切片缓存到cdn服务器,再通过cdn域名,提供给用户观看,CDN系统 ⇒ 使用教程

这里如果你不用第三方云存储的话,就建议使用第二种,配置和使用极其方便。

设置线路管理

先前往EFV后台左侧 ⇒ 转码相关 ⇒ 线路管理,创建一条新的线路,如图:

主要设置项如下:

#默认线路链接
你想几个线路域名提供切片读取,就填写几个线路域名,中间使用英文竖线|分开,最后面不能带/,如https://cdn1.efvcms.com|https://cdn2.efvcms.com

#移动线路链接<填入后,移动用户访问会走该线路,不填则使用默认线路>
输入移动线路链接,需要带http或者https,多线路用|分割,如https://cdn1.efvcms.com|https://cdn2.efvcms.com

#电信线路链接<填入后,电信用户访问会走该线路,不填则使用默认线路>
输入电信线路链接,需要带http或者https,多线路用|分割,如https://cdn1.efvcms.com|https://cdn2.efvcms.com

#联通线路链接<填入后,联通用户访问会走该线路,不填则使用默认线路>
输入联通线路链接,需要带http或者https,多线路用|分割,如https://cdn1.efvcms.com|https://cdn2.efvcms.com

#定时任务切换
设置定时时间后,会按设置时间自动使用该线路,可在网络高峰期时间段自动切换到该线路,可改善播放体验。

#是否默认线路
开启后,该条线会立即被使用;如果你设置了多条线路,且都开启了默认线路按钮,那么只生效最后开启默认的那个线路。

#开放该线路
开启后,任何人都可以读取该线路,第三方CMS使用需开启;关闭后则需要通过用户组判断。

定时线路使用推荐

定时任务格式为时钟:分钟,如21:3001:3005:15,时钟为24小时制,也就是每天几时几分执行。

注意,使用定时功能的,注意下服务器系统时间,可以在ssh客户端使用date命令查看,如果时间不对,可以运行命令改一下:

rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#查看修改后的时间
date

比如我在晚上9点半的高峰期,自动切换到cdn线路,然后凌晨1点再切回到本地线路<本地线路即EFV绑定域名>。

也就是总共设置2个线路,1个线路命名cdn线路,且使用1n个网络比较好的线路链接,定时任务设置21:30;另1个线路命名为本地线路,使用EFV绑定域名作为线路链接,定时任务设置01:00.

最后这种设置效果,就是晚上9.30会自动使用cdn线路,再到凌晨1点会切到本地线路,然后每天一直循环切换。

线路管理api使用

使用api调用必须要设置一个默认线路,不然不生效。

获取线路列表

GET /api2/lines

#返回数据
[
    {
        "group": null,
        "vipGroup": null,
        "createAt": "2021-06-28T03:55:16.236Z",
        "_id": "60da81313b870875ec5d9fa4",
        "title": "组合线路",
        "url": "https://cdn1.efvcms.com|https://cdn2.efvcms.com",
        "open": "on",
        "default": "on",
        "notlogin": "on",
        "__v": 0
   },
    {
        "group": null,
        "vipGroup": null,
       "createAt": "2021-06-28T03:55:16.236Z",
       "_id": "60da817b3b870875ec5da0b5",
        "title": "cn2线路",
        "url": "https://cdn3.efvcms.com",
        "open": "on",
        "default": null,
        "notlogin": "on",
        "__v": 0
    }
]

m3u8调用指定线路

#m3u8调用示例
https://域名/index.m3u8?line=线路id

#直接访问,则自动调用默认线路
/videos/60d88e0d66c8886d0a961818/720/index.m3u8

#使用上述线路列表示例的cn2线路
/videos/60d88e0d66c8886d0a961818/720/index.m3u8?line=60da817b3b870875ec5da0b5