使用 nginx 和 rtmp 插件搭建视频直播和点播服务器-阿里云开发者社区

开发者社区> double2li> 正文

使用 nginx 和 rtmp 插件搭建视频直播和点播服务器

简介: 使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来。 首先,看一下最经典的参考文献: How to set up your own private RTMP server using nginx 1. 安装 nginx 和 rtmp 模块 有关 nginx 的编译和安装比较简单,这里就不介绍了,看参考文献。
+关注继续查看

使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来。

首先,看一下最经典的参考文献: How to set up your own private RTMP server using nginx

1. 安装 nginx 和 rtmp 模块

有关 nginx 的编译和安装比较简单,这里就不介绍了,看参考文献。这里提示以下几点:

(1) 安装好 nginx 后,配置文件在这里:

/usr/local/nginx/conf/nginx.conf

(2) 启动 nginx 的命令:

$ sudo /usr/local/nginx/sbin/nginx -s stop
$ sudo /usr/local/nginx/sbin/nginx

2. 配置 nginx 视频直播和点播服务

先看一下完整的 nginx 配置文件里有关视频点播和直播的配置:

rtmp {
	server {
		listen 1935;
		chunk_size 4096;
		application live {
			live on;
			record off;
		}
		application live2 {
			live on;
			record off;
		}
		# video on demand
		application vod {
			play /var/flvs;
		}
		application vod_http {
			play http://192.168.31.185/vod;
		}
		application hls {
			live on;
			hls on;
			hls_path /tmp/hls;
		}
	}
}
# HTTP can be used for accessing RTMP stats
http {
    server {
	listen      8080;
	# This URL provides RTMP statistics in XML
	location /stat {
	    rtmp_stat all;
	    # Use this stylesheet to view XML as web page
	    # in browser
	    rtmp_stat_stylesheet stat.xsl;
	}
	location /stat.xsl {
	    # XML stylesheet to view RTMP stats.
	    # Copy stat.xsl wherever you want
	    # and put the full directory path here
	    root /path/to/stat.xsl/;
	}
	location /hls {
	    # Serve HLS fragments
	    types {
		application/vnd.apple.mpegurl m3u8;
		video/mp2t ts;
	    }
	    root /tmp;
	    add_header Cache-Control no-cache;
	}
	location /dash {
	    # Serve DASH fragments
	    root /tmp;
	    add_header Cache-Control no-cache;
	}
    }
}

现在来解释一下里面各行代码的含义。对于视频直播服务,如果需要支持多路流输入的话,很简单,在 nginx 配置文件里多配几个 Application 就只可以了,像下面这样:

application live {
	live on;
	record off;
}
application live2 {
	live on;
	record off;
}

这样就可以通过下面的地址来推送直播流,其它观众端也可以通过下面的地址来访问直播流:

rtmp://192.168.31.185/live/test
rtmp://192.168.31.185/live2/test

后面紧跟的 test 关键字,可以随便更换,只要你的推送流和访问流的地址一样就可以了。

rtmp 模块也可以直接支持 VOD 这种视频点播服务 ,只需要在配置文件里添加如下内容即可:

# video on demand
application vod {
    play /var/flvs;
}

application vod_http {
    play http://myserver.com/vod;
}

然后把一个 mp4 或是 flv 文件扔到 /var/flvs 目录下,对于 /var/flvs/dir/file.flv 这个视频文件,就可以通过下面的网址来访问了:

  http://myserver.com/vod//dir/file.flv

这样直接在浏览器里就可以通过网页观看视频。对于 mp4 文件,也可以实现 VOD 服务,不过需要的是采用 H.264 和 AAC 格式编码的 mp4 文件。

3. HLS 直播流的配置

如果需要使用 HLS 来视频直播,可以直接像配置文件那样,写上下面这一段:

application hls {
        live on;
        hls on;
        hls_path /tmp/hls;
}

同时把后面有关 http 访问的内容写上:

# HTTP can be used for accessing RTMP stats
http {
	server {
		listen	  8080;
		# This URL provides RTMP statistics in XML
		location /stat {
			rtmp_stat all;
			# Use this stylesheet to view XML as web page
			# in browser
			rtmp_stat_stylesheet stat.xsl;
		}
		location /stat.xsl {
			# XML stylesheet to view RTMP stats.
			# Copy stat.xsl wherever you want
			# and put the full directory path here
			root /path/to/stat.xsl/;
		}
		location /hls {
			# Serve HLS fragments
			types {
				application/vnd.apple.mpegurl m3u8;
				video/mp2t ts;
			}
			root /tmp;
			add_header Cache-Control no-cache;
		}
		location /dash {
			# Serve DASH fragments
			root /tmp;
			add_header Cache-Control no-cache;
		}
	}
}

