前先后后搭建了两三个星期,终于能够告一段落,nginx实在是有点强大。写一篇笔记来记录一下这个过程当中的思路和解决方案。html

一.搭建nginx平台:

基本是基于http://blog.csdn.net/xiaoliouc/article/details/8363984 一步步安装nginx搭建流媒体服务器 这篇博客来搭建。

个人ubuntu是14.04LTS。各类包的版本是:

nginx-1.9.9

nginx_mod_h264_streaming-2.2.7.tar.gz

openssl-0.9.8zh.tar.gz

pcre-8.12.tar.gz

zlib-1.2.7.tar.gz

为了支持rtmp,还下载了一个模块nginx-rtmp-module-master,没有版本的区别。

在安装过程当中的注意事项:

1.上述无非是./configure make make install.

2.记住若是要修改nginx的./configure的话只用make无需install由于不是覆盖安装。

3.要在sbin的目录下检查./nginx -V 才能看到nginx的配置。

4.nginx在make的时候注意把objs里面的Makefile的权限改为a+w,而且将-Werror删掉,这样就不会把warning当作error来对待。修改makefile是在configure以后make以前。

二.测试http、rtmp、hls的功能

1.配置文件(仅支持http和rtmp)

user  www www;  ##管理用户

worker_processes 30;    ##后台进程

error_log  /usr/local/nginx/logs/error.log;

##nginx错误日志存放路径

pid        /usr/local/nginx/logs/nginx.pid;

events {

use epoll;

##轮训方式

worker_connections      65535;

##容许的最大链接数

}

http {

include       mime.types;

default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log  /usr/local/nginx/logs/access.log;

sendfile        on;

tcp_nopush     on;

#keepalive_timeout  0;

keepalive_timeout  65;

gzip on;

gzip_min_length 1000;

gzip_buffers 4 8k;

gzip_types text/plain;

server {

listen       80;

server_name  192.168.16.69;

#root html;

root /usr/local/nginx/html/flv_file;

#charset koi8-r;

limit_rate_after 5m;

limit_rate  512k;

index  index.html;

charset utf-8;

#   access_log  /usr/local/nginx/logs/host.access.log  main;

#    location / {

#    root   /usr/local/nginx/html/flv_file;

#            index  index.html;

# limit_rate_after 5m;

# limit_rate  512k;

#error_page  404              /404.html;

location ~ \.flv$ {

#     root /var/www/flv;

flv;

}

location ~ \.mp4$ {

#          root /var/www/mp4;

mp4;

}

}

}

rtmp {

server {

listen 1935;

chunk_size 4000;

# video on demand

application vod {

play /usr/local/nginx/html/flv_file;

}

# HLS

# HLS requires libavformat & should be configured as a separate

# NGINX module in addition to nginx-rtmp-module:

# ./configure … –add-module=/path/to/nginx-rtmp-module/hls …

# For HLS to work please create a directory in tmpfs (/tmp/app here)

# for the fragments. The directory contents is served via HTTP (see

# http{} section in config)

#

# Incoming stream must be in H264/AAC/MP3. For iPhones use baseline #H264

# profile (see ffmpeg example).

# This example creates RTMP stream from movie ready for HLS:

#

# ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264

#    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1

#    -f flv rtmp://localhost:1935/hls/movie

#

# If you need to transcode live stream use ‘exec’ feature.

#

application hls {

hls on;

hls_path /usr/local/nginx/html/flv_file;

hls_fragment 10s;

}

}

}

2.配置文件(可支持http,rtmp,hls)

#filename:nginx.conf

#user  nobody;

worker_processes  1;

error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

pid        logs/nginx.pid;

events {

use epoll;

worker_connections  1024;

}

