服务器版本CentOS6.5


Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

下载地址http://tengine.taobao.org/

1先添加几个RPM下载源

1.1)安装RPMforge的CentOS6源
[root@AY130611215205Z ~]# wget -chttp://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
[root@AY130611215205Z ~]# rpm �importhttp://apt.sw.be/RPM-GPG-KEY.dag.txt
[root@AY130611215205Z ~]# rpm -i rpmforge-release-0.5.3-1.el6.rf.*.rpm

1.2)安装epel源
http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
[root@AY130611215205Z ~]# rpm -Uvf epel-release-6-8.noarch.rpm

安装完成,查看一下源列表,看到rpmforge和epel字样即可
[root@AY130611215205Z ~]# ls -lh /etc/yum.repos.d

2.安装转码工具Mencoder及ffmpeg(约定:每个小点操作之前先回到用户主目录,即cd ~)


2.1)安装一些基础包,不用担心重复,已经存在的会自动忽略或升级
[root@AY130611215205Z ~]# yum install gcc make automake bzip2 unzip patch subversion libjpeg-devel
[root@AY130611215205Z ~]# wgethttp://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
[root@AY130611215205Z ~]# tar zxvf yasm-1.2.0.tar.gz
[root@AY130611215205Z ~]# cd yasm-1.2.0
[root@AY130611215205Z yasm-1.2.0]# ./configure
[root@AY130611215205Z yasm-1.2.0]# make && make install
[root@AY130611215205Z yasm-1.2.0]# cd ~


[root@AY130611215205Z ~]# yum remove ffmpeg x264

2.3)先安装一些Mplayer编码库(仅限于64位系统)

http://www2.mplayerhq.hu/MPlayer/releases/codecs/essential-amd64-20071007.tar.bz2


[root@AY130611215205Z ~]# tar xvjf essential-amd64-20071007.tar.bz2
[root@AY130611215205Z ~]# mkdir /usr/local/lib/codecs
[root@AY130611215205Z ~]# cp -Rvp essential-amd64-20071007/* /usr/local/lib/codecs/


[root@AY130611215205Z ~]# vim /etc/ld.so.conf
添加以下两行到上面的文件里
/usr/lib
/usr/local/lib

2.4)再安装一些格式转换常用的编码库
[root@AY130611215205Z ~]# yum install faac-devel lame-devel amrnb-devel opencore-amr-devel amrwb-devel libvorbis-devel libtheora-devel xvidcore-devel


2.5)安装x.264
[root@AY130611215205Z ~]# wgetftp://ftp.videolan.org/pub/videolan/x264/snapshots/last_stable_x264.tar.bz2
[root@AY130611215205Z ~]# tar xvjf last_stable_x264.tar.bz2
[root@AY130611215205Z ~]# cd x264-snapshot-20140219-2245-stable/ (这可能日期有区别,自己ls一下)
[root@AY130611215205Z x264-snapshot-20140219-2245-stable]# ./configure --enable-shared --enable-pic
[root@AY130611215205Z x264-snapshot-20140219-2245-stable]# make && make install
[root@AY130611215205Z x264-snapshot-20140219-2245-stable]# cd ~

2.6)安装libvpx
http://webm.googlecode.com/files/libvpx-v1.2.0.tar.bz2
[root@AY130611215205Z ~]# tar xvjf libvpx-v1.2.0.tar.bz2
[root@AY130611215205Z ~]# cd libvpx-v1.2.0
[root@AY130611215205Z libvpx-v1.2.0]# ./configure --enable-shared --enable-pic
[root@AY130611215205Z libvpx-v1.2.0]# make && make install
[root@AY130611215205Z libvpx-v1.2.0]# cd ~


2.7)安装FFmpeg
http://ffmpeg.org/releases/ffmpeg-2.0.1.tar.bz2
[root@AY130611215205Z ~]# tar xvjf ffmpeg-2.0.1.tar.bz2
[root@AY130611215205Z ~]# cd ffmpeg-2.0.1
[root@AY130611215205Z ffmpeg-2.0.1]# ./configure �enable-gpl �enable-version3 �enable-shared �enable-nonfree �enable-postproc �enable-libfaac �enable-libmp3lame �enable-libopencore-amrnb �enable-libopencore-amrwb �enable-libtheora �enable-libvorbis �enable-libvpx �enable-libx264 �enable-libxvid
[root@AY130611215205Z ffmpeg-2.0.1]# make && make install
[root@AY130611215205Z ffmpeg-2.0.1]# cd ~


让动态链接库被系统共享
[root@AY130611215205Z ~]# ldconfig

2.8)最后安装mencoder
[root@AY130611215205Z ~]# yum install mplayer mencoder flvtool2

查看一下已经安装好的音频和视频编码器
查看所有所支持的音频编码
[root@AY130611215205Z ~]# mencoder -oac help
查看所有所支持的视频编码
[root@AY130611215205Z ~]# mencoder -ovc help
具体结果可参考http://www.mplayerhq.hu/DOCS/HTML/zh_CN/menc-feat-selecting-codec.html

