媒体服务器急需一个搜索功能

国庆节结束了,虽然没有歇几天。

还是在折腾媒体服务器

试了好多方案,最终稳定的还是onedirve + oneindex + VLC播放器。

先把电影上传到onedirve;

然后用oneindex生成在线播放网址;

最后复制到VLC播放器来播放。

有个问题我不知道是个别还是怎样,我用家里的Wifi看电影的话,不管电影有多长,总会在播放一段时间后出现卡顿,换播放器也是卡顿,基本上不能看。

但是如果换成4G,速度就会非常快。

所以我的流量用的是哗哗的。

这不知道是onedrive对同一个IP持续下载后的限速,还是我家的网络问题。

oneindex的搜索是个问题

oneindex的作者似乎没有考虑把搜索问题解决。

我研究了几天原作者的代码,发现一个可能暂时能用的办法,暂时还没有实现。

  • 原作者是把onedrive的文件缓存到cache文件夹中;
  • 有多少个文件夹,就会在cache文件夹中生成多少个.php文件;
  • .php文件命名规则是固定的,文件名是md5('dir_' . $path) . '.php'
  • $path指的是绝对路径,从onedrive根目录开始;
  • 每个php文件中存储的数据是php的数组,数组有字段name,size,lastModifiedDateTime,downloadUrl,folder,其中folder存储的是bool格式的数据,字段中无当前目录值。
  • 这种格式的数据应当是onedrive的API直接返回的。

开始的时候,想要在每次搜索时把所有的php缓存文件读取出来,然后依次查找对应的关键字,搜索是基于缓存的,没有缓存就什么都搜索不出来。

先不说这种思路有没有实现,因为中间有大量的循环和递归,目录越多越深,执行的速度就会越慢。

放弃这种思路。

考虑用下面的方法:

  • 目前原作者已经将最难的API完成,能拿到所有的文件;
  • 可能作者是为了方便,或者安全,把所有的文件目录(文件夹)用md5加密;
  • 而md5解密一般来说比较困难,但是对应关系基本上是一一对应的;
  • 所以再利用一个缓存文件,把原文和密文对应起来;
  • 搜索时先查询所有结果,得到每条结果及结果所在的php文件名;
  • 然后在新缓存文件中找到该密文文件名对应的原路径;
  • 显示查询结果。

理论上可以实现,但是目前还没有完成。

搜索功能能用就行了

因为文件越来越多,目录越来越多,不可能用Ctrl+F能解决所有的问题。

等我实现上面的那个功能以后,再回来记录。

这种搜索只能是判断字符串是否包含关键字,如果搜索的关键字是一个通用的字符,那么就会出来大量的结果。

我又不是在造搜索引擎,先不考虑那么多,我也不会去故意搜索无意义的字符。

下载了1.4T的影视了

一般下载还是Aria2。

前一段时间才发现了另一个下载工具rrshareweb官网地址Github项目地址,不过软件不是开源的,我认为应该没有太大的风险,用的时候就打开,不用的时候就关闭就行了。

这东西占CPU很严重,可能有一点点挖矿的嫌疑。

因为Aria2下载东西再多,也不会占用多少CPU;但是我只要一打开rrshareweb就会吃掉40%左右的CPU,服务器的风扇开始疯狂的转。

所以尽量平时不开,需要下载的时候再开一下。

这东西下载别的东西不知道,但是下载人人自己做的影视还是非常快的,而且可以批量下载,有利有弊,权衡后使用。

该软件做成服务

测试的服务器是Centos7.5,/etc/systemd/system/下增加文件rrshare.service,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=rrshareweb
After=network.target
Wants=network.target

[Service]
Type=simple
PIDFile=/var/run/rrshare.pid
ExecStart=/path/to/rrshareweb
Restart=on-failure
RestartPreventExitStatus=23
RestartSec=30

[Install]
WantedBy=multi-user.target

软件主要有两个文件rrsharewebp4pclient,两个文件都需要增加执行权限。

然后使用service rrshare start命令启动就可以了。

切记,不用的时候关闭,不知道有什么风险。