利用nginx搭建http和rtmp协议的流媒体服务器,用nginx搭建http/rtmp/hls协议的MP4/FLV流媒体服务器...
前先后后搭建了两三个星期,终于能够告一段落,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流媒体服务器...相关推荐
- 使用nginx搭建音视频点播服务——基于HLS协议
文章目录 1 音视频技术 1.1 流媒体 1.2 点播与直播 1.3 HLS流媒体协议 1.4 CDN 2 搭建点播服务(音视频同理) 2.1 nginx服务器 2.2 nginx-vod-modul ...
- java做flv直播服务器,EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略...
EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作. 其中,点播功能主要包含:上传.转码.分发.直播功能,主要包含:直播.录像, 直播支持RTMP ...
- EasyCVR出现只有HLS协议可播放,其他协议均无法播放是什么原因?
EasyCVR平台部署轻快.功能灵活拓展,支持多协议接入.多格式视频流分发,包括RTMP.RTSP.WebSoket-FLV.HTTP-FLV.HLS.WebRTC等,可实现全平台.全终端覆盖.为了便 ...
- 基于Nginx+rtmp搭建支持hls协议的点播流媒体服务器(windows/Linux)
前言:公司最近因为客户端视频文件过大导致视频加载时间很长,让我将视频播放做成流媒体点播的形式,于是查阅了几十篇相关文章以及文档,最终将功能实现.可能是存在版本差异,绝大部分文章介绍的教程并不能成功实施 ...
- 推流和拉流的概念以及RTMP和HLS协议
https://www.bbsmax.com/A/x9J2wZM56o/ 推流为将直播内容推送至服务器的过程:拉流为服务器已有直播内容,用指定地址进行拉取的过程. rtmp rtmp是Real Tim ...
- 搭建流媒体推流/拉流服务(RTMP/RTSP/HLS/HTTP-FLV)
一.什么是流媒体 流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送:如果不使用 ...
- Nginx搭建flv视频点播服务器
Nginx搭建flv视频点播服务器 前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看 ...
- 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )
文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...
- 使用HLS协议连接nginx实现近实时流方式播放视频
文章目录 1. 流媒体 1.1 流式传输 1.1.2 顺序流式传输 1.1.3 实时流式传输 2. 点播 2.1 点播方案 2.2 什么是`HLS` 3. 视频编码 3.1 视频编码格式 3.2 `F ...
- 使用nginx搭建HTTP FLV流媒体服务器
使用nginx搭建HTTP FLV流媒体服务器 文章目录 使用nginx搭建HTTP FLV流媒体服务器 1 HTTP FLV简介 2 HTTP FLV流媒体服务搭建 3 结果验证 1 HTTP FL ...
最新文章
- linux怎么增加cpu负载,Linux下的CPU平均负载
- 团队-石头,剪刀,布-设计文档
- python写文字方法_Transcrypt: 用Python写js的方法
- 计算机准考证打印山东省招生教育,山东省教育招生考试院2020高考准考证打印入口:wsbm.sdzk.cn...
- html5控制符置于底层,HTML5占位符在焦点上消失
- GC算法-引用计数法
- LeetCode——LCP 06.拿硬币
- 最佳实践 | 腾讯HTAP数据库TBase助力某省核心IT架构升级
- iOS平台软件开发工具(一)-新建的工程使用CocoaPods工具集成第三方框架
- 利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令
- 感谢大家对课程的关注和喜爱
- 企业网站应用模式之—LAMP架构的源码编译超详细步骤,有手就行!
- 1198_MISRA_C规范学习笔记_Rule 8.6 Rule 8.7
- Java面试之Java基础篇(offer 拿来吧你)
- 《结构思考力》如何把200ml的水倒入100ml的杯子里?
- 世界最著名八大发动机结构!
- 2022-2027年中国农用机械融资租赁行业发展监测及投资战略咨询报告
- 短距离的无线连接技术--蓝牙
- 汽车在十字路口左转时,转大弯和转小弯是什么意思?
- 联合概率和条件概率的区别和联系