配好以后,推流可以使用下面的地址:

rtmp://192.168.31.185/hls/movie

movie 关键字可以任何替换。对于观众端来说,可以有几种播放方式:

(1) 用 rtmp:

rtmp://192.168.31.185/hls/movie

(2) 用 hls 播放:

http://192.168.31.185:8080/hls/movie.m3u8

这样就可以看到主播端推出来的流。注意,如果使用 http 方式,则是监听的 8080 端口,这个是在配置文件里写的。

4. 网页播放器插件

在第二步里,除了可以直接在浏览器里打开网址来观看视频,还可以写一个网页,实现像优酷那样的视频点播业务。通过使用第三方的播放器,在网页里植入该播放器来实现这个功能,比如说使用 JWPlayer 播放器。

下载 JWPlayer 播放器,放到 nginx 网页服务的根目录,比如说,在我这儿是 /usr/local/nginx/html 这个目录,把 JWPlayer 解压后放到这个目录里,然后在这个目录里新建一个 play.html 的文本文件,再写入以下内容:

<html>
  <head>
    <script src="/jwplayer/jwplayer.js"></script>
  </head>

<body>
  <div id='my-video'></div>
  <script type='text/javascript'>
    jwplayer('my-video').setup({
      file:'http://192.168.31.185/vod/North.mp4',
      fallback:'false'
    });
  </script>
</body>
</html>

对于 flv 文件,可以采用如下的形式来实现网页播放:

<html>
  <head>
    <script src="/jwplayer/jwplayer.js"></script>
  </head>

<body>
  <div id='my-video'></div>
  <script type='text/javascript'>
    jwplayer('my-video').setup({
      file:'http://192.168.31.185/vod/1.flv',
      width:'50%',
      aspectratio:'3:2',
      fallback:'false',
      primary:'flash'
    });
  </script>
</body>
</html>

这样,当你打开 http://192.168.31.185/play.html 这个网页时,就能看到 html 里指定的视频文件。

另外,如果有一些 flv 文件没有办法拖动播放,那是因为没有给 flv 文件添加“关键帧”,可以用工具“yamdi” 和“flvtool”来给 flv 生成关键帧,以 yamdi 为例,下载解压后从 shell 执行:

yamdi –i src.flv –o dst.flv

意思是将 src.flv 添加关键帧,并输出为 dst.flv 。这样 flv 就有关键帧了,即可进行拖动播放操作。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
vscode插件快餐教程(4) - 语言服务器协议lsp
在有lsp之前,存在三个主要问题: 一是语言相关的扩展都是用该语言母语写的,不容易集成到插件中去。毕竟现在大量的语言都带有运行时。 二是语言扫描相关的工作都比较占用CPU资源,运行在vscode内部不如放在独立进程,甚至远程服务器上更好。
2864 0
使用Nginx反向代理和proxy_cache缓存搭建CDN服务器加快Web访问速度
碰到问题:移动用户访问web服务器www.osyunwei.com很慢解决办法:1、在移动机房放置一台nginx反向代理服务器2、通过域名DNS智能解析,所有移动用户访问www.osyunwei.com时解析到nginx反向代理服务器3、nginx反向代理服务器与web服务器之间采用专线连接系统运维  www.
1632 0
关于Mybatis-plus中性能插件失效问题
有关PerformanceInterceptor这个sql性能分析插件的类失效问题
71 0
201604深圳云栖大会Workshop - 用OSS搭建一个视频直播网站
使用OSS搭建一个完整的视频直播网站,可以创建删除直播频道,并且能够使用直播软件从PC端或者移动端推送视频流,并在PC或者移动端观看直播
4667 0
使用Innobackupex快速搭建(修复)MySQL主从架构
    MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一。但对于较大的数据库则该方式并非理想的选择。使用Xtrabackup可以快速轻松的构建或修复mysql主从架构。
1117 0
201608北京云栖Workshop - 基于容器服务的视频点播应用(一)
8月份北京云栖大会Workshop专场《打造千万用户海量视频网站》,为您介绍了如何从0到1,搭建一个大型的视频网站。也许您依然意犹未尽,或者不巧错过了,没有关系,本系列文章将为您回顾如何基于容器服务快速搭建一个视频点播应用。
2263 0
+关注
double2li
一个在IT行业摸爬滚打的老司机
2870
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载