3.安装配置Tengine(Nginx)

3.1)先安装各种依赖(Nginx需要pcre支持,yamdi用来为flv创建关键帧才能随意拖动)
[root@AY130611215205Z ffmpeg-2.0.1]# yum install gcc gcc-c++ openssl-devel zlib-devel pcre pcre-devel yamdi
3.2)下载所需的Nginx模块
第一个是Nginx_mod_h264_streaming,让Nginx支持flv/mp4流播放
http://h264.code-shop.com/download/Nginx_mod_h264_streaming-2.2.7.tar.gz
[root@AY130611215205Z ~]# tar zxvf Nginx_mod_h264_streaming-2.2.7.tar.gz
注意:先要修改一下这家伙的源码,注释掉Nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c的158到161行
/* Todo: Win32 */
//if (r->zero_in_uri)
// {
// return NGX_DECLINED;
// }

第二个是Nginx-rtmp-module,让Nginx支持rtmp/hls协议
[root@AY130611215205Z ~]# wget -O Nginx-rtmp-module.ziphttps://github.com/arut/Nginx-rtmp-module/archive/master.zip
[root@AY130611215205Z ~]# unzip Nginx-rtmp-module.zip
下载清缓存的模块
[root@AY130611215205Z ~]# wget -O ngx_cache_purge.zip https://github.com/FRiCKLE/ngx_cache_purge/archive/master.zip
[root@AY130611215205Z ~]# unzip ngx_cache_purge.zip


3.3)安装tengine(Nginx)

tar zxvf tengine-2.1.2.tar.gz

cd tengine-2.1.2


./configure --user=daemon --group=daemon --prefix=/usr/local/tengine --add-module=../Nginx-rtmp-module-master --add-module=../ngx_cache_purge-master --add-module=../Nginx_mod_h264_streaming-2.2.7 --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_gzip_static_module --with-http_flv_module

make && make install

/**―――以下是安装了Tengine后重新编译的代码,模块的路径自己对一下―――**//
./configure �user=www �group=www �prefix=/usr/local/tengine/ �add-module=../../../Nginx-rtmp-module-master �add-module=../../../ngx_cache_purge-master �add-module=../../../Nginx_mod_h264_streaming-2.2.7 �with-http_stub_status_module �with-http_ssl_module �with-http_sub_module �with-http_gzip_static_module �with-http_flv_module �with-http_concat_module=shared �with-http_sysguard_module=shared �with-google_perftools_module �with-http_image_filter_module
运行一下Nginx
[root@AY130611215205Z ~]# /usr/local/tengine/sbin/Nginx
然后用浏览器你的服务器IP,看到welcome就对了
或者到Nginx的sbin目录下,运行一下Nginx -V,看看列表出来的modules对不对


3.4)各种配置Nginx
编辑/usr/local/tengine/conf/Nginx.conf文件.
贴一下配置文件
―――――――――――――――――――――――Nginx配置文件―――――――――――――――――
#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 /mnt/media/vod;
# 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 /mnt/media/app;
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;

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 /mnt/soft/Nginx-rtmp-module-master;
location /control {
rtmp_control all;
location / {
root /mnt/soft/Nginx-rtmp-module-master/test/rtmp-publisher;
listen 80;
server_name localhost;
root /mnt/wwwroot;
index index.html;
location ~ \.flv$ {
root /mnt/media/vod;
flv;
limit_conn addr 20;
limit_rate 200k;
location ~ \.mp4$ {
mp4;
location /hls {
# Serve HLS fragments
alias /mnt/media/app;
access_log logs/Nginxflv_access.log access;
}
――――――――――――――――――Nginx配置文件――――――――――――――

4.把自己的电影转换成mp4和flv格式来测试Nginx搭的环境

4.1)准备部电影,硬盘上随便找,
把电影重命名为 movie1.mp4并上传到服务器/opt/media/video下面,这里目录用来存放我们的原始视频。还有一个目录是/opt/media/vod 用来存放转换后的视频。
我这里的具体目录结构为:
/opt/media/video -> 存放原始视频
/opt/media/app -> 存放转成m3u8的视频,供http访问(HLS)
/opt/media/vod -> 存放转换后的flv和mp4视频,供http或rtmp访问

4.2)用ffmpeg转换mp4文件(ffmpeg不支持rmvb)
[root@AY130611215205Z ~]# cd /opt/media/video/
[root@AY130611215205Z video]#ffmpeg -i movie1.mp4 -y -vcodec libx264 -vf scale="640:-1" -r 15 -acodec libfaac ../vod/movie1.flv

-y:文件覆盖,-vf scale=”640:-1”:尺寸调整为宽度640高度自动,-r 15:帧数15fps,这里用libfaac音频编码防止转成ts格式时iPhone没有声音


添加关键帧用来支持拖动播放
[root@AY130611215205Z video]# cd ../vod
[root@AY130611215205Z vod]# mv movie1.flv movie1-src.flv
[root@AY130611215205Z vod]# yamdi -i movie1-src.flv -o movie1.flv
[root@AY130611215205Z vod]# rm -rf movie1-src.flv

4.3)用mencoder转换rmvb文件
4.4)把flv转换成hls的m3u8
下载安装segmenter

