网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PAAS服务,在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。今天,网易视频云就给大家分享关于用Nginx搭建flv,mp4,hls流媒体服务器的技术干货!
模块:nginx_mod_h264_streaming(支持h264编码MP4格式的视频)
模块:http_flv_module (支持flv)
模块:http_mp4_module (支持mp4)
模块: nginx-rtmp-module (支持rtmp协议,也支持HLS)
(1)模块下载和解压
wget http://nginx.org/download/nginx-1.6.0.tar.gz
wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
wget http://sourceforge.net/projects/pcre/files/pcre/8.35/pcre-8.35.tar.gz
wget http://zlib.net/zlib-1.2.8.tar.gz
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
wget -O nginx-rtmp-module.zip https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip nginx-rtmp-module.zip
tar -zxvf nginx-1.6.0.tar.gz
tar -zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
tar -zxvf pcre-8.35.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
tar -zxvf openssl-1.0.1g.tar.gz
(2)配置命令,会生成makefile文件
./configure \
–prefix=/usr/local/nginx \
–add-module=../nginx_mod_h264_streaming-2.2.7 \
–add-module=../nginx-rtmp-module \
–with-http_flv_module \
–with-http_mp4_module \
–with-http_stub_status_module \
–with-http_ssl_module \
–with-pcre=../pcre-8.35 \
–with-zlib=../zlib-1.2.8 \
–with-debug
(3)编译和安装
make
make install
(4)问题解决
【1】如果在configure过程中出现以下错误:
/root/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c: In function ‘ngx_streaming_handler’:
/root/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c:158: error: ‘ngx_http_request_t’ has no member named ‘zero_in_uri’
make[1]: * [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1
make[1]: Leaving directory `/root/nginx-0.8.54’
make: * [build] Error 2
那么将src/ngx_http_streaming_module.c文件中以下代码删除或者是注释掉就可以了:
/* TODO: Win32 */
if (r->zero_in_uri)
{
return NGX_DECLINED;
}
如果你没有对这个文件做个更改,那么应该在源码的第157-161行。这个问题是由于版本原因引起,在此不再讨论。
修改完之后,记得先执行make clean,然后再进行重新执行configure、make,最后make install。
【2】如果在编译过程中出现以下错误:
cc1: warnings being treated as errors
那么修改/nginx-1.6.0/objs/Makefile文件
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_LARGEFILE_SOURCE -DBUILDING_NGINX -I../nginx-rtmp-module-master
把上面的 -Werror去掉,不把warnning当作error处理
(5)Nginx的配置

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 {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4000;

video on demand for flv files

application vod {
play /usr/local/nginx/html/flv;
}

video on demand for mp4 files

application vod2 {
play /usr/local/nginx/html/mp4;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
}

MPEG-DASH is similar to HLS

application dash {
live on;
dash on;
dash_path /tmp/dash;
}
}
}
http {
include mime.types;
default_type application/octet-stream;

log_format main ‘ remoteaddr− remote_addr - remote_user [ timelocal]" time_local] "request” ‘

‘ status status body_bytes_sent “$http_referer” ‘

‘” httpuseragent"" http_user_agent" "http_x_forwarded_for”’;

access_log logs/access.log main;

sendfile on;

tcp_nopush on;

keepalive_timeout 0;

keepalive_timeout 65;

gzip on;

server {

in case we have another web server on port 80

listen 8080;
server_name localhost;

charset koi8-r;

access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

error_page 404 /404.html;

redirect server error pages to the static page /50x.html

#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ .mp4 mp4;location .flv { mp4; } location ~ .flv {
flv;
}

This URL provides RTMP statistics in XML

location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {

XML stylesheet to view RTMP stats.

Copy stat.xsl wherever you want

and put the full directory path here

root /var/www/;
}
location /hls {

Serve HLS fragments

types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}

where the m3u8 and ts files are

alias /usr/local/nginx/html/hls;

live streaming setting

root /tmp;

add_header Cache-Control no-cache;

}
location /dash {

Serve DASH fragments

root /tmp;
add_header Cache-Control no-cache;
}
}
}
(6)用ffmpeg生成测试序列
【1】对于mp4文件,生成moov信息前移的mp4格式,适合流媒体播放。
ffmpeg -i /home/administrator/Videos/Amelia_720p.mp4 -c:v libx264 -c:a libvo_aacenc -f mp4 -movflags faststart /home/administrator/Videos/moovfront.mp4
【2】对于flv文件,用flvmeta工具在metadata中注入关键帧的信息,支持随意拖动播放。
ffmpeg -i/home/administrator/Videos/Baroness.mp4 -vcodec libx264 -acodec libvo_aacenc -b:a 128k -ar 44100 -ac 2 -f flv /home/administrator/Videos/Baroness.flv
flvmeta -U -m -k /home/administrator/Videos/Baroness.flv /home/administrator/Videos/Baroness_meta.flv
【3】对于flv的播放,或者直接生成f4v格式的文件。
ffmpeg -i /home/administrator/Videos/sample/vc1_1080p.mkv -acodec libfdk_aac -ac 2 -b:a 128k -ar 48000 -vcodec libx264 -pix_fmt yuv420p -profile:v main -level 32 -b:v 1000K -r 29.97 -g 30 -s 960x540 -f f4v /home/administrator/Videos/hddvd_1000k.f4v
(7)Nginx启动,重启,关闭命令
start nginx 开启
nginx -s stop 快速关闭
nginx -s quit 完全关闭
nginx -s reload 修改过配置文件,快速关闭旧的,开启新服务
nginx -s reopen 重新打开日志文件
[停止操作]
停止操作是通过向nginx进程发送信号来进行的
步骤1:查询nginx主进程号
ps -ef | grep nginx
在进程列表里 面找master进程,它的编号就是主进程号了。
步骤2:发送信号
从容停止Nginx:
kill -QUIT 主进程号
快速停止Nginx:
kill -TERM 主进程号
强制停止Nginx:
pkill -9 nginx
另外, 若在nginx.conf配置了pid文件存放路径则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文 件,我们就不用先查询Nginx的主进程号,而直接向Nginx发送信号了,命令如下:
kill -信号类型 ‘/usr/nginx/logs/nginx.pid’
[平滑重启]
如果更改了配置就要重启Nginx,要先关闭Nginx再打开?不是的,可以向Nginx 发送信号,平滑重启。
平滑重启命令:
kill -HUP 主进程号或进程号文件路径
或者使用
/usr/nginx/sbin/nginx -s reload
注意,修改了配置文件后最好先检查一下修改过的配置文件是否正 确,以免重启后Nginx出现错误影响服务器稳定运行。判断Nginx配置是否正确命令如下:
nginx -t -c /usr/nginx/conf/nginx.conf
或者
/usr/nginx/sbin/nginx -t
(8)播放测试
启动nginx后测试:
http://192.168.1.105/player.swf?type=http&file=test1.flv
说明: #我的ip是192.168.1.105

player.swf是我的JW Player播放器

http是表示居于http分发方式

test1.flv是我的flv视频文件

[flash]
http://localhost:8080/mediaplayer/player.swf?type=http&file=../mp4/HaroldKumar.mp4
http://localhost:8080/mediaplayer/player.swf?type=http&file=../flv/Baroness.flv
[hls –> flash]
http://localhost:8080/jwplayer/HLSprovider/test/jwplayer6/index2.html
[hls]
http://10.240.155.183:8080/hls/movie.m3u8
[rtmp –> http]
http://10.240.155.183:8080/flowplayer/index2.html
[live stream]
./ffmpeg -loglevel verbose -re -i /home/administrator/Videos/sample/h264_720p_hp_5.1_6mbps_ac3_unstyled_subs_planet.mkv -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 2 -f flv rtmp://localhost:1935/hls/movie
更多技术分享,请关注网易视频云官方网站(http://vcloud.163.com/)或者网易视频云官方微信(vcloud163)进行交流与咨询。

作者:头条号 / 互联网小兵
链接:http://toutiao.com/a6291037723583758593/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

网易视频云:用Nginx搭建flv,mp4,hls流媒体服务相关推荐

  1. 网易视频云分享:如何搭建MP4媒体服务器

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...

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

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

  3. 网易视频云首推多路互动直播,引领直播新时代

    在9月20号的网易云战略发布会上,网易视频云正式对外推出了多路互动直播功能.此消息一出,立即引起了业界的广泛关注.而网易视频云早前就已经对外推出过直播.点播和直播录制等功能,并成功获取了百余家忠实客户 ...

  4. 网易视频云首推多路互动直播,首批测试邀请火爆来袭

    在9月20号的网易云战略发布会上,网易视频云正式对外推出了多路互动直播功能.此消息一出,立即引起了业界的广泛关注.而网易视频云早前就已经对外推出过直播.点播和直播录制等功能,并成功获取了百余家忠实客户 ...

  5. 十年•杭研大咖说 | 邱似峰:从应届生到网易视频云CTO的蜕变

    2016年,网易杭州研究院(以下简称"杭研")成立十周年之际,网易云推出"十年·杭研大咖说"系列访谈文章,针对亲历杭研核心技术体系变迁的数位技术大牛发问,揭秘网 ...

  6. 网易视频云:构建一站式视频云点播平台的关键技术

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PaaS服务.在线教育.远程医疗.娱乐秀场 ...

  7. 邱似峰:网易视频云如何实现应用加速

    2016年5月12日-14日,第七届中国数据库技术大会(DTCC 2016)在北京国际会议中心正式拉开帷幕.作为国内数据库与大数据领域最大规模的技术盛宴,DTCC已经同大家携手走过七载春秋.本届是大会 ...

  8. 十年 杭研大咖说 | 邱似峰:从应届生到网易视频云CTO的蜕变

    2016年,网易杭州研究院(以下简称"杭研")成立十周年之际,网易云推出"十年·杭研大咖说"系列访谈文章,针对亲历杭研核心技术体系变迁的数位技术大牛发问,揭秘网 ...

  9. 秀场直播风头正劲,网易视频云助力破除音视频技术壁垒

    近日,2016中国云计算技术大会在京开幕,掀起行业内外关于云计算的又一次大讨论.其中,CSDN创始人.极客帮创始人蒋涛的开场演讲<中国云计算的动向和机会>为中国云计算行业打了一剂强心针.他 ...

最新文章

  1. 相关子查询中exists后select 加数字的理解
  2. AgileEAS.NET平台开发指南-实现插件
  3. 49.什么是拼接技术?
  4. maven java 编译乱码
  5. php写好程序后需要嵌套,什么是PHP嵌套函数?
  6. vim配置之snippets代码块
  7. 最近项目中遇到的问题以及解决办法
  8. 61 SD配置-科目分配-分配税收确定的交货工厂
  9. linux切分文件指定行_vim技巧:在不同文件buffer间切换,在多窗口跳转和改变窗口大小...
  10. Spring Cloud微服务技术栈学习(导读)
  11. 浅谈聚簇索引和非聚簇索引的区别
  12. restore和recover区别
  13. iis+php解析漏洞修复,IIS+PHP fastcgi模式 pathinfo取值错误任意代码执行漏洞修复方法...
  14. 代码随想录第十三天 LeetCode 239、347(队列)
  15. Surface Pro 4 系统优化全教程及QA
  16. java打印设置_java如何设置系统默认打印机
  17. 产品调研,如何避免「浮于表面」?
  18. 如何设置计算机的休眠时间,电脑的睡眠时间如何设置?
  19. SAP BP屏幕增强页签
  20. 我们熟悉的106短信的水好深啊

热门文章

  1. 班主任寒假收心话术发家长群
  2. 帮我写一篇家长会上用的任课教师讲稿
  3. bert第三篇:tokenizer
  4. JS验证用户名必须以字母(不区分大小写)、数字、下划线(_)随意组合的字符
  5. centos如何解压rar格式文件
  6. Lazada店铺运营--提升销量的核心技巧及店铺前期运营规划
  7. mongodb忘记admin密码操作
  8. linux下nexus3修改admin密码,nexus3忘记密码
  9. 区块链技术将成为金融科技的下一个风口
  10. 人生发展,遵循复利原则