rtmp {

server {

listen 1935;

chunk_size 4000;

# video on demand

application vod {

play /usr/local/nginx/html/flv_file;

}

# HLS

# HLS requires libavformat & should be configured as a separate

# NGINX module in addition to nginx-rtmp-module:

# ./configure … –add-module=/path/to/nginx-rtmp-module/hls …

# For HLS to work please create a directory in tmpfs (/tmp/app here)

# for the fragments. The directory contents is served via HTTP (see

# http{} section in config)

#

# Incoming stream must be in H264/AAC/MP3. For iPhones use baseline #H264

# profile (see ffmpeg example).

# This example creates RTMP stream from movie ready for HLS:

#

# ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264

#    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1

#    -f flv rtmp://localhost:1935/hls/movie

#

# If you need to transcode live stream use ‘exec’ feature.

#

application hls {

hls on;

hls_path /usr/local/nginx/html/flv_file;

hls_fragment 10s;

}

}

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

gzip on;

#log format

log_format  access  ‘$remote_addr – $remote_user [$time_local] “$request” ‘

‘$status $body_bytes_sent “$http_referer” ‘

‘”$http_user_agent” $http_x_forwarded_for’;

#定义一个名为addr的limit_zone,大小10M内存来存储session

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {

listen 8080;

server_name localhost;

# HTTP can be used for accessing RTMP stats

# This URL provides RTMP statistics in XML

location /stat {

rtmp_stat all;

rtmp_stat_stylesheet stat.xsl;

}

location /stat.xsl {

root /home/nairely/Documents/nginxserver/nginx-rtmp-module-master;

}

location /control {

rtmp_control all;

}

location / {

root /home/nairely/Documents/nginxserver/nginx-rtmp-module-master/test/rtmp-publisher;

}

}

server {

listen 80;

server_name localhost;

location / {

root /usr/local/nginx/html/flv_file;

index index.html;

}

location ~ \.flv$ {

root /usr/local/nginx/html/flv_file;

flv;

limit_conn addr 20;

limit_rate 200k;

}

location ~ \.mp4$ {

root /usr/local/nginx/html/flv_file;

mp4;

limit_conn addr 20;

limit_rate 200k;

}

location /hls {

# Serve HLS fragments

alias /usr/local/nginx/html/flv_file;

}

access_log  logs/nginxflv_access.log access;

}

}nginx

3.若是视频不能播放颇有多是权限的问题,设置成644. root(read and write),group(read only)user(read only)

4.nginx做为一个后台服务器,用户从html/flv_file的文件夹中取出视频用户点播。测试的播放器用的是vlc。

http的地址是http://192.168.16.46/yequ.flv

rtmp的地址是rtmp://192.168.16.46:1935/vod/yequ.flv

hls的地址是http://192.168.16.46/hls/sample.m3u8(在segment命令将output的URL设置为http://192.168.16.46/hls)将sample.m3u8文件放在html/flv_file文件夹下,固然这取决与segment语句在哪一个地址下进行。

5.如何启动nginx:

cd /usr/local/nginx/sbin

./nginx -t 检查配置文件的语法问题

若是发现配置文件的路径不对

./nginx -c 路径

./nginx -s reload从新加载配置文件

killall -9 nginx 杀掉全部进程从头开始,若是遇到端口被占用的问题的话。

./nginx 启动,注意在杀掉进程以后必定要从新启动。

service nginx start

三.配置hls+ffmpeg的环境

在配置http和rtmp都比较简单。在搭建nginx平台的前提下就能够实现点播。配置hls出现的问题都比较简单。只是会花一段时间。

主要的配置仍是根据这篇来的http://www.lc365.net/blog/b/31519/ 基于HTTP Live Streaming(HLS) 搭建在线点播系统

这些包实在太多了,我简直属于无聊的阶段。

1.faac的编译问题

http://zhidao.baidu.com/link?url=ASyVwiBE-01ox_O0QascgPdqNNRlXpHCfI6cXyg71JIboOK5MTj3NLfHUPC31HH5b0FiE3tbWUetUfKL29HAzzXu4q0p75Iveu05HPp_ST3

2.在编译ffmpeg的时候发现x264notfound的解决方法

在x264的./configure --enable-static --enable-shared --enable-visualize --system-libx264 --enable-gprof --enable-strip --enable-pic --enable-debug

就是把因此的开关都打开。这简直是误打误撞。

3.

m3u8configure的时候老是会遇到error的问题,能够看到这些错误都是什么东西过期的啥的,直接换ffmpeg。换ffmpeg版本到最新。ffmpeg-2.8.4

git clone https://github.com/johnf/m3u8-segmenter

cd m3u8-segmenter

而后configure的时候

gcc -Wall -g m3u8-segmenter.c -o segmenter -lavformat -lavcodec -lavutil

cp segmenter /usr/bin/

在html/flv_file路径下

ffmpeg -i /var/flvs/baluobu.flv  -f mpegts -acodec libmp3lame -ar 48000 -ab 128k -vcodec libx264 -b 96k -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 96k -bufsize 96k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 320:240 -g 30 -async 2 /var/app/baluobu/baluobu.ts

上述是把flv文件转换成ts文件

下面用segmenter命令将ts转换成10秒一个ts切片,segmenter_test是ts小切片的前缀,-u制定URL地址。

segmenter -i vp5.ts -d 10 -p segmenter_test -m vp5.m3u8 -u

http://192.168.16.46/hls/

在segmenter的时候有一个红色的ignore,以前一直认为是一个error,我去才发现是一个不用管的东西,而后在vlc上用http://192.168.16.46/hls/vp5.m3u8放,其实相似一个直播的功能,播完了就没有ts文件了。

再来一次测试就得再来一遍ffmpeg和segmenter.

总结到这儿。

