Nginx搭建视频流媒体服务(直播点播)
1、Windows搭建Nginx视频流媒体服务
准备工具:NGINX、FFMPEG、VLC
网盘一键下载:链接: https://pan.baidu.com/s/14UltrNq-ucvYfkOJ49-Vsw 提取码: ffh8
1、下载Nginx,nginx 1.7.11.3 Gryphon版本
链接:http://nginx-win.ecsds.eu/download/
2、下载FFMPEG(推送视频流用)
链接:http://ffmpeg.org/
下载完成后解压并配置环境变量,配置path 里面添加一个到ffmpeg/bin目录的变量,
完成后检查是否成功:ffmpeg -version
3、下载VLC(拉取视频流用)
链接:https://www.videolan.org/
4、配置nginx
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {worker_connections 1024;
}
rtmp_auto_push on;#RTMP服务
rtmp{server{listen 8112; #服务端口chunk_size 4096; #数据传输块的大小#rtmp点播配置,访问方式:rtmp://127.0.0.1:8112/vod/xxx.mp4application vod {play D:/videos; #点播视频存放目录,里面放一个xxx.mp4可以直接播放}#rtmp协议直播推流application live {live on;record all;record_path D:/videos/rtmp; # 保存路径#record_max_size 1K;#append current timestamp to each flvrecord_unique on;#publish only from localhost#allow publish 127.0.0.1;#deny publish all; }# HLS协议直播推流application hls {live on; #开启rtmp直播hls on; #开启hls支持wait_video on; #第一个视频帧发送前禁用音频hls_path D:/videos/hls; #文件保存路径,需要先创建,不然执行推流会报错hls_fragment 5s; #用来设置每一个块的大小。默认是5秒。只能为整数hls_playlist_length 30s; #设置播放列表的长度,单位是秒,听说设置成3秒延迟低点hls_nested off; #默认是off。打开后的作用是每条流自己有一个文件夹hls_cleanup off; #不清理ts , on|off 默认是开着的,是否删除列表中已经没有的媒体块#hls_continuous: #on|off 设置连续模式,是从停止播放的点开始还是直接跳过}}
}
http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 8111;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;#hls点播地址location /hls {types {application/vnd.apple.mpegurl m3u8; #或 application/x-mpegURLvideo/mp2t ts;}alias D:/videos/vod/; #点播视频文件(.ts;.m3u8)存放位置expires -1;add_header Cache-Control no-cache; #跨域支持,不然网页播放不了add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} autoindex on;# 显示目录autoindex_exact_size on;# 显示文件大小autoindex_localtime on;# 显示文件时间
}
点播的概念有些模糊,目前理解就是
方式1:直接把分片好的m3u8文件作为视频:然后使用http访问
访问方式:在VLC工具里面输入 http://127.0.0.1:8111/hls/xxx.m3u8
方式2:直接使用rtmp协议访问mp4
访问方式:在VLC工具里面输入 rtmp://127.0.0.1:8112/vod/xxx.mp4
有懂行的大哥发现问题请给小弟指出!
5、FFMPEG命令
#使用rtmp协议推流
ffmpeg -re -i 11.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:8112/live/test
#说明:11.mp4是待推的视频,rtmp://localhost:8112/live/test是推送视频流和拉取视频流的地址,其中test是自己命名的视频名称,可以使用这个地址在VLC中观看直播(拉取直播流)。#使用hls协议推流(会产生test视频流文件)
ffmpeg -re -i 11.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:8112/hls/test
#说明:11.mp4是待推的视频,rtmp://localhost:8112/live/test是推送视频流和拉取视频流的地址,其中test是自己命名的视频名称,可以使用这个地址在VLC中观看直播(拉取直播流)。#将mp4切割成m3u8分片
ffmpeg -i 11.mp4 -profile:v baseline -level 3.0 -start_number 0 -force_key_frames "expr:gte(t,n_forced*1)" -hls_time 10 -hls_list_size 0 -f hls test.m3u8
#说明: 11.mp4是等待切割的视频,test.m3u8是切割完成的文件,还有很多切割好的testxx.ts文件。
#-force_key_frames "expr:gte(t,n_forced*1)" 代表每1秒1个关键帧,方便-hls_time 10切割每10秒一个ts文件
#-f hls test.m3u8 输出文件名叫test.m3u8
6、使用VLC工具测试视频流
在推送视频流的同时可以打开VLC工具测试是否有流输出
打开VLC,媒体、打开网络串流、网络、输入网络URL
FFMPEG用rtmp协议推流:ffmpeg -re -i D:/videos/vod/11.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:8112/live/test
VLC拉取trmp协议的视频流:rtmp://127.0.0.1:8112/live/test
FFMPEG用hls协议推流(注意会产生m3u8和ts文件):ffmpeg -re -i D:/videos/vod/11.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:8112/hls/test
VLC拉取hls协议的视频流:rtmp://127.0.0.1:8112/hls/test
直播播放画面:
rtmp点播播放画面:
7、切割mp4视频脚本.bat
@echo off
set /p name=请输入视频名称:
set mp4File=%name%.mp4
IF NOT EXIST %mp4File% (echo %mp4File%文件不存在pause
) else (IF NOT EXIST m3u8_%name% (md m3u8_%name%)ffmpeg -i %name%.mp4 -profile:v baseline -level 3.0 -start_number 0 -force_key_frames "expr:gte(t,n_forced*1)" -hls_time 10 -hls_list_size 0 -f hls m3u8_%name%/%name%.m3u8pause
)
8、问题
nginx 1.7.11.3 Gryphon不支持http2 尴尬,想要使用还得自己编译
自己编译参考:
Windows编译Nginx源码_JohnGene的博客-CSDN博客https://blog.csdn.net/JohnGene/article/details/125304541
2、Centos
依赖工具:
1、nginx(普通linux版本即可)
nginx安装可以参考:
Centos7安装Nginx_JohnGene的博客-CSDN博客先安装依赖:(PCRE 作用是让 Nginx 支持 Rewrite 功能)yum -y install make zlib zlib-devel gcc gcc-c++ libtool openssl openssl-devel pcre pcre-devel下载源码包:cd /optwget http://nginx.org/download/nginx-1.9.9.tar.gz解压:tar -zxvf nginx-1.9.9.tar.gzcd nginx-1.9.9配置...https://blog.csdn.net/JohnGene/article/details/122412998
2、nginx-vod-module模块(https://github.com/kaltura/nginx-vod-module)
概念参考:
1、https://blog.csdn.net/SeeDoubleU/article/details/121805174
2、https://blog.csdn.net/SeeDoubleU/article/details/123099059
下载地址:https://github.com/kaltura/nginx-vod-module/archive/refs/tags/1.29.tar.gz
解压:tar -zxvf nginx-vod-module-1.29.tar.gz
配置nginx加入新模块:./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module--with-file-aio --with-threads --with-cc-opt="-O3" --add-module=../nginx-vod-module-1.29
编译:make insall
覆盖原先文件(如已安装):cp objs/nginx /usr/local/nginx/sbin/nginx
配置nginx.conf
#直接使用mp4文件作为源文件(自动切片),直接使用http://xx.xx.xx.xx/liveVideo/xxx.mp4/index.m3u8的方式访问
location ^~/liveVideo {vod hls; # 协议使用hls模式vod_mode local; # 访问模式指定为local模式vod_align_segments_to_key_frames on; # 每个切片以关键帧开头vod_manifest_segment_durations_mode accurate; # 精确显示每个切片的长度# 解决浏览器跨域问题add_header Access-Control-Allow-Headers '*';add_header Access-Control-Expose-Headers 'Server,range,Content-Length,Content-Range';add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS';add_header Access-Control-Allow-Origin *;alias /home/videos/;
}
#下面的和nginx-vod-module不相关,只提供参考
#原生nginx使用ffmpeg手动切片后使用链接http://xx.xx.xx.xx/liveVideo2/xxx.m3u8的方式访问
location ^~/liveVideo2 {# 解决浏览器跨域问题add_header Access-Control-Allow-Headers '*';add_header Access-Control-Expose-Headers 'Server,range,Content-Length,Content-Range';add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS';add_header Access-Control-Allow-Origin *;alias /home/videos/;
}
Nginx搭建视频流媒体服务(直播点播)相关推荐
- 收藏:视频网站(JavaEE+FFmpeg)/Nginx+ffmpeg实现流媒体直播点播系统
FFmpeg安装(windows环境)http://www.cnblogs.com/xiezhidong/p/6924775.html 最简单的视频网站(JavaEE+FFmpeg)http://bl ...
- windows下ffmpeg结合Nginx搭建RTMP,直播中的推流和拉流
windows下ffmpeg结合Nginx搭建RTMP,直播中的推流和拉流 推流和拉流的概念 以及RTMP协议 在直播中,一般需要三个角色:主播,服务器,用户.主播通过推流将数据推到服务器上,而用户可 ...
- 【智慧酒店解决方案】TSINGSEE青犀视频基于流媒体技术EasyDSS搭建酒店IPTV直播/点播平台
一.背景分析 随着现代社会的快速发展,越来越多的顾客希望在酒店享受个性化和信息化的服务.因此,对于一二线城市的新型星级酒店而言.迫切需要为客人提供高品质的影音体验,完备的个性功能,智能对接酒店管理系统 ...
- FFmpeg入门详解之103:FFmpeg Nginx VLC打造M3U8直播点播
FFmpeg+Nginx+VLC打造M3U8点播 Nginx: web服务器(win10,本地nginx) FFmpeg: m3u8切片(4.3.1) VLC: 点播客户端 切片命令行: ffmpe ...
- Nginx 搭建RTMP视频点播 直播 HLS服务器
安装Nginx --下载nginx-rtmp-module模块 git clone https://github.com/arut/nginx-rtmp-module.git--安装依赖 yum in ...
- 【解决方案】TSINGSEE青犀视频互联网直播/点播平台EasyDSS构建户外无人机直播
一.背景分析 近几年,中国国内无人机市场随着航拍等走进民众,出现爆发式增长.无人机在民用方面的应用越来越多,无人机已经广泛应用于公共安全.应急搜救.农林.环保.交通 .通信.气象.影视航拍等多个领域. ...
- 用nginx搭建视频链接
1,安装下载 https://www.runoob.com/linux/nginx-install-setup.html 2,nginx.conf配置 server{listen 80;#监听端口se ...
- 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.方案简要 首先通过对开发方案的仔细研究(实时监控.流媒体.直播流方案的数据源-->协议转换-->服务器--&g ...
- 联讯机顶盒直播点播系统方案,智能机顶盒,智能电视客户端
一. 概述 为适应现代社会校园快捷方便的直播.点播形式,威海联讯信息技术有限公司推出了联讯机顶盒直播点播系统:一台智能手机.一台pc机和一台联讯校园智能机顶盒.配合显示设备即可完成一个直播活动,直播 ...
- 网易视频云:用Nginx搭建flv,mp4,hls流媒体服务
网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...
最新文章
- 水仙花数java_Java三种求水仙花数的方法
- 【c语言】蓝桥杯算法提高 c++_ch02_02
- linux下kafka常用命令
- linux检查是否安装proc编译器,编译安装 GCC 4.9并验证使用
- Update: OCS 2007 R2 (RTM) Download and Documentation
- java 打开gc日志_在运行时打开GC日志记录
- vps如何linux内核4.19,Linux kernel 4.19 RC1 发布,一个相当大的版本
- 在Java中从字符串转换为双精度
- 又一个绝对棒的对话框插件fancybox v1.3.4
- 路由添加失败 参数错误_路由器故障排错三大经典案例详解
- jquery layout学习
- 腾讯被深圳南山法院强制执行:执行标的25元;B站就招聘争议致歉;华为云回应是否将独立运作|极客头条...
- leetcode 【 Add Two Numbers 】 python 实现
- JSPs only permit GET POST or HEAD的解决方案(REST风格)
- 【Java SE】数组的深入理解
- unity汉化补丁_Unity补丁发布计划
- Vue+canvas 实现自定义文字样式转图片,文字与图片进行合成(内蒙古民族大学实习项目)
- nyoj 712 探 寻 宝 藏(双线dp 第六届河南省程序设计大赛)
- # 你也可以在你的微信 or QQ头像添加小国旗了,超简单!
- 保龄球计分算法(C语言实现)