yum install -y curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gettext-devel git


[root@AY130611215205Z ~]# git clonehttps://github.com/johnf/m3u8-segmenter.git
[root@AY130611215205Z ~]# cd m3u8-segmenter/
[root@AY130611215205Z m3u8-segmenter]# gcc -Wall -g m3u8-segmenter.c -o segmenter -lavformat
[root@AY130611215205Z m3u8-segmenter]# cp segmenter /usr/bin/


转换成ts,片源大小及清晰度等取决于flv文件,所以转成flv的时候一定要统一起来
[root@AY130611215205Z vod]# cd /mnt/media/vod
[root@AY130611215205Z vod]# mkdir /mnt/media/app/movie1/
[root@AY130611215205Z vod]#ffmpeg -y -i movie1.flv -f mpegts -c:v copy -c:a copy -vbsf h264_mp4toannexb /mnt/media/app/movie1/main.ts


切片
[root@AY130611215205Z movie1]# cd /mnt/media/app/movie1/
[root@AY130611215205Z movie1]# segmenter -i main.ts -d 10 -p movie1 -m movie1.m3u8 -uhttp://121.199.47.208/hls/movie1/
-d 10:每个切片为10秒,-p movie1:切片的名字的前缀
-u URL地址:m3u8中播放列表的地址前缀,自己cat一下生成的movie1.m3u8就知道什么用 了

测试一下,用iPhone的Safari访问一下http://121.199.47.208/hls/movie1/movie1.m3u8

CentOS6下基于tengine搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)的更多相关文章

  1. iOS AVPlayer未加载大多数HLS流

    解决方法我使用的HTTPURL因此不受保护,它不允许设备或模拟器播放它.我在info.plist中添加了一个异常,允许不安全的协议让iOS顺利地流式传输HLS.

  2. iOS上的HLS AVPlayer – 返回现场直播

    我有一个AVPlayer,它正在流式传输实时HLS流.当用户多任务应用程序时,我看到播放速率下降到0.0(暂停),当用户返回时它返回到1.0(播放),但从暂停点开始播放.在不重新启动流的情况下强制播放器恢复生存的最佳方法是什么?是否有seektotime方法处理最接近的实时时间参数?

  3. swift下URL里中文转码方法

  4. swift学习笔记 - Unicode转码

    现在用swift写了一个新项目,发现String和Nsstring还是有很大不同的,在Unicode转码上遇到了问题,我写了一个扩展,把以前OC的转码用swift重写了一遍,发现也能用,下面把我用swift做Unicode转码的代码贴在这里,亲测好用~~

  5. Swift3.0语言教程删除字符与处理字符编码

    Swift3.0语言教程删除字符与处理字符编码Swift3.0语言教程删除字符Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除。importFoundationvara=Nsstringprintvarb:CharacterSet=NSCharacterSet.whitespacesAndNewlinesasCharacterSetprint//去除空格和回车运行结果如下:删除前:Hello删除后:HelloSwift3.0语言教程处理字符编码

  6. 在Android上玩HLS(比较替代方案)

    您在Android上玩HLS的经历是什么?谢谢..解决方法Uplynk.com有一个,但你必须使用他们的流媒体服务.我成功地在少数姜饼设备上试了一下.我的一个较旧的姜饼模型在切换分辨率时会出现黑框,但它在大多数情况下都有效.

  7. 如何在Android上玩m3u8?

    )最后得出答案:基本上在Androidv2.3&v3.0,使用非标准的httplive://方案,在3.1中使用http://但是在一些代码中解决了如何调用媒体框架中的相关方法.

  8. 如何在Android中下载m3u8格式的媒体文件

    我需要解析m3u8媒体文件,这是一个播放列表,并下载实际的媒体内容.据我了解,以下是涉及的过程:>解析m3u8文件并获取’.TS’块>检索完所有块后,将其合并为单个文件>将合并的TS文件转换为mp4格式.不幸的是,我找不到任何lib/模块来执行上述步骤.任何人都可以提供更好的方法或工作样本来处理和下载m3u8文件吗?

  9. Vue项目打包并部署nginx服务器的详细步骤

    vue项目开发好之后需要部署到服务器上进行外网访问,下面这篇文章主要给大家介绍了关于Vue项目打包并部署nginx服务器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  10. ubuntu中利用nginx部署vue项目的完整步骤

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行,下面这篇文章主要给大家介绍了关于ubuntu中利用nginx部署vue项目的相关资料,需要的朋友可以参考下

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部