Fork me on GitHub

Mac搭建nginx+hls+rtmp服务器

我是在自己电脑上搭建的环境,每个机器的环境可能不一样,搭建的问题也各有不同。无论怎样,多查,多看,多实践。

安装 homebrew

homebrew 的官网http://brew.sh/下载homebrew ,如果有则省略该步骤。

安装 nginx

brew tap homebrew/nginx
brew install nginx-full --with-rtmp-module

这样nginx和rtmp模块就安装好了,如果不需要rtmp就不用 –with-rtmp-module 这段代码。

brew options nginx-full

通过上面这段代码可以看见编译nginx的选项模块。

运行 nginx

执行:

nginx

然后在浏览器打开 localhost:8080 如果出现nginx,那么你的nginx就安装成功了。

配置

brew info nginx

通过运行上面的命令,会出现一些信息,这些信息对你非常有帮助。

==> Caveats
Docroot is: /usr/local/var/www

The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.

nginx will load all files in /usr/local/etc/nginx/servers/.

- Tips -
Run port 80:
 $ sudo chown root:wheel /usr/local/Cellar/nginx-full/1.10.0/bin/nginx
 $ sudo chmod u+s /usr/local/Cellar/nginx-full/1.10.0/bin/nginx
Reload config:
 $ nginx -s reload
Reopen Logfile:
 $ nginx -s reopen
Stop process:
 $ nginx -s stop
Waiting on exit process
 $ nginx -s quit

To have launchd start homebrew/nginx/nginx-full now and restart at login:
  brew services start homebrew/nginx/nginx-full
Or, if you don't want/need a background service you can just run:
  nginx

nginx的配置文件在:

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

打开配置文件并编辑:

http {
   #  这个模块是默认的,注意rtmp与http平级
}

# 在http节点后面加上rtmp配置:
rtmp {
    server {
        listen 1935;
        application sunxulive {
            live on;
            record off;
        }
    }
}

重启nginx:

nginx -s reload
nginx -s stop
nginx

安装 FFmpeg

brew install ffmpeg

推流

ffmpeg -re -i ~/Desktop/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/sunxulive/test

然后在支持rtmp协议的机器上播放url即可。

rtmp://localhost:1935/sunxulive/test

这里就完成了rtmp的直播。下面说一些基于hls协议的点播,点播也是配置nginx的配置文件,一样很简单。

hls 点播

http里面的server模块里添加:

location /hls {   
		  types {  
             application/vnd.apple.mpegurl m3u8;  
             video/mp2t ts;  
         }  
         root /temp;
}  

重新reload下nginx,并重启后。在/temp 目录下放置一个test.m3u8文件即可。然后通过url访问即可观看视频。

http://192.168.0.149:8082/test.m3u8

这里我设置的端口是8082,大家可以在不被占用的端口随便设置一个。192.168.0.149是我本机的IP地址。

如果是很多.m3u8文件,可以每个文件夹放一个.m3u8,然后访问 http://192.168.0.149:8082/hls/filename/test.m3u8 即可。

切片

ffmpeg -i ~/Desktop/1080p_4_3_HQ.mp4 -c:v libx264  -c:a aac -f hls -hls_list_size 0 -hls_time 5 /temp/616/test.m3u8

缓存和视频压缩

用proxy_cache 实现ts静态资源的缓存,但是试了各种方法参数,还是未能实现,最近查了些资料可能与我只用我的一个MAC有关,因为proxy_cache是反向代理缓存,中间加个代理服务器就行了。

视频压缩涉及到码率,帧率,分辨率,清晰度等一系列的概念,我试了1080p下各种码率下视频的清晰度,然而基于图片质量的高低不同,分辨率和码率没有明确的换算关系,全凭肉眼感觉~尝试压缩一些录屏软件录好的一些720p视频,80k的码率就够用了,而我用电脑录得720p的80k码率视频已经看不清人了!可能跟二次解码有关系,也可能跟我直接转成m3u8文件有关系。http://blog.csdn.net/leixiaohua1020/article/details/12856087博客上最后一张图反映出了一般情况下视频质量与码率存在线性关系,一般对视频质量要求不高的情况下,MOS=2或者3应该就差不多了。

这就是最近忙的了,希望能对看到的人有些帮助。

最后,祝好;)