首页 > 系统相关 >Nginx零成本 易操作实现网站视频加速

Nginx零成本 易操作实现网站视频加速

时间:2023-11-01 14:36:51浏览次数:43  
标签:视频 ffmpeg m3u8 网站 hls Nginx mp4 播放

最近有朋友做了个网站,网站上面放了几个视频,觉得视频播放慢、卡顿,想让我帮忙优化下,今天就介绍个零成本,操作又简单的方法优化网站上视频播放速度


目前很多人网站上放视频,除了用第三方视频平台连接,比如腾讯、优酷、爱奇艺、B站等的视频连接,就是直接将mp4格式的视频放网站目录下,直接嵌入到网站内进行播放,前者缺点就是都有平台广告,后者缺点就是播放慢、卡顿


特别是,如果mp4的视频文件的moov atom元数据被放在mp4文件末尾,那更糟糕,需要下载完整个mp4文件,才会解码媒体信息和关键帧索引,开始播放mp4视频


Nginx零成本 易操作实现网站视频加速_默认值


而视频越大,moov box就越大,加载就越慢,所以播放mp4文件需要缓存很久,解决方法很简单,就是用现有流行的流媒体的方式


将mp4视频格式,通过ffmpeg工具,转换成m3u8格式的视频文件,这样,一个大的mp4视频文件,就会被切分成自定义分片大小的ts分片文件


这样相当于在自己服务器上,搭建了点播服务,并不需要安装rtmp,并用ffmpeg去做推流,那个是直播的方式,如果推流结束了,视频就无法点击了,当然,可以在推流的过程中将文件切分,但是这里不做直播的情况下,大可不必,不需要安装rtmp重新编译nginx,这里技术上基本没什么难度


具体实现如下:

首先,将mp4视频转换成m3u8格式,用到工具为ffmpeg


ffmpeg在nux源里,通过源yum安装只能安装到2.8版本,如果是ubuntu系统,可以安装到最新版本(CentOS6只有0.6版本),编译安装比较麻烦,就别折腾了,如果需要用到新版本,后面会整理一个通过serverless的方式来做

Nginx零成本 易操作实现网站视频加速_nginx_02


安装好ffmpeg之后,通过以下命令转换:

ffmpeg -i $mp4_file -c:v libx264 -hls_time 10 -hls_list_size 0 -c:a aac -strict -2 -f hls $path/m3u8_file


这里以libx264和ACC的形式对视频进行输出,其中几个关键参数如下:

-hls_time n: 设置每片的长度,默认值为2。单位为秒

-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存所有片信息,默认值为5

-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量

-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0

-hls_segment_filename name:自定义切片名称


因为ffmpeg转码是CPU密集型计算,如果默认单线程,可以通过-threads n指定多线程进行转码


转码完成后,会在目录下生成一个.m3u8的索引文件和很多.ts切片文件,接着查看下自己nginx中MIME配置

Nginx零成本 易操作实现网站视频加速_nginx_03

Nginx零成本 易操作实现网站视频加速_视频播放_04

正常nginx默认MIME中支持m3u8流媒体视频格式


接着配置nginx,在原本的server中,添加一个location处理m3u8格式请求

Nginx零成本 易操作实现网站视频加速_默认值_05


最后只需要在网站中将视频地址后缀改为m3u8即可,注意chrome等PC浏览器不支持直接播放m3u8格式,PC端只有safari支持

标签:视频,ffmpeg,m3u8,网站,hls,Nginx,mp4,播放
From: https://blog.51cto.com/u_64214/8121988

相关文章

  • 如何做 Nginx 安全日志分析可视化,看完这一篇,秒懂!
    之前介绍过ModSecurity这款优秀的开源WAF,它是一个入侵检测与阻止的引擎,原本是Apache的一个模块,现在可作为单独模块编译添加到Nginx服务中虽然这款WAF很优秀,但是使用起来并没有那么容易,之前也整理了文章介绍它的原理和规则,然而还有一个问题,就是它的日志分析,之前介绍原理规则......
  • nginx 全局变量记录
    remote_addr客户端ip,如:192.168.4.2binary_remote_addr客户端ip(二进制)remote_port客户端port,如:50472remote_user已经经过AuthBasicModule验证的用户名host请求主机头字段,否则为服务器名称,如:dwz.stamhe.comrequest用户请求信息,如:GET/?_a=index&_m=show&count=10HT......
  • nginx(autoindex on;)访问文件数据访问不到的解决办法
    解决办法注意文件路径是文件夹要以/斜杠结尾正确:/path/to/data/错误:/path/to/data示例: location/data{ alias/path/to/data/; autoindexon; }......
  • 关于电影版权和授权的那些事——电影网站上的电影都是有版权的吗,有时效性吗
    前言:问题如题,说下本文的初衷,本人是搞电脑的,感觉还是这个说法比较贴切,休闲娱乐主要方式就是看电影,可以说是电影、电视剧迷,但是看着看着电影就突然在脑袋里面冒出了这么一个问题,那些电影网站上的电影其版权是否归电影网站所有,如果是那么是否有时效呢? 可以说,这个问题的来由纯是自己闲......
  • ffprobe获取视频信息,编码转换,设置关键帧间隔等操作
    查看关键帧间隔ffprobe-select_streamsv-show_entriespacket=pts_time,duration_time,flags-ofcsv=p=0test.mp4输出格式由packet=pts_time,duration_time,flags指定,pts_time指帧的时间戳,duration_time指帧播放时长,它等于1/framerate秒,flag指帧标志,K_表示关键帧。视频流......
  • Nginx 搭建配置
    步骤一:安装Nginx1.在Ubuntu系统中,您可以使用以下命令来安装Nginx:sudoaptupdatesudoaptinstallnginx2.安装完成后,您可以使用以下命令来检查Nginx是否成功安装:nginx-v3.使用以下命令来查找nginx的安装位置:whichnginx 或nginx-t 4.在http块中,我们需要添......
  • 今天就做一个小网站原型,要为自己写个profile页呀
     axurerp的使用里面,要活用母版,给母版添加事件省力创建 本地发布的文件在:https://files.cnblogs.com/files/hualiu0/profile_home.7z?t=1698802282&download=true......
  • 基于Nginx和FFmpeg搭建流媒体服务器(转)
    https://www.jianshu.com/p/b1680d3ecd4f什么是流媒体流媒体就是将视频文件分成许多小块儿,将这些小块儿作为数据包通过网络发送出去,实现一边传输视频数据包一边观看视频。什么是流式传输客户端通过链接视频服务器实时传输音、视频信息,实现“边下载边播放”。顺序流式传输......
  • Nginx 配置及命令
    1、配置1.1、为ngixn添加功能模块nginx安装目录:/app/nginx-1.16.1nginx部署目录:/app/nginx#查看nginx已经安装的功能模块/app/nginx/sbin/nginx-V打印如下,--with开头的都为模块nginxversion:nginx/1.16.1builtbygcc4.4.720120313(RedHat4.4.7-18)(GCC)b......
  • Spring Boot - ffmpeg 获得 m3u8 列表和 ts 文件,前端请求视频流进行播放
    安装ffmpegFFmpeg下载地址:GitHubreleases。请下载:ffmpeg-master-latest-win64-gpl-shared.zip压缩包。解压到你系统盘任意位置(前提是你以后找得到这玩意儿在哪)。接下来就是配置其环境变量,所有的环境变量都是配置它的启动文件的路径到你系统的Path,基本上都是(也有例外的?)。如......