如何使用nginx创建本地视频播放服务
上一集我们大概介绍了视频网站是使用M3U8来播放视频的,那么如果你有一些本地视频,想要像视频网站一样在局域网内播放该如何操作呢。
意义
我们为什么会有这种需求呢。举个例子,视频存在硬盘里,插在电脑上就能在电脑上播放,但是随着移动技术的普及,手机愈发有替代电脑的趋势,这时候如果我想在手机上看这个剧,就得把手机连上电脑,再从硬盘里拷贝到手机上,不仅麻烦,而且还占手机存储空间。
关于nginx
Nginx其实是一个web服务器,就像Java中使用比较多的Tomcat一样,有了这个web服务器就可以监听某个端口,当外部请求本机的该端口时候就可以对请求进行响应。(题外话:nginx好像是俄罗斯人发明的,然后托管到了开源基金会,俄乌战争期间俄罗斯被禁止使用nginx了,所谓没有国界,终究还是假的,自身强才是硬道理呀)
实现思路
其实就是通过nginx把电脑上的某个路径下的静态资源文件(视频图片等等都可以叫做静态资源)全部暴露出去,然后使用http请求的方式访问即可。
具体实现
首先我们需要下载nginx
http://nginx-win.ecsds.eu/download/
下载这个包到本地之后解压。
然后在解压文件夹的conf文件夹内新建nginx.conf文件,然后通过记事本打开该文件,进行一些相关配置。
worker_processes 1; #Nginx进程数,建议设置为等于CPU总核数
events {
worker_connections 1024; #工作模式与连接数上限
}
#HTTP服务
http {
server {
listen 80; #监听端口,80为默认的http请求端口,所以设置该端口之后请求不需要带端口号
server_name localhost; #服务名
location /static/ { #请求路径
alias C:/data/; #请求路径默认请求到的盘
}
#举个例子 有个文件在 C:/data/1.mp4,那么通过nginx访问 http://localhost/static/1.mp4 就可以获取到这个静态文件
}
}
配置好之后可以校验一下配置文件是否正常,在nginx根目录下运行该命令
nginx.exe -t
题外话——关于命令行运行
其实直接在nginx根目录下右键可以打开控制台页面,但是是PowerShell页面,运行就会失败,还不知道为啥,所以只能老老实实打开cmd页面。
1.快捷键win+r,会弹出下面的弹窗
2.在其中输入“cmd”之后点击确定,然后会弹出如下页面
3.之后将当前目录移动到刚才的文件夹目录下
例如我刚才解压的文件夹位置在
C:\software\network\nginx 1.7.11.3 Gryphon
那么我就在上面的页面里输入
cd C:\software\network\nginx 1.7.11.3 Gryphon
命令行会变成如下样式
位置已经移动到了nginx根目录下,直接运行上面的命令就可以了
配置文件校验如果结果如图所示就是正常的,如果有问题还需要再检查一下。
然后输入如下命令启动nginx
start nginx
启动成功后用浏览器访问localhost可以看到如下页面
那就证明nginx启动成功。
我已经提前准备好了一个文件C:\data\1.mp4
下一步就是通过局域网访问电脑的ip在手机上观看这个mp4文件
题外话——关于查看电脑本机局域网IP
与上一个题外话前几个步骤类似,弹出cmd的黑框之后输入命令
ipconfig
然后我们就在手机上打开浏览器,然后输入请求url:
http://192.168.31.193/static/1.mp4
就可以观看该视频,操作可见下方视频
0/0
继续观看
如何使用nginx创建本地视频播放服务
可以看到已经成功了,但是即使是局域网mp4格式还是有点卡顿的,下面我们就把该mp4转换为m3u8格式。
将mp4转化为m3u8
ffmpeg是一个强大的视频操作的工具,可以进行视频采集,转换等操作
https://www.gyan.dev/ffmpeg/builds/
7z或者zip随便下载一个就可以了。
然后操作步骤与nginx类似,下载完之后解压就可以了。
然后运行以下命令
1.将转为一个ts
刚才解压的ffmpeg目录地址/ffmpeg.exe -y -i mp4文件路径 -vcodec copy -acodec copy -vbsf h264_mp4toannexb ts文件保存地址
2.切分ts
刚才解压的ffmpeg目录地址/ffmpeg.exe -i ts地址 -c copy -map 0 -f segment -segment_list m3u8文件地址 -segment_time 10 ts地址\%3d.ts
%3d的意思是按照数字顺序命名,且数字会补足三位
我的ffmpeg在位置
C:\software\tool\ffmpeg-5.0-essentials_build\bin下
因此我的打开cmd控制台之后运行的命令就是
#1.将转为一个ts
C:\software\tool\ffmpeg-5.0-essentials_build\bin\ffmpeg.exe -y -i C:\data\1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb C:\data\1.ts
#2.切分ts
C:\software\tool\ffmpeg-5.0-essentials_build\bin\ffmpeg.exe -i C:\data\1.ts -c copy -map 0 -f segment -segment_list C:\data\temp\ali.m3u8 -segment_time 10 C:\data\temp\%3d.ts
运行完毕之后可以看到ts和m3u8已经生成了
再次尝试播放
在手机上请求:
http://192.168.31.193/static/temp/ali.m3u8
但是因为m3u8毕竟不是一个视频,我们需要借助一个播放器来播放这个视频——MX播放器。
0/0
继续观看
如何使用nginx创建本地视频播放服务
啊哈哈哈,有点尴尬哈,还是很慢,但是总体上来说思路应该是不会错的。
未来的一些展望
可以看到其实还是有一些局限,就是你必须知道这个文件的本地位置才可以进行观看。