利用nginx搭建http和rtmp协议的流媒体服务器,用nginx搭建http/rtmp/hls协议的MP4/FLV流媒体服务器...相关推荐

  1. 使用nginx搭建音视频点播服务——基于HLS协议

    文章目录 1 音视频技术 1.1 流媒体 1.2 点播与直播 1.3 HLS流媒体协议 1.4 CDN 2 搭建点播服务(音视频同理) 2.1 nginx服务器 2.2 nginx-vod-modul ...

  2. java做flv直播服务器,EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略...

    EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作. 其中,点播功能主要包含:上传.转码.分发.直播功能,主要包含:直播.录像, 直播支持RTMP ...

  3. EasyCVR出现只有HLS协议可播放,其他协议均无法播放是什么原因?

    EasyCVR平台部署轻快.功能灵活拓展,支持多协议接入.多格式视频流分发,包括RTMP.RTSP.WebSoket-FLV.HTTP-FLV.HLS.WebRTC等,可实现全平台.全终端覆盖.为了便 ...

  4. 基于Nginx+rtmp搭建支持hls协议的点播流媒体服务器(windows/Linux)

    前言:公司最近因为客户端视频文件过大导致视频加载时间很长,让我将视频播放做成流媒体点播的形式,于是查阅了几十篇相关文章以及文档,最终将功能实现.可能是存在版本差异,绝大部分文章介绍的教程并不能成功实施 ...

  5. 推流和拉流的概念以及RTMP和HLS协议

    https://www.bbsmax.com/A/x9J2wZM56o/ 推流为将直播内容推送至服务器的过程:拉流为服务器已有直播内容,用指定地址进行拉取的过程. rtmp rtmp是Real Tim ...

  6. 搭建流媒体推流/拉流服务(RTMP/RTSP/HLS/HTTP-FLV)

    一.什么是流媒体 流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送:如果不使用 ...

  7. Nginx搭建flv视频点播服务器

    Nginx搭建flv视频点播服务器 前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看 ...

  8. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...

  9. 使用HLS协议连接nginx实现近实时流方式播放视频

    文章目录 1. 流媒体 1.1 流式传输 1.1.2 顺序流式传输 1.1.3 实时流式传输 2. 点播 2.1 点播方案 2.2 什么是`HLS` 3. 视频编码 3.1 视频编码格式 3.2 `F ...

  10. 使用nginx搭建HTTP FLV流媒体服务器

    使用nginx搭建HTTP FLV流媒体服务器 文章目录 使用nginx搭建HTTP FLV流媒体服务器 1 HTTP FLV简介 2 HTTP FLV流媒体服务搭建 3 结果验证 1 HTTP FL ...

最新文章

  1. linux怎么增加cpu负载,Linux下的CPU平均负载
  2. 团队-石头,剪刀,布-设计文档
  3. python写文字方法_Transcrypt: 用Python写js的方法
  4. 计算机准考证打印山东省招生教育,山东省教育招生考试院2020高考准考证打印入口:wsbm.sdzk.cn...
  5. html5控制符置于底层,HTML5占位符在焦点上消失
  6. GC算法-引用计数法
  7. LeetCode——LCP 06.拿硬币
  8. 最佳实践 | 腾讯HTAP数据库TBase助力某省核心IT架构升级
  9. iOS平台软件开发工具(一)-新建的工程使用CocoaPods工具集成第三方框架
  10. 利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令
  11. 感谢大家对课程的关注和喜爱
  12. 企业网站应用模式之—LAMP架构的源码编译超详细步骤,有手就行!
  13. 1198_MISRA_C规范学习笔记_Rule 8.6 Rule 8.7
  14. Java面试之Java基础篇(offer 拿来吧你)
  15. 《结构思考力》如何把200ml的水倒入100ml的杯子里?
  16. 世界最著名八大发动机结构!
  17. 2022-2027年中国农用机械融资租赁行业发展监测及投资战略咨询报告
  18. 短距离的无线连接技术--蓝牙
  19. 汽车在十字路口左转时,转大弯和转小弯是什么意思?
  20. 联合概率和条件概率的区别和联系

热门文章

  1. 我国留学低龄化趋势显著-家长失望国内应试教育-留学-低龄化-教育改革
  2. Linux文件颜色含义
  3. 3D 沙盒游戏之人物的点击行走移动
  4. KumiaoQQ机器人框架源码
  5. Go学习笔记 一篇到底
  6. kernel网络之RSS,RPS,RFS和XPS
  7. php简单答题系统,念做个简易php选择题答题系统
  8. python运行出现OSError: [WinError 87] 参数错误。
  9. windows update 无法启动 报错87:参数错误的解决方法
  10. web处理html标记,web前端学习-----HTML标记