七牛云存储的流媒体服务,我申请了个测试帐号,在内容管理上传你的视频文件,生成外链。
到自己博客里把外链添加到文章里。貌似不能播放。应该是视频格式或者编码问题,问过他们技术,需要转码。但是MPS服务还要认证。然后自己在本地搭建个流媒体服务器。
流媒体播放方式:
HTTP方式
这种方式要下载FLV视频文件到本地播放,一旦FLV视频文件下载完成,就不会消耗服务器的资源和带宽,但是拖动功能没有RTMP/RTMP流媒体方式强大,很多视频网站都是用HTTP方式实现的,如:YouTube,土豆,酷6等
RTMP/RTMP流媒体方式
这种方式不用下载FLV视频文件到本地,可以实时的播放flv文件,可以任意拖拽播放进度条,但是比较消耗服务器的资源。
系统:centos6.5
软件:nginx-1.8
1.由于安装时很多依赖包,需要添加源
[root@VM-242 src]# cd /usr/local/src [root@VM-242 src]# wget -c http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm [root@VM-242 src]# rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt [root@VM-242 src]# rpm -i rpmforge-release-0.5.3-1.el6.rf.*.rpm
2.安装转码工具Mencoder和ffmpeg
2.1 安装依赖库
[root@VM-242 src]# yum install gcc make automake bzip2 unzip patch subversion libjpeg-devel
2.2 安装yasm
[root@VM-242 src]# wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz [root@VM-242 src]# tar zxvf yasm-1.2.0.tar.gz [root@VM-242 src]# cd yasm-1.2.0 [root@VM-242 yasm-1.2.0]# ./configure [root@VM-242 yasm-1.2.0]# make && make install [root@VM-242 yasm-1.2.0]# cd ..
2.3 卸载系统原有的ffmpeg和x264
[root@VM-242 src]# yum remove ffmpeg x264
2.4 安装Mplayer编码库
[root@VM-242 src]# wget -c http://www2.mplayerhq.hu/MPlayer/releases/codecs/essential-amd64-20071007.tar.bz2 [root@VM-242 src]# tar xf essential-amd64-20071007.tar.bz2 [root@VM-242 src]# mkdir /usr/local/lib/codecs [root@VM-242 src]# cp -Rvp essential-amd64-20071007/* /usr/local/bin/codecs/ [root@VM-242 src]# vim /etc/ld.so.conf /usr/lib /usr/local/lib
2.5 加载动态库
[root@VM-242 src]# ldconfig
2.6 安装一些格式转换常用的编码库
[root@VM-242 src]# yum install faac-devel lame-devel amrnb-devel opencore-amr-devel amrwb-devel libvorbis-devel libtheora-devel xvidcore-devel
2.7 安装x.264
[root@VM-242 src]# wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/last_stable_x264.tar.bz2 [root@VM-242 src]# tar xvjf last_stable_x264.tar.bz2 [root@VM-242 src]# cd x264-snapshot-20150920-2245-stable/ [root@VM-242 x264-snapshot-20150920-2245-stable]# ./configure –enable-shared –enable-pic [root@VM-242 x264-snapshot-20150920-2245-stable]# make && make install [root@VM-242 x264-snapshot-20150920-2245-stable]# cd ..
2.8 安装libvpx
[root@VM-242 src]# wget http://webm.googlecode.com/files/libvpx-v1.2.0.tar.bz2 [root@VM-242 src]# tar xf libvpx-v1.2.0.tar.bz2 [root@VM-242 src]# cd libvpx-v1.2.0 [root@VM-242 libvpx-v1.2.0]# ./configure --enable-shared --enable-pic [root@VM-242 libvpx-v1.2.0]# make && make install [root@VM-242 libvpx-v1.2.0]# cd ..
2.9 安装ffmpeg
[root@VM-242 src]# wget http://ffmpeg.org/releases/ffmpeg-2.0.1.tar.bz2 [root@VM-242 src]# tar xf ffmpeg-2.0.1.tar.bz2 [root@VM-242 src]# cd ffmpeg-2.0.1 [root@VM-242 ffmpeg-2.0.1]# ./configure --enable-gpl --enable-version3 --enable-shared --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libop --encore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid [root@VM-242 ffmpeg-2.0.1]# make && make install [root@VM-242 ffmpeg-2.0.1]# cd ..
2.10 安装mencoder
[root@VM-242 src]# yum install mplayer mencoder flvtool2
2.11 查看已经安装好的视频和视频编码器
查看支持的音频编码 [root@VM-242 src]# mencoder -oac help 查看支持的视频编码 [root@VM-242 src]# mencoder -ovc help 可参考:http://www.mplayerhq.hu/DOCS/HTML/zh_CN/menc-feat-selecting-codec.html
3.安装nginx
3.1首先安装依赖库pcre
[root@VM-242 src]# wget http://sourceforge.net/projects/pcre/files/pcre/8.37/pcre-8.37.tar.gz [root@VM-242 src]# tar xf pcre-8.37.tar.gz
3.2 安装yamdi用来为flv创建关键帧才能随意拖动
[root@VM-242 src]# yum install gcc gcc-c++ openssl-devel zlib-devel yamdi
3.3 下载所需的nginx模块
3.3.1 第一个是nginx_mod_h264_streaming,让nginx支持flv/mp4流播放
[root@VM-242 src]# wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz [root@VM-242 src]# tar xf 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; // }
3.3.2 第二个是nginx-rtmp-module,让nginx支持rtmp/hls协议
[root@VM-242 src]# wget -O nginx-rtmp-module.zip https://github.com/arut/nginx-rtmp-module/archive/master.zip [root@VM-242 src]# unzip nginx-rtmp-module.zip
3.3.3 下载清缓存的模块
[root@VM-242 src]# wget -O ngx_cache_purge.zip https://github.com/FRiCKLE/ngx_cache_purge/archive/master.zip [root@VM-242 src]# unzip ngx_cache_purge.zip
3.4 下载nginx
[root@VM-242 src]# wget http://nginx.org/download/nginx-1.8.0.tar.gz [root@VM-242 src]# tar xf nginx-1.8.0.tar.gz [root@VM-242 src]# cd nginx-1.8.0 [root@VM-242 nginx-1.8.0]# ./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 --with-pcre=../pcre-8.37 [root@VM-242 nginx-1.8.0]# make && make install [root@VM-242 nginx-1.8.0]# cd ..
3.5 运行nginx
[root@VM-242 src]# /urs/local/nginx/sbin/nginx
3.6 nginx添加到环境变量
[root@VM-242 src]# vim /root/.bash_profile PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin [root@VM-242 src]# source /root/.bash_profile
3.7 编辑配置文件
[root@VM-242 src]# egrep -v '^$|^#|#' /usr/local/nginx/conf/nginx.conf user daemon daemon; worker_processes 1; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4000; application vod { play /mnt/media/vod; } 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; limit_conn_zone $binary_remote_addr zone=addr:10m; server { listen 8080; server_name localhost; location / { root /mnt/soft/nginx-rtmp-module-master/test/rtmp-publisher; } 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; } } 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/vod; mp4; limit_conn addr 20; limit_rate 200k; } location /hls { alias /mnt/media/app; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 重新加载配置文件 [root@VM-242 src]# nginx -t [root@VM-242 src]# nginx -s reload
3.8 测试
####
上传个mp4文件到/mnt/media/vod
打开浏览器播放

/mnt/media/video -> 存放原始视频
/mnt/media/app -> 存放转成m3u8的视频,供http访问(HLS)
/mnt/media/vod -> 存放转换后的flv和mp4视频,供http或rtmp访问
3.9 网上下载了个avi格式的视频,需要转换成mp4格式才能播放
使用ffmpeg工具来转换
[root@VM-242 src]# cd /mnt/media/video
[root@VM-242 video]# ffmpeg -i test.avi -f mp4 -acodec libfaac -vcodec libx264 -b 512k -ab 320k ../vod/test1.mp4
ffmpeg version 2.0.1 Copyright (c) 2000-2013 the FFmpeg developers
built on Sep 21 2015 14:01:20 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-16)
configuration: –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
libavutil 52. 38.100 / 52. 38.100
libavcodec 55. 18.102 / 55. 18.102
libavformat 55. 12.100 / 55. 12.100
libavdevice 55. 3.100 / 55. 3.100
libavfilter 3. 79.101 / 3. 79.101
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
Input #0, avi, from ‘test.avi’:
Metadata:
encoder : MEncoder SVN-r33883(20110719-gcc4.5.2)
Duration: 00:03:49.54, start: 0.000000, bitrate: 1676 kb/s
Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 24 tbr, 24 tbn, 24 tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 224 kb/s
Please use -b:a or -b:v, -b is ambiguous
[libx264 @ 0xb6bf00] using SAR=1/1
[libx264 @ 0xb6bf00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0xb6bf00] profile High, level 3.0
[libx264 @ 0xb6bf00] 264 - core 146 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=512 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to ‘../vod/test1.mp4’:
Metadata:
encoder : Lavf55.12.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1–1, 512 kb/s, 12288 tbn, 24 tbc
Stream #0:1: Audio: aac (libfaac) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 320 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 -> libx264)
Stream #0:1 -> #0:1 (mp3 -> libfaac)
Press [q] to stop, [?] for help
frame= 5510 fps= 67 q=-1.0 Lsize= 18091kB time=00:03:49.59 bitrate= 645.5kbits/s dup=1 drop=0
video:13693kB audio:4226kB subtitle:0 global headers:0kB muxing overhead 0.963257%
[libx264 @ 0xb6bf00] frame I:30 Avg QP:20.08 size: 23465
[libx264 @ 0xb6bf00] frame P:2541 Avg QP:24.65 size: 4498
[libx264 @ 0xb6bf00] frame B:2939 Avg QP:31.54 size: 642
[libx264 @ 0xb6bf00] consecutive B-frames: 10.5% 45.3% 29.5% 14.7%
[libx264 @ 0xb6bf00] mb I I16..4: 16.0% 60.6% 23.4%
[libx264 @ 0xb6bf00] mb P I16..4: 1.3% 5.0% 0.9% P16..4: 31.9% 12.6% 7.8% 0.0% 0.0% skip:40.5%
[libx264 @ 0xb6bf00] mb B I16..4: 0.1% 0.3% 0.0% B16..8: 25.7% 2.2% 0.5% direct: 1.0% skip:70.2% L0:34.1% L1:54.8% BI:11.2%
[libx264 @ 0xb6bf00] final ratefactor: 23.57
[libx264 @ 0xb6bf00] 8x8 transform intra:68.0% inter:67.4%
[libx264 @ 0xb6bf00] coded y,uvDC,uvAC intra: 55.4% 42.0% 7.5% inter: 10.8% 5.6% 0.3%
[libx264 @ 0xb6bf00] i16 v,h,dc,p: 25% 44% 10% 21%
[libx264 @ 0xb6bf00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 26% 24% 3% 4% 5% 3% 4% 5%
[libx264 @ 0xb6bf00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 27% 12% 5% 7% 8% 6% 6% 5%
[libx264 @ 0xb6bf00] i8c dc,h,v,p: 54% 24% 19% 3%
[libx264 @ 0xb6bf00] Weighted P-Frames: Y:4.3% UV:1.7%
[libx264 @ 0xb6bf00] ref P L0: 66.0% 16.3% 13.5% 4.1% 0.0%
[libx264 @ 0xb6bf00] ref B L0: 86.7% 12.4% 0.9%
[libx264 @ 0xb6bf00] ref B L1: 95.3% 4.7%
[libx264 @ 0xb6bf00] kb/s:488.57
参数详解
-i 指定输入文件
-f 输出格式
-acodec 指定声音编码器
-vcodec 指定视频编码器
-b 指定视频流量
-ab 指定声音流量
FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异,使用前建议先参考参数及编解码器的叙述。此外,参数明细可用 ffmpeg -h 显示;编解码器名称等明细可用 ffmpeg -formats 显示。
下列为较常使用的参数。
主要参数
-i 设定输入档名。
-f 设定输出格式。
-y 若输出档案已存在时则覆盖档案。
-fs 超过指定的档案大小时则结束转换。
-ss 从指定时间开始转换。
-title 设定标题。
-timestamp 设定时间戳。
-vsync 增减Frame使影音同步。
影像参数
-b 设定影像流量,默认为200Kbit/秒。( 单位请参照下方注意事项 )
-r 设定FrameRate值,默认为25。
-s 设定画面的宽与高。
-aspect 设定画面的比例。
-vn 不处理影像,于仅针对声音做处理时使用。
-r 设定FrameRate值,默认为25。
-s 设定画面的宽与高。
-aspect 设定画面的比例。
-vn 不处理影像,于仅针对声音做处理时使用。
-vcodec 设定影像影像编解码器,未设定时则使用与输入档案相同之编解码器。
声音参数
-ab 设定每Channel (最近的SVN 版为所有Channel的总合)的流量。( 单位 请参照下方注意事项 )
-ar 设定采样率。
-ac 设定声音的Channel数。
-acodec 设定声音编解码器,未设定时与影像相同,使用与输入档案相同之编解码器。
-an 不处理声音,于仅针对影像做处理时使用。
-vol 设定音量大小,256为标准音量。(要设定成两倍音量时则输入512,依此类推。)
注意事项
以-b及ab参数设定流量时,根据使用的ffmpeg版本,须注意单位会有kbits/sec与bits/sec的不同。(可用ffmpeg -h显示说明来确认单位。)
例如,单位为bits/sec的情况时,欲指定流量64kbps时需输入‘ -ab 64k ’;单位为kbits/sec的情况时则需输入‘ -ab 64 ’。
以-acodec及-vcodec所指定的编解码器名称,会根据使用的ffmpeg版本而有所不同。例如使用AAC编解码器时,会有输入aac 与 libfaac的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats 确 认输入的编解码器是否能运作。
转换后视频播放
