最近公司要整理一套视频点播和直播的方案,本身对这块不是很熟悉,翻阅了大量的资料,最终算是了解一下,特记录下,第一套方案,当然是最简单的nginx+http的方案,这个方案支持android和pc以及苹果端,是比较普遍的做法,下面详细记录下在Ubuntu下安装的整个过程,过程参考另一篇博客而来,只是整理下最新的各组件包。

step1准备ubuntu的环境:

sudo apt-get update

step2 安装必要的一些libs:

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

sudo apt-get install gcc make automake bzip2 unzip patch subversion libjpeg62-dev

我使用的是root用户
cd ~
mkdir nginx
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make && make install cd ~/nginx

step3 卸载系统原有的ffmgeg和x.264,没有则跳过:

apt-get remove ffmpeg x264
step4 先安装一些Mplayer编码库(仅限于64位系统):
wget -c http://www2.mplayerhq.hu/MPlayer/releases/codecs/essential-amd64-20071007.tar.bz2

tar xvjf essential-amd64-20071007.tar.bz2
mkdir /usr/local/lib/codecs
cp -Rvp essential-amd64-20071007/* /usr/local/lib/codecs/
编辑下面文件
vim /etc/ld.so.conf 添加以下两行到上面的文件里 /usr/lib /usr/local/lib

step5 再安装一些格式转换常用的编码库:

sudo apt-get install amrnb opencore-amr amrwb libvorbis libtheora xvidcore
sudo apt-get install build-essential git-core checkinstall texi2html libfaac-dev \
libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev \
libvorbis-dev libx11-dev libxfixes-dev zlib1g-dev libxvidcore-dev

setp6 安装x.264:

wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/last_stable_x264.tar.bz2

tar xvjf last_stable_x264.tar.bz2
cd x264-snapshot-20150908-2245-stable/
./configure –enable-shared –enable-pic make && make install cd ~/nginx

setp7 安装libvpx:

wget http://webm.googlecode.com/files/libvpx-v1.4.0.tar.bz2

tar xvjf libvpx-v1.4.0.tar.bz2
cd libvpx-v1.4.0
./configure –enable-shared –enable-pic make && make install cd ~/nginx

step8 安装FFmpeg

wget http://ffmpeg.org/releases/ffmpeg-2.7.2.tar.bz2

tar xvjf ffmpeg-2.7.2.tar.bz2
cd ffmpeg-2.7.2./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 make && make install cd ~/nginx 让动态链接库被系统共享 ldconfig

step9 安装mplayer and mencoder

apt-get install libmp3lame-dev
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer (使用最新的代码可以编译安装,否则使用http://www.mplayerhq.hu/MPlayer/releases/mplayer-checkout-snapshot.tar.bz2 的话出错,) cd mplayer/ ./configure make && make install

step 10 安装flvtool2:

sudo apt-get install ruby (如果执行很慢,请执行下面的切换为淘宝服务器地址)
gem -v
gem souce -l
https://rubygems.org/
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/ gem sources -l 因为网络的原因,切换为淘宝的服务器,切换后在执行一次 sudo apt-get install ruby 即可 ll /usr/local/bin/flvtool2

step11 查看一下已经安装好的音频和视频编码器

查看所有所支持的音频编码

 mencoder -oac help

查看所有所支持的视频编码
mencoder -ovc help

具体结果可参考

setp12 安装配置Nginx:

先安装各种依赖(nginx需要pcre支持,yamdi用来为flv创建关键帧才能随意拖动)

sudo apt-get install gcc g++ libssl-dev zlib1g-dev libpcre3-dev yamdi

下载所需的nginx模块

第一个是nginx_mod_h264_streaming,让nginx支持flv/mp4流播放

wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
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协议

wget -O nginx-rtmp-module.zip  https://github.com/arut/nginx-rtmp-module/archive/master.zip unzip nginx-rtmp-module.zip

下载清缓存的模块

wget -O ngx_cache_purge.zip https://github.com/FRiCKLE/ngx_cache_purge/archive/master.zip
unzip ngx_cache_purge.zip

下载安装nginx:

wget http://nginx.org/download/nginx-1.9.4.tar.gz
tar zxvf nginx-1.9.4.tar.gz
cd nginx-1.9.4./configure --user=daemon --group=daemon --prefix=/usr/local/nginx/ --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

编译过程中出错:
make[1]: *** [objs/addon/src/mp4_reader.o] 错误 1

解决方法:
vim objs/Makefile (修改objs/Makefile文件, 去掉其中的"-Werror"),先make clean后再重新执行安装过程,然后就能够正常编译了.

step13 设置nginx为系统服务

sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo update-rc.d nginx defaults
sudo service nginx start
sudo service nginx stop

然后用浏览器你的服务器IP,看到welcome就对了
或者到nginx的sbin目录下,运行一下nginx -V,看看列表出来的modules对不对

step14 各种配置nginx:
编辑/usr/local/nginx/conf/nginx.conf文件,最好用sftp软件(如windows下的flashfxp/Mac下的tramnsmit)下载过来本地编辑。

我是直接

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

step14 把自己的电影转换成mp4和flv格式来测试nginx搭的环境:

准备两部电影,硬盘上随便找,我找了“谍影重重A.mp4”和“鹿鼎记033.rmvb”,尽量找小一点十来分钟的,等下我们还要看完测试一下转换的结果有没有音影不同步的情况。我把两部电影重命名为 movie1.mp4和 movie2.rmvb,并上传到服务器/mnt/media/video下面,这里目录用来存放我们的原始视频。还有一个目录是/mnt/media/vod 用来存放转换后的视频。我这里的具体目录结构为:/mnt/media/video -> 存放原始视频 /mnt/media/app -> 存放转成m3u8的视频,供http访问(HLS) /mnt/media/vod -> 存放转换后的flv和mp4视频,供http或rtmp访问

用ffmpeg转换mp4文件(ffmpeg不支持rmvb,用mencoder转换rmvb文件)

cd /mnt/media/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没有声音
mv movie1.flv movie1-src.flv yamdi -i movie1-src.flv -o movie1.flv rm -rf movie1-src.flv

step15 安装flv web播放器或者安装本地流媒体播放器播放视频(VLC等):

ckplayer播放器安装简单。就拿这个做实例吧。

cd /mnt
mkidr wwwroot

下载 ckplayer6.7
解压,将所以文件上传到wwwroot下面

step16 制作页面播放流媒体:
cd /mnt/wwwroot
touch a.html
vi a.html
输入以下内容(记得补充html标签,可以参考ckplayer下的demo.htm):

<div id="a1"></div> <script type="text/javascript" src="/ckplayer/ckplayer.js" charset="utf-8"></script> <script type="text/javascript">var flashvars={ f:'http://你自己的ip地址/movie1.flv', c:0 }; var params={bgcolor:'#FFF',allowFullScreen:true,allowScriptAccess:'always',wmode:'transparent'}; var video=['http://你自己的ip地址/movie1.mp4->video/mp4']; CKobject.embed('/ckplayer/ckplayer.swf','a1','ckplayer_a1','100%','100%',true,flashvars,video,params); </script>

具体配置的含义,可以参考再见配置工作,这里(可以根据自己的需要参考配置支持html5、seek等等)

step 17 把flv转换成hls的m3u8:

下载安装segmenter

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

  git clone https://github.com/johnf/m3u8-segmenter.git (我现在实在太慢,直接通过浏览器下载https://github.com/johnf/m3u8-segmenter)

  cd m3u8-segmenter/

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

  cp segmenter /usr/bin/

转换成ts,片源大小及清晰度等取决于flv文件,所以转成flv的时候一定要统一起来

  cd /mnt/media/vod

  mkdir /mnt/media/app/movie1/

  ffmpeg -y -i movie1.flv -f mpegts -c:v copy -c:a copy -vbsf h264_mp4toannexb /mnt/media/app/movie1/main.ts

切片

  cd /mnt/media/app/movie1/

  segmenter -i main.ts -d 10 -p movie1 -m movie1.m3u8 -u http://自己的ip/hls/movie1/

-d 10:每个切片为10秒,-p movie1:切片的名字的前缀
-u URL地址:m3u8中播放列表的地址前缀,自己cat一下生成的movie1.m3u8就知道什么用 了

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

转载于:https://www.cnblogs.com/wvijay2015/p/4797870.html

Ubuntu下安装nginx支持rtmp和http流媒体方案相关推荐

  1. Ubuntu下安装Nginx,PHP5(及PHP-FPM),MySQL

     Ubuntu下安装Nginx,PHP5(及PHP-FPM),MySQL 2012-09-15 11:12:31 标签:php mysql ubuntu nginx php-fpm 原创作品,允许转载 ...

  2. Ubuntu下安装Nginx服务器并进行优化

    一.Nginx介绍   Nginx是由俄罗斯人开发的一款高性能的Web和反向代理服务器,它也可以作为电子邮件的反向代理服务器.其以稳定.并发能力强.占用资源少等显著特点备受广大互联网公司青睐. Ngi ...

  3. ubuntu下安装nginx时依赖库zlib,pcre,openssl安装方法

    首先使用dpkg命令查看自己需要的软件是否安装. 例如查看zlib是否安装: dpkg -l | grep zlib 解决依赖包openssl安装,命令: sudo apt-get install o ...

  4. ubuntu 下安装nginx

    y@y:~$ sudo apt-get install nginx y@y:~$ sudo service nginx start y@y:~$ nginx默认使用80端口,打开浏览器输入:http: ...

  5. 检查linux中nginx是否已安装成功,linux服务下安装nginx 系统版本Ubuntu 18.04.4

    linux服务下安装nginx  系统版本Ubuntu 18.04.4 一.下载nginx包(已存入我的百度网盘) 链接:https://pan.baidu.com/s/19e4FbscqZXNrPP ...

  6. 【Linux】在Ubuntu下部署nginx——nginx的安装与卸载

    介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...

  7. Ubuntu下安装Sublime Text3 汉化以及支持中文输入(2019.7.22更新)

    我个人其实不太适应Ubuntu自带的vi编辑器,相比之下我比较喜欢有多功能的Sublime. 本文是我在Ubuntu下安装sublime以及汉化的过程: 由于我的版本是Ubuntu,所以就按照官网上的 ...

  8. ubuntu nginx安装php mysql,ubuntu下配置nginx+php+mysql详解

    1.更新 复制代码 代码如下: sudo apt-get update 2.安装nginx 复制代码 代码如下: sudo apt-get intsall nginx Ubuntu安装之后的文件结构大 ...

  9. Nginx:Ubuntu下安装及启动服务

    Ubuntu22.04下安装nginx只需通过命令: sudo apt install nginx 安装好后,可以通过如下命令进行检查: nginx -v 启动nginx服务: sudo system ...

  10. 在Ubuntu系统使用Nginx搭建RTMP服务器

    在Ubuntu系统使用Nginx搭建RTMP服务器 参考链接:nginx搭建rtmp服务器 简介 本文简单记录了在Ubuntu18.04系统上使用nginx搭建RTMP服务器的方法. 安装 下载ngi ...

最新文章

  1. JS 实现MVC的写法
  2. RabbitMQ之RPC实现
  3. python3 lambda表达式
  4. 云服务器系统盘升级会不会丢失数据,云服务器 系统盘快还是数据盘快
  5. Spark Structure Streaming(一)之简介
  6. python权重相似度矩阵_gensim之使用稀疏矩阵相似度,判断输入的文字意图
  7. 用matlab化简三角函数方程组,matlab化简三角函数 matlab怎么样化简三角函数?
  8. logistic回归 如何_Logistic回归分析之二元Logistic回归
  9. 普渡大学计算机科学系可以转到计算机工程吗,2019美国普渡大学计算机专业研究生申请条件...
  10. 干货 | 4步带你完成私有云盘搭建
  11. Embedded Studio 使用笔记
  12. Windows自带性能监控工具Perfmon使用介绍
  13. drop,delete与truncate的区别
  14. distribute by 和 partitioned by 区别
  15. WIN 7和WIN 10添加和删除静态路由
  16. k-最近邻聚类k-Nearest Neighbor
  17. oeasy 教您玩转 linux 010400 总结 summary
  18. 数据结构9 - 常用的10种算法
  19. 信息检索——BM25算法实现(自己写)
  20. can not access a member of class xxx with modifiers “private“

热门文章

  1. 利用泛型与反射更新实体(ADO.NET Entity Framework)
  2. Qt5学习笔记之图标下载和转换
  3. Django 系列博客(二)
  4. cropper.js插件做图片上传裁剪图片大小
  5. day39-Spring 02-AOP的概述
  6. spark sql cache
  7. Hdu 1794 【二维成段更新】.cpp
  8. Mybatis-plus的两种分页插件的配置方式
  9. P2799国王的魔镜
  10. 51-nod(1443)(最短路)