异想天开

What's the true meaning of light, Could you tell me why

nginx搭建流媒体服务器

日期:2014-03-23 22:38:57
  
最后更新日期:2015-07-21 00:00:18
【技术文章,非码农勿入】
最后更新日期: 2014-9-20
目录:
1.概述
2.nginx流媒体服务器
3.静态网页

一.概述:
上周搭建了个流媒体的服务器,当时主要在于我是wp手机,坑爹的微软,我在手机上面看本地视频一点也不方便。年前的时候,有个想法,就是家里没网,那么我拷贝一些电脑在本地,其他人(假想为手机)就可以通过局域网的形式来看我电脑上面的私货。这次做了,主要原因在于我想用wp手机看一个钢琴教学视频,而有时候网络比较卡,这让我很不爽,于是有了这个解决方案。
二.nginx流媒体服务器
之前我一直没搞懂流媒体的实现方式,后来看了参考1列举的文章,我想明白了。rtmp大概是实时的,而现今很多在线视频网站不是这种实现方式,而是http分块下载。播放视频也有两种,一种是flash插件,而另外一种就是html5的video标签。flash插件播放flv,其实是先下载个swf文件,这个相当于是播放器。nginx的编译选项是这样的:
[code lang="cpp"]
./configure --add-module=$dir/nginx_mod_h264_streaming-2.2.7 --with-http_ssl_module --with-pcre=../pcre-8.34 --with-zlib=../mediainfo/zlib/ --user=www --group=www --prefix=/usr/local/nginx --with-http_flv_module --with-http_stub_status_module
[/code]
有可能pcre的版本在你的系统这个不行,那么换另外一个版本尝试就是。第一次编译,可以先编译好不带这些插件的nginx,成功一次并熟悉后再加上重新编译。具体过程参考1很详细了。dir为我插件的目录。流媒体服务器需要两个插件:nginx_mod_h264_streaming-2.2.7以及http_flv_module,这样就可以顺利播放http下载的flv和mp4了。这两个插件和zlib库及pcre库是要自己从官网下载的,然后放到某个目录,configure时指定路径。而网页在线播放flv,同时还需要adobe flash的播放器player.swf。在参考的1作者提供了一个下载地址。
编译好了,nginx的配置文件/usr/local/nginx/conf/nginx.conf:
[code lang="cpp"]
user root root;
worker_processes 3;
error_log /usr/local/nginx/logs/error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
events {
use epoll;
worker_connections 15;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
keepalive_timeout 60;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
access_log off;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
######################################################################
server {
listen 80;
server_name 127.0.0.1;
root /usr/local/nginx/html/flv_file/;
limit_rate_after 5m; ####在flv视频文件下载了5M以后开始限速
limit_rate 512k; ####速度限制为512K
index index.html;
charset utf-8;
location ~ \.flv {
flv;
}
location ~ \.mp4$ {
mp4;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[/code]

三.静态网页
[code lang="cpp"]
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div style="text-align:center;">
<button onclick="playPause()">播放/暂停</button>
<button onclick="makeBig()">大</button>
<button onclick="makeNormal()">中</button>
<button onclick="makeSmall()">小</button>
<button onclick="makefast()">速度变快</button>
<button onclick="makeslow()">速度变慢</button>
<br />
<video id="video1" width="420" style="margin-top:15px;">
<source src="http://192.168.137.1:8888/canon_l.mp4" type="video/mp4" />
Your browser does not support HTML5 video.
</video>
</div>

<script type="text/javascript">
var myVideo=document.getElementById("video1");

function playPause()
{
if (myVideo.paused)
myVideo.play();
else
myVideo.pause();
}

function makeBig()
{
myVideo.width=560;
}

function makeSmall()
{
myVideo.width=320;
}

function makeNormal()
{
myVideo.width=420;
}
function makefast()
{
myVideo.defaultPlaybackRate += 10;
}
fuction makeslow()
{
myVideo.defaultPlaybackRate -= 10;
}
</script>
</body>
</html>
[/code]
第一次写js代码,我在vim里面直接编辑,运行时出错了,然后我用firefox的firebug来调试,当然最后,我是去掉了部分代码后发现出问题的代码,居然是function编写错误,无语了。为什么我会贴出这段静态网页的代码,因为通过它,我知道了DOM,知道了html解析产生的语法树,而这种树形结构可以在firebug里面找到。简单的东西也可以找到本质吧。哦,对了,上诉的解决方法还包括,笔记本新建wifi热点,对于win7及win8的电脑可以支持系统建wifi热点,大概就是用一个取得管理员权限的cmd,来执行如下命令:
[code lang="cpp"]
netsh wlan set hostednetwork mode=allow ssid=FreeWiFi key=123456789
#注意是hostednet
netsh wlan start hostednet
[/code]
然后找到你当前上网的网卡,右键点击属性选共享,勾选共享上网,选择FreeWiFi的网络连接即可。
参考:
1.nginx搭建mp4、flv流媒体服务器daimajishu.iteye.com/blog/1083592
2.video标签轻松添加视频jingyan.baidu.com/article/4b52d7027daed8fc5c774bb6.html