nginx + ffmpeg
第一种方案:ffmpeg+nginx
新的ffmpeg已经支持HLS。(本人也参与了代码供献,给自己做个广告:))
点播:
生成hls分片:
ffmpeg -i <媒体文件> -c:v libx264 -c:a aac -f hls /usr/local/nginx/html/test.m3u8
直播:
ffmpeg -i udp://@:1234 -c:v libx264 -c:a aac -f hls -hls_list_size 5 -hls_wrap 5 /usr/local/nginx/html/test.m3u8
建立web服务器:
默认配置就可以。
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
启动nginx。
客户端访问:http://IP/test.m3u8
在windows上可以用vlc播放。
第二个方案,用nginx-rtmp-module
rtmp { server { listen 1935; chunk_size 4000; #HLS # For HLS to work please create a directory in tmpfs (/tmp/app here)
# for the fragments. The directory contents is served via HTTP (see
# http{} section in config)
#
# Incoming stream must be in H264/AAC. For iPhones use baseline H264
# profile (see ffmpeg example).
# This example creates RTMP stream from movie ready for HLS:
#
# ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264
# -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
# -f flv rtmp://localhost:1935/hls/movie
#
# If you need to transcode live stream use 'exec' feature.
#
application hls {
live on;
hls on;
hls_path /tmp/app;
hls_fragment 5s;
}
}
} http { server { listen 80;
location /hls {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /tmp/app;
expires -1;
}
}
}
1 功能:
1.1 视频、音频直播流(Live streaming of video/audio)
1.2 Flv、mp4视频需求,从本地或HTTP播放(Video ondemand FLV/MP4, playing from local filesystem or HTTP)
1.3 支持分布式流中继:推或拉模式(Stream relay support for distributed streaming: push & pullmodels)
1.4 录制FLVS流(Recording streams in multiple FLVs)
1.5 支持H264/AAC
1.6 在线用ffmpeg转码(Online transcoding with FFmpeg)
1.7 HLS (HTTP Live Streaming) 支持
1.8 基于http的操作(发布、播放、录制)(HTTP callbacks (publish/play/record/update etc))
1.9 在一定的事件中执行应用程序(Running external programs on certain events (exec))
1.10 HTTP control module forrecording audio/video and dropping clients
1.11 高级内存管理技术,快速流和低内存占用(Advanced buffering techniques to keep memory allocations at aminimum level for faster streaming and low memory footprint)
1.12 实践证明可以在下列产品中工作: Wirecast,FMS,Wowza, JWPlayer,FlowPlayer,StrobeMediaPlayback,ffmpeg,avconv,rtmpdump,flvstreamer and many more
1.13 Statistics in XML/XSL in machine-& human- readable form
1.14 Linux/FreeBSD/MacOS/Windows
2 代码下载:
Nginx:
官网:http://nginx.org/
下载:hg clone http://hg.nginx.org/nginx
nginx-rtmp-module:
官网:https://github.com/arut/nginx-rtmp-module
下载:git clone https://github.com/arut/nginx-rtmp-module.git
3 编译:
3.1 Linux下:
进入nginx源码根目录:
auto/configure--add-module=<path-to-nginx-rtmp-module>
make -f objs/Makefile
make -f objs/Makefile install
增加:http_ssl_module:
auto/configure--add-module=<path-to-nginx-rtmp-module> --with-http_ssl_module
3.2
windows
下:
3.2.1
官网提供的编译方法:
http://nginx.org/en/docs/howto_build_on_win32.html
3.2.1.1
预备:
l Microsoft Visual C compiler.Microsoft Visual Studio® 8 and 10
l Msys
l Perl(如果要编译OpenSSL并且nginx支持SLL),例如:ActivePerl 或 Strawberry Perl.
l PCRE,zlib and OpenSSLlibraries sources.
3.2.1.2 编译步骤:
l 设置MSYS、Perl、VC环境变量
运行vc设置环境变量脚本vcvarsall.bat(默认安装路径:C:\Program Files\MicrosoftVisual Studio 9.0\VC)
l 开始MSYS
l 建立编译和库目录
mkdir objs
mkdir objs/lib
cd objs/lib
tar -xzf ../../pcre-8.32.tar.gz
tar -xzf ../../zlib-1.2.7.tar.gz
tar -xzf ../../openssl-1.0.1e.tar.gz
l 运行配置脚本:
auto/configure --with-cc=cl --builddir=objs--prefix= \
--conf-path=conf/nginx.conf--pid-path=logs/nginx.pid \
--http-log-path=logs/access.log--error-log-path=logs/error.log \
--sbin-path=nginx.exe--http-client-body-temp-path=temp/client_body_temp \
--http-proxy-temp-path=temp/proxy_temp \
--http-fastcgi-temp-path=temp/fastcgi_temp\
--with-cc-opt=-DFD_SETSIZE=1024--with-pcre=objs/lib/pcre-8.32 \
--with-zlib=objs/lib/zlib-1.2.7--with-openssl=objs/lib/openssl-1.0.1e \
--with-select_module --with-http_ssl_module--with-ipv6
运行脚本:
nmake –f objs/Makefile
3.2.2
Cygwin
下:
同
linux
4 Windows下的限制:
Windows下下列功能不支持:
l execs
l static pulls
l auto_push
windows下用的是select模式:
events{
worker_connections 30; #默认为(1024),windows默认为64,所以需要修改此值小于64
}
5 访问URL格式:
rtmp://rtmp.example.com/app[/name]
app-应该是配置文件中的application块
name-可以为空
6 配置:
在源码要目下有个test目录。其中有测试配置文件和脚本。
6.1 点播配置:
l 环境:
服务器IP为:192.168.10.4。
安装根路径:/usr/local/nginx
在你的配置时,需要把IP换成你的服务器IP或域名。
l 建立媒体文件夹:
mkdir /usr/local/nginx/vod/flvs
l 准备媒体文件:
把媒体文件 a.flv 复制到 /usr/local/nginx/vod/flvs目录下。
l 准备网页
下载jwplayer:http://www.longtailvideo.com/players/jw-flv-player/
下载后,解压到:/usr/local/nginx/html/
建立测试页面test.html,也放到上面目录下。
<html>
<head>
<scriptsrc="/jwplayer/jwplayer.js"></script>
</head>
<body>
<divid='my-video'></div>
<scripttype='text/javascript'>
jwplayer('my-video').setup({
file:'rtmp://192.168.10.4/vod/a.flv',
width:'50%',
aspectratio:'3:2',
fallback:'false',
primary:'flash'
});
</script>
</body>
</html>
l 在nginx中配置http
#配置事件工作线程数
events {
worker_connections 30; #默认为(1024),windows默认为64,所以需要修改此值小于64
}
#配置http
http {
include mime.types;
default_type application/octet-stream;
#配置访问web页
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#配置rtmp状态页
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/nginx/nginx-rtmp-module/; #在nginx-rtmp-module源码根目录
}
}
}
#rtmp点播配置
rtmp {
server {
listen 1935;
chunk_size 4000;
application vod {
play /usr/local/nginx/vod/flvs; #点播媒体文件存放目录
}
}
}
l 启动nginx
./nginx
l 从客户端访问网页:
l 访问rtmp状态页(非必须):
6.2 直播配置:
l
l 在配置文件nginx.conf中加入
#rtmp直播配置
rtmp {
server {
listen 1935;
chunk_size 4000;
application live {
live on;
}
}
}
#配置访问web页
http {
include mime.types;
default_type application/octet-stream;
#配置访问web页
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#配置rtmp状态页
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/nginx/nginx-rtmp-module/; #在nginx-rtmp-module源码根目录
}
}
}
l 访问rtmp状态页(非必须):
可以查看rtmp流的统计情况
l 准备网页
下载jwplayer:http://www.longtailvideo.com/players/jw-flv-player/
下载后,解压到:/usr/local/nginx/html/
建立测试页面test.html,也放到上面目录下。
<html>
<head>
<scriptsrc="/jwplayer/jwplayer.js"></script>
</head>
<body>
<divid='my-video'></div>
<scripttype='text/javascript'>
jwplayer('my-video').setup({
file:'rtmp://192.168.0.128/live/test', #live是applicatioin,test是直播缓存流文件
width:'50%',
aspectratio:'3:2',
fallback:'false',
primary:'flash'
});
</script>
</body>
</html>
l 启动服务
nginx
l 推流
用ffmpeg产生一个模拟直播源,向rtmp服务器推送
ffmpeg –i/usr/local/nginx/vod/flvs/a.flv-strict -2 -c:v libx264 -c:a aac -f flv rtmp://192.168.10.4/live/test
注意,源文件必须是H.264+AAC编码的。
192.168.10.4是运行nginx的服务器IP,l
ive是applicatioin,
test是直播缓存流文件,需要与配置文件中的直播缓存文件名一样。
l 从客户端访问网页:
nginx + ffmpeg的更多相关文章
- 【原创+史上最全】Nginx+ffmpeg实现流媒体直播点播系统
#centos6.6安装搭建nginx+ffmpeg流媒体服务器 #此系统实现了视频文件的直播及缓存点播,并支持移动端播放(支持Apple和Android端) #系统需要自行安装,流媒体服务器配置完成 ...
- 收藏:视频网站(JavaEE+FFmpeg)/Nginx+ffmpeg实现流媒体直播点播系统
FFmpeg安装(windows环境)http://www.cnblogs.com/xiezhidong/p/6924775.html 最简单的视频网站(JavaEE+FFmpeg)http://bl ...
- Nginx+ffmpeg的HLS开源服务器搭建配置及开发详
本文概述: 至目前为止,HLS 是移动平台上非常重要并十分流行的流媒体传输协议.做移动平台的流媒体开发,不知道它不掌握它 ,真是一大遗憾.而HLS的平台搭建有一定的难度,本文针对对该方向有一定了解的朋 ...
- Nginx+ffmpeg的HLS开源server搭建配置及开发具体解释
本文概述: 至眼下为止.HLS 是移动平台上很重要并十分流行的流媒体传输协议.做移动平台的流媒体开发,不知道它不掌握它 .真是一大遗憾.而HLS的平台搭建有一定的难度,本文针对对该方向有一定了解的朋友 ...
- Windows10环境下 Nginx+ffmpeg自搭服务器制作RTMP直播流
Windows10环境下 Nginx+ffmpeg自搭服务器制作RTMP直播流学习笔记 所需条件: nginx-rtmp-module(带rtmp模块) ,链接:https://link.jiansh ...
- Nginx+FFmpeg实现RTSP转RTMP
RTSP转RTMP 本次转流采用Centos+Nginx+FFmpeg实现,具体实现如下: 1. 安装Ngxin 安装详细略(可以选择安装阿里的Tengine,官方[下载路径](Download - ...
- linux系统中Nginx+FFmPeg+vlc实现网页视频播放配置过程
linux系统中Nginx+FFmPeg实现网页监控视频播放配置过程 1.安装好的nginx上添加模块nginx-http-fiv-module-master 此模块是rtmp模块的升级版,有它所有的 ...
- 转:Nginx+ffmpeg的HLS开源服务器搭建配置及开发详解
转:http://itindex.net/detail/51186-nginx-ffmpeg-hls 本文概述: 至目前为止,HLS 是移动平台上非常重要并十分流行的流媒体传输协议.做移动平台的流媒体 ...
- nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
本文概要: nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择.本文介绍了一种简易方法快速搭建rtmp流媒体服务器,也叫rtsp转播,数据源不是读取文件,而是采用 ...
- 10.nginx+ffmpeg上搭建HLS切片
1.首先介绍一下HLS协议: (1)简介 这个协议是由苹果公司提出并推广使用的,维基百科介绍如下: HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络 ...
随机推荐
- Mac item2 配色,大小写敏感及常用快捷键
http://blog.csdn.net/lainegates/article/details/38313559 目录(?)[-] 配色 大小写敏感 快捷揵 item2是mac下非常好用的一款终端 ...
- DTrace Oracle Database
http://d.hatena.ne.jp/yohei-a/20100515/1273954199 DTrace で Oracle Database のサーバー・プロセスをトレースしてみた Oracl ...
- input 对伪元素(:before :after)的支持情况
最近做一个自定义视觉效果的Switch组件,用到了 input:radio 和 label,并在label里用伪元素 :before 模拟状态的切换效果. 但是同事评审的时候说可以不用label,直接 ...
- http://blog.csdn.net/zh521zh/article/details/52687922
http://blog.csdn.net/zh521zh/article/details/52687922
- go 协程与主线程强占运行
最近在学习了Go 语言 , 正好学习到了 协程这一块 ,遇到了困惑的地方.这个是go语言官方文档 . 在我的理解当中是,协程只能在主线程释放时间片后才会经过系统调度来运行协程,其实正确的也确实是这样 ...
- 最好的10个移动 Web 应用程序开发框架
在近期几年里,移动互联网快速发展.市场潜力巨大. 继计算机.互联网之后,移动互联网正掀起第三次信息技术革命的浪潮,新技术.新应用不断涌现.今天这篇文章向大家推荐10大优秀的移动Web开发框架.帮助开发 ...
- js增加收藏
<html> <span style="white-space:pre"> </span><head> <span style ...
- python去除停用词(结巴分词下)
python 去除停用词 结巴分词 import jieba #stopwords = {}.fromkeys([ line.rstrip() for line in open('stopword. ...
- Ajax 跨域难题 - 原生 JS 和 jQuery 的实现对比
讲解顺序: AJAX 的概念及由来 JS 和 jQuery 中的 ajax 浏览器机制 AJAX 跨域 AJAX 的概念 在讲解 AJAX 的概念之前,我先提一个问题. 这是一个典型的 B/S 模式. ...
- mysql 数据类型+约束+关联
1.什么是存储引擎存储引擎就是表的类型,针对不同的存储引擎,mysql会有不同的处理逻辑 2.存储引擎介绍InnoDB| DEFAULT | Supports transactions, row-le ...