服务环境流媒体资料整理阅书常乐音视频

HTTP-FLV视频方案的实践.

FavoriteLoadingAdd to favorites
引言:前篇介绍的dss的视频方案有很多局限性,流处理支持和播放器的选择都将面临些许困难。本文将介绍HTTP-FLV的方案,基于nginx的流处理模块,以及通过FFMPEG进行流处理,最终使用yamdi实现真正的视频拖拉播放。
 
以下将从基础安装开始,重点在于安装以及视频的处理,当然测试环节不可或缺。
 
一、准备
 
1. 环境准备
(1) CentOS 6.5 64位
(2) Xshell
 
2. 基础工具准备
 
首先安装核心中间件所需的相关工具,也可以在安装具体的工具时,再安装,本文为讲述方便先安装完成,不会为解决依赖而间断再间断。
 
(1)安装基础工具包,已经存在的会自动忽略或升级
yum install gcc make automake bzip2 unzip patch subversion libjpeg-devel pkgconfig
yum install autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig zlib-devel
(2)安装yasm
安装ffmpeg的时候会用到,预备。
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar zxvf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure
make && make install
(3)安装git
yum install git
方便后面可以通过git获取源码。
 
注:若有些工具找不到安装文件,可以检查并添加RPM下载源,有RPMforge的CentOS6源和epel源。
 
二、 安装FFMPEG
 
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。(摘自网络)
 
以下为安装步骤:
 
1. 卸载系统原有的ffmgeg和x.264,没有则跳过
yum remove ffmpeg x264
2. 再安装一些格式转换常用的编码库
yum install faac-devel  lame-devel amrnb-devel opencore-amr-devel amrwb-devel  libvorbis-devel libtheora-devel xvidcore-devel
3. 安装x.264
x264是一种免费的、具有更优秀算法的H.264/MPEG-4 AVC视频压缩编码格式。
具体版本请至官网查看,官网地址:http://www.videolan.org/developers/x264.html。
可以直接官网获取:
wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/last_stable_x264.tar.bz2 (一般下载的是最新的版本)
tar xvjf last_stable_x264.tar.bz2
cd x264-snapshot-20160518-2245-stable/     (这可能日期有区别,自己ls一下)
./configure –enable-shared –enable-pic
make
make install
或者使用git获取:
git clone http://git.videolan.org/git/x264.git
4. 安装libvpx
   
提供现在大多数html5视频中使用的VP8 Codec和下一代VP9 Codec的参考实现。
具体版本请至官网查看,官网地址:http://www.linuxfromscratch.org/blfs/view/svn/multimedia/libvpx.html
直接官网获取:
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.5.0.tar.bz2
tar xvjf libvpx-1.5.0.tar.bz2 
也可以使用git获取:
git clone https://github.com/webmproject/libvpx.git (速度有点慢)
不需要解压缩操作。
 
安装编译:
cd libvpx-1.5.0
./configure  –enable-shared
make 
make install
5. 安装FFmpeg
    
官网地址:http://ffmpeg.org/
下载:
wget http://ffmpeg.org/releases/ffmpeg-3.0.2.tar.bz2 (具体版本请至官网查看)
tar xvjf ffmpeg-3.0.2.tar.bz2
编译安装:
cd ffmpeg-3.0.2
./configure –prefix=/usr/local/ffmpeg –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-muxer=hls –enable-demuxer=hls
make
make install
安装至/usr/local/ffmpeg下(如果需要支持xvid编码格式后面加上–enable-libxvid,前提要安装好libxvid)
 
 
安装需要花一点时间
ldconfig -v
git获取:
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
 
三、安装mencoder(视情况而定)
 
由于ffmpeg不支持rmvb,所以,如果您使用了rmvb文件,则需要安装mencoder
 
先安装一些Mplayer编码库(仅限于64位系统)
wget -c http://www2.mplayerhq.hu/MPlayer/releases/codecs/essential-amd64-20071007.tar.bz2
上面这一步可能在部分VPS上无法下载,比如阿里云VPS就提示连接失败,但是可以用本机浏览器下载后上传到VPS的/root根目录去,然后继续下面的操作
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
安装:
yum install mplayer mencoder flvtool2
查看一下已经安装好的音频和视频编码器
查看所有所支持的音频编码
mencoder -oac help
查看所有所支持的视频编码
mencoder -ovc help
具体结果可参考
http://www.mplayerhq.hu/DOCS/HTML/zh_CN/menc-feat-selecting-codec.html
 
四、安装Nginx
 
1. 安装依赖
nginx需要pcre支持
yum install gcc gcc-c++ openssl-devel zlib-devel pcre pcre-devel
2. 下载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
3. 下载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;
// }
若不修改,会报错。信息如下:
make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1
4. 下载ngx_cache_purge,用于清缓存的模块
wget -O ngx_cache_purge.zip https://github.com/FRiCKLE/ngx_cache_purge/archive/master.zip
unzip ngx_cache_purge.zip    
5. 安装nginx 
wget http://nginx.org/download/nginx-1.10.0.tar.gz
tar -zxvf nginx-1.10.0.tar.gz
cd nginx-1.10.0
./configure –prefix=/usr/local/nginx –add-module=/source/nginx-rtmp-module-master –add-module=/source/ngx_cache_purge-master –add-module=/source/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
6. 启动检测
/usr/local/nginx/sbin/nginx
然后用浏览器你的服务器IP,看到welcome就对了。
   
五、配置
 
创建目录:
cd /mnt/
mkdir media
cd media/
mkdir video
mkdir vod
在video目录下处理:
cd /mnt/media/video/
ffmpeg -i test.mp4 -y -vcodec libx264 -vf scale=”640:-1″ -r 15 -acodec libfaac ../vod/test.flv
全局命令:
简单命令,视频会变模糊一点:
ffmpeg -y -i /mnt/media/video/test.mp4  -ar 11025 /mnt/media/vod/test.flv 
原视频保真的命令:
ffmpeg -y -i /mnt/media/video/test.mp4 -vcodec libx264 -acodec libfaac -ar 11025 /mnt/media/vod/test.flv
设置分辨率的命令:
压缩格式是libx264
ffmpeg -i /mnt/media/video/test.mp4 -y -vcodec libx264 -vf scale=”640:-1″ -r 15 -acodec libfaac /mnt/media/vod/test.flv
压缩格式是xvid
ffmpeg -y -i /mnt/media/video/test.mp4 -vcodec xvid -s 368×208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 /mnt/media/vod/test.flv
 
六、支持拖动播放
 
以上转码后的视频,点播时,视频播放只能从头开始,不能友好的随意播放,以下即解决此问题。
安装yamdi,添加关键帧用来支持拖动播放, yamdi用来为flv创建关键帧才能随意拖动
yum install yamdi
处理以上转码的视频:
 
mv /mnt/media/vod/test1.flv /mnt/media/vod/test1-temp.flv
yamdi -i /mnt/media/vod/test1-temp.flv -o /mnt/media/vod/test1.flv
rm -rf /mnt/media/vod/test1-temp.flv
 
七、测试
 
接下来测试的话,下载VLC Player到本地测试(VLC有时候会花屏,用JWPlayer就好了),或者不行麻烦的话装一个apache服务器并下载JWPlayer来测试。
HTTP形式访问:
http://IP/test.flv
RTMP形式访问:
rtmp://IP/vod/test.flv
 
八、问题汇总
 
问题①:
ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory
解决:
 
查找了很多文章,多数是说在/etc/ld.so.conf加入ffmpeg/lib
或者加入自己编译ffmpeg的路径/lib
vi /etc/ld.so.conf
/usr/lib64
执行ldconfig 
问题②:
如果在执行ffmpeg过程中报如下类似的错误
/usr/local/ffmpeg/bin/ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory
为源码执行文件创建链接(64位系统,默认工具包路径问题)
 
请将工具链接至系统路径中,具体的工具包其实在ffmpeg安装目录下,在进行如下操作:
ln -s /usr/local/ffmpeg/lib/libavdevice.so.57.0.101 /usr/lib64/libavdevice.so.57
 
注:类似的报错信息,处理方式相同。
 
 
 
如有问题,欢迎指出;如需转载,请标明出处,谢谢!
 
每篇名人名言
过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天。—— 巴尔扎克
 
 
参考资料