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

使用 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 就有关键帧了,即可进行拖动播放操作。

时间: 2025-01-27 01:36:01

使用 nginx 和 rtmp 插件搭建视频直播和点播服务器的相关文章

CNTV独家拥有伦敦奥运会视频直播和点播权

(记者郑小龙)9月2日,CNTV(中国网络电视台)在京举行了第30届 伦敦奥运会暨黄金资源说明会.副总经理夏晓晖表示,CNTV独家拥有对伦敦奥运会所有赛事的视频直播和点播权利. 同时,央视体育频道和CNTV体育台联合运作了伦敦奥运会全媒体报道项目.只要在CNTV伦敦行动专题上传文字.图片或视频,介绍自己眼中的伦敦.想象中的伦敦奥运,就有机会成为伦敦行动报道员,参与伦敦奥运会的报道工作.分享到:

使用IIS Live Smooth Streaming技术搭建流媒体直播系统_win服务器

IIS Live Smooth Streaming(实时平滑流式处理)是微软下一代流媒体解决方案.该技术是在IIS web中集成媒体传输平台IIS media services,实现利用标准 HTTP Web 技术以及高级 Silverlight 功能,确保在互联上传输质量最佳.播放流畅音视频节目. 该技术以下优点: 1. 平滑流式处理是一种自适应流式处理技术,通过动态监视本地带宽和视频呈现性能,平滑流式处理可实时切换视频质量来优化内容的播放,具有高带宽连接和先进计算机的观众可体验完全高清质量的

视频直播营销时代已来,企业该如何把握这波红利?

今年被很多人称为"移动视频直播元年",最重要的标志就是上百家视频直播平台在2016年突然出现,这在渐渐趋冷的互联网创业环境当中尤为引人瞩目. 与此同时,视频直播平台的兴起,也让企业看到了通过视频直播进行营销的机会,今年以来就有乐视.魅族等手机厂商通过在发布会期间邀请众多网红进行视频直播,博得了不少的眼球. 那么,视频直播营销时代是否已经到来?企业利用视频直播做营销的正确姿势到底是什么?企业又该如何把握这一波营销红利呢?东楼不妨来全面分析解读一下: 视频直播营销时代的确已经到来 是的,正

跟阿里云技术专家阙寒一起深度了解视频直播CDN技术

在进入正题之前,我们先来了解视频直播相关的名词含义是什么? 一起扫个盲 通常我们所说的视频,是指连续的图象变化每秒超过24帧(Frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面,看上去是平滑连续的视觉效果,这样连续的画面叫做视频. 而媒体转码是指将一段多媒体包括音频.视频或者其他的内容从一种编码格式转换成为另外一种编码格式. 其中内容分发网络就是大家常说的CDN,这里主要包含流媒体服务器,负载均衡,路由重定向,视频转码,视频录制存储,防盗链,性能等相关技术内容. 下面这几个词我

阿里金融云视频直播分享会-云中沙箱直播实验限时免费

参加阿里金融云视频直播分享会: -详细的了解到如何快速搭建企业自有的视频直播平台 -运用视频与业务结合产生的新玩法, -如何符合视频行业法律法规要求和平台风控等, -全面的了解直播平台建设和运营 活动名称:阿里金融云视频直播分享会 活动地址:上海虹口区溧阳路611号1933老场坊4号楼会展中心. 活动时间:2016年12月28日 13:00-17:00 云中沙箱直播实验限时免费,教您如何基于阿里云快速搭建视频直播平台! 快速部署低延时直播平台之OBS

网易将全程视频直播2010广州亚运会

11月11日消息,广州亚运会合作伙伴及亚运官网承办方网易公司今日宣布,将在亚运期间为中国数亿网民提供所有赛事及开闭幕式的视频直播.点播和全部赛事集锦.网易将提供亚运全程视频直播和点播明天晚上,亚运圣火将在珠江上的海心沙点燃,广州2010年亚运会将正式拉开序幕.据亚运官网执行总编辑徐诗介绍,网易亚运频道将直播整个亚运开幕式活动.同时,在整个亚运会期间,网易也将提供亚运会全部赛事及闭幕式的全程视频直播.点播及赛事集锦."视频是互联网不可 缺少的媒体表现形式,作为亚运的合作伙伴及亚运官网承办方,网易提

P2P直播、点播技术学习经验

自8月份以来一直埋头学习P2P在音/视频直播.点播上的学习,受到不少网友的帮助,在此也留下自己学到的一点点的经验.          第一个接触的开源项目是peercast,应该说上手非常快,这必须感谢王浩聪的注释版,稍做调整后便架起了自己的广播平台,运行起来效果也很理想.于是尝试发布视频流,在局域网内测试未发现问题,但是拿到广域网上问题马上出来了,播放要么中断.要么缓冲.        于是,仔细学习代码的相关流程,网上也查了一些资料,发现peercast的网络模型为树形,而视频所需要的上传流

利用nginx搭建RTMP视频点播、直播、HLS服务器

开发环境 Ubuntu 14.04 server nginx-1.8.1 nginx-rtmp-module nginx的服务器的搭建 安装nginx的依赖库 sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev sudo apt-get install openssl libssl-dev 配置并编译nginx 使用nginx的默认配置,添加nginx的rtmp模块.  ./configure --add-module=.

nginx RTMP FFmpeg 视频直播

/**************************************************************************** * nginx RTMP FFmpeg 视频直播 * 说明: * 主要是为了体验一下怎么搭建一整套的RTMP直播流,用USB Camera进行视频数据 * 采集,然后推送到nginx RTMP服务端,实现实时视频传输,主要是为了体验一把,目 * 前并没有打算进行更深入层面的测试.解析,记录参考文档,主要参考文档1. * * 2017-3-2