java web 自己开发NAS个人网盘、视频网站视频播放服务端大视频文件处理逻辑解决方案和思路

说一下我的需求,我个人的需求是这样的,我自己想搞一个个人网盘来保存我的各种资料和视频,但是又要方便直接在硬盘操作,就是轻量级实现,一个简单的NGINX是不符合我的需求的,功能太过简单了,而市面上的开源的很多都太过重量级实现。

所以我实现的主要需求是个人NAS系统视频播放

这里提一下,我是H5网页播放。前端我就不说了,H5的播放器,解决方案太多了,不值得去写,主要是服务端的视频处理方案。

我最开始通过response的流的方式下载实现预览视频文件,本地还好,2.3G的视频文件可以秒级打开,但是即使是内网环境加上网络传输环节了,二十分钟都不一定下载的了,我在内网中电脑打开,用手机打开,30分钟一个2.5G的视频根本就没有打开,而且还有内存问题,经常异常,根本不行。

我在网上查找的解决方案很少,我从很少的资料中总结就两点:

1、通过ffmpeg(没有找到其他合适的视频处理框架)切片、转TS视频片段或者MP4片段

参考:Java通过cmd调用FFmpeg实现大视频文件的分段切割

但是我存在本地硬盘的视频不可能实现把视频文件通过5s切割一下,切的零零散散的,这太不优雅了。

这里提一下,这个结局方案适合做视频网站的,将视频切割成ts格式文件,然后通过HTTP请求,常规的下载文件流的方式响应即可,就像如下这样(代码实现),这些一小片一小片的就很好处理,无论是缓存还是什么的还有节省服务器宽带资源,包括通过ffmpge生存列表都有成熟的解决方案,网上查的到,我就不说了。

java web 自己开发NAS个人网盘、视频网站视频播放服务端大视频文件处理逻辑解决方案和思路_第1张图片

但是对于个人NAS视频播放处理进行文件分割肯定不现实,群晖这些是不是这个方案我不是很清楚,恰巧又通过ffmpge实现推流这些视频流服务器实现,就往视频流服务器上面去查资料,花了两天,查了很多JAVA实现根本没有,都是C/C++实现的,我这个人又不喜欢折腾,网上恰恰很多ffmpge+nginx视频点播、直播的配置,然后就想NGINX MP4的实现思路。

但是在WINDOWS 环境中,又遇到一个问题,NGINX WINDOWS中URL包含中文会出现404乱码问题,我试了很多方案和查看日志,都不得行,我本地文件夹和文件名又不可能全部搞成英文,如果写JAVA代码中转一遍,又太过笨重,我这个问题卡了两周,都在考虑NGINX+LUA脚本扩展之类的,网上能够查到的资料我都查了,看NGINX对我来说不太现实,那么庞大的代码量,就为了这么一个小的功能点,而我对C++又不是很熟悉,而NGINX这种知名开源项目基本上都是代码量很大的,所以解决这个问题又遥遥无期了。

而nginx window 中文404我解决了,查看我另外一篇博客:java web 自己开发NAS个人网盘、视频网站视频播放服务端大视频文件处理逻辑解决方案和思路

我在想NGINX有没有视频流的解决方案呢?视频流比较专业,资料也比较少,都是简单的下载文件的方式下载,但是对于一个几个G的视频文件根本不现实。万幸NGINX1.14以上版本自动集成了MP4流的集成,只需要配置好就行了。正反射指向一个磁盘上的路径,正常的静态资源配置即可,然后默认以流的方式实现,这里要重点说一下,必须是MP4视频文件才行,FLV视频文件好像也支持,我没有试过,(主要是NGINX流视频服务器只支持这两种),然后内网环境打开测试,不同设备上实现,一两秒视频就可以加载实现播放,这种解决方案,简单但是适合访问量非常少的实现,大的访问量还是建议走第一个解决方案,那个方案专门适合企业级的。

NGINX流视频服务器方案,这里说一下为什么不适合企业级访问量高的解决方案,因为这个NGINX是以流媒体整个实现的,服务器负担比较重,家庭影院、个人NAS、访问量比较少的那种官网介绍视频等等完全适合这种方案。

本次问题解决视频播放逻辑处理问题不断找资料不断的实践,耗时两周到三周,终于解决,蹉跎了数日啊!

你可能感兴趣的:(java,web,nginx)