将nginx作为视频点播服务器

流媒体服务器
流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件下载完毕。由于流媒体技术的优越性,该技术广泛应用于视频点播、视频会议、远程教育、远程医疗和在线直播系统中。作为新一代互联网应用的标志,流媒体技术在近几年得到了飞速的发展。

流媒体播放方式
HTTP方式
这种方式要下载FLV视频文件到本地播放,一旦FLV视频文件下载完成,就不会消耗服务器的资源和带宽,但是拖动功能没有RTMP/RTMP流媒体方式强大,很多视频网站都是用HTTP方式实现的,如:YouTube,土豆,酷6等

RTMP/RTMP流媒体方式
这种方式不用下载FLV视频文件到本地,可以实时的播放flv文件,可以任意拖拽播放进度条,但是比较消耗服务器的资源。

安装
nginx 1.1.3之后已经默认支持mp4,flv模块,无须第三方模块支持。我这里使用的是docker容器:

docker run -d –name nginx -p 80:80 -v ~/opt/local/nginx/logs:/var/log/nginx -v ~/opt/local/nginx:/etc/nginx nginx
1
将容器内的nginx配置目录(即/etc/nginx)挂载到了本机目录方便我们对配置文件进行修改。

配置文件
在~/opt/local/nginx/conf.d下新建一个mp4.conf,加入如下配置

1 server {
2 listen 80 ;
3 server_name localhost;
4 root /etc/nginx/mp4;
5 limit_rate 256k;
6
7 location ~ \.flv$ {
8 flv;
9 }
10
11 location /video/ {
12 rewrite ^/video/(.*)$ /jwplayer-7.10.4/$1 last;
13 }
14
15 location ~ \.mp4$ {
16 mp4;
17 # mp4_buffer_size 1m;
18 # mp4_max_buffer_size 5m;
19 limit_rate_after 5m;
20 limit_rate 100k;
21 # limit_conn perip 1;
22 }
23 }

关于nginx的基本配置不再赘述,(可以参考我的博客nginx进阶-配置文件)将由flv与mp4结尾的uri交给对应的模块。随便找一个mp4或flv格式的视频放在root目录下(配置虚拟容器中的路径/etc/nginx/mp4,映射到真实机器的路径时~/opt/local/nginx/mp4)现在我们搭配jwplayer进行视频的点播。

下载jwplayer,我这里使用的7.10.4的免费版本,解压后得到如下目录
%title插图%num

这里注意两个文件,一个是jwplayer.flash.swf,还有一个就是jwplayer.js文件。官方已经贴心的为我们准备好了demo,打卡demo.html进行一些修改:

<script type=”text/javascript” src=”jwplayer.js”></script>
<script>jwplayer.key=”4sNBpozdkb2Gv+IYeWyd+CID9tW2NXdJE5GeSg==”;//修改为自己的key</script>
<div id=”player”>
Loading…
</div>
<script type=”text/javascript”>
jwplayer(“player”).setup({
“flashplayer”: “http://localhost/jwplayer.flash.swf”, //player.swf文件的uri
“file”: “http://localhost/1.mp4”,//视频文件的服务器uri
“aspectratio”: “16:9”,//播放器自适应比例
“height”: “360”,//播放器高度
“type”:”mp4″,//播放文件类型(可选)
“title”: “测试标题”,//标题(可选)
“description”: “测试视频描述”,//描述(可选)
“image”: “http://ww4.sinaimg.cn/large/b6839357jw1e3val80tknj20dw099jsb.jpg”,//视频封面(可选)
“repeat”:”true”,//重复播放(留空则不重复播放)
“autostart”:”true”,//自动播放(留空则不启用自动播放)
});
</script>

重点关注javascript标签中的内容,请配合注释一起食用。

效果
访问我们的nginx http://localhost/video/demo.html

%title插图%num

这样一个简单的视频点播服务器就完成了,其它的需求自行扩展即可。接下来有空会研究一下RTMP流媒体服务器的搭建(懒,逃~~)