共计 14787 个字符,预计需要花费 37 分钟才能阅读完成。
目标用于搭建内网流媒体服务器支持视频的点播。
背景
用于支持培训网站中视频点拨功能,在培训网站总体方案中需要加入流媒体服务器,用于存储和传输视频资源。
相关概念
- 流媒体
流媒体(Streaming Media)是一种新兴的网络传输技术,在互联网上实时顺序地传输和播放视 / 音频等多媒体内容的连续时基数据流。
流媒体技术包括流媒体数据采集、视 / 音频编解码、存储、传输、播放等领域。
-
流媒体系统组成
包括编码工具、流媒体数据、服务器、网络和播放器。 -
流媒体传输过程
如下图所示:
- 传输协议
RSVP: 资源预留协议
RTP: 实时传输协议
RTCP: 实时传输控制协议
MMS: 微软流媒体服务协议
RTSP: 实时流协议
RTMP: 实时消息传输协议
MIME: 多目因特网电子邮件扩展协议
解决方案
商业方案
-
Real Network 的 Real System
服务端软件:Helix Server 平台:Windows or Linux 文件格式:RealAudio, Realvideo, RealFlash -
微软的 Windows Media Services
服务端软件:Windows Media Server 平台:Windows 文件格式:ASF, WMV -
苹果公司的 Quick Time 系列
服务端软件:QuickTime Streaming Server (开源版本为 Darwin Streaming Server) 平台:MacOS X, Linux, Windows 文件格式:MOV, MP4
在这三家公司的流媒体产品中,RealNetworks 公司的免费服务端 Helix Server Basic 最大提供个流的并发, 仅支持其专有编码 RealAudio 和 RealVideo,基本上只能算是体验性的产品;微软公司的流媒体服务端 Windows Media Server 附带于其服务器产品 Windows Server 中, 但只有最高版本的 Windows Server Enterprice 才具有完整的包括组播在内的所有流媒体服务器功能;苹果公司的 Darwin Streaming Server(简称 DSS)完全免费, 没有任何功能限制, 且符合国际标准。
开源 / 免费解决方案
-
ffmpeg
全平台视频转换 开源 -
RED5
Red5 是一个采用 Java 开发开源的 Flash 流媒体服务器。它支持:把音频(MP3)和视频(FLV)转换成播放流;录制客户端播放流(只支持 FLV);共享对象;现场直播流发布;远程调用。Red5 使用 RSTP 作为流媒体传输协议,在其自带的一些示例中演示了在线录制,flash 流媒体播放,在线聊天,视频会议等一些基本功能。开源地址:[](https://github.com/Red5/red5-server)
-
Darwin Streaming Server
为苹果公司视频流解决方案的开源版本。
-
easyDarwin
国内基于 Darwin Streaming Server 二次开发的流媒体服务器,有中文支持网站。
安装配置
RED5
使用 HTTP 协议播放
- 首先从 github 下载已编译版本,因为在 Linux 上安装使用,直接下载 red5-server-1.0.7-RELEASE.tar.gz 文件即可。
- Java 程序,在服务器上安装 jre1.7 版本后即可解压运行。测试阶段可以使用
./red5-debug.sh
启动 red5 服务器。在浏览器上输入 http://[serverip]:5080/ 可以看到 red5 控制主页。 - 在 red5 安装目录下的 webapp/vod 目录下的视频文件可以在本地 VLC 播放器上连接 http://[serverip]:5080/[filename]进行播放。
Darwin Streaming Server
功能同 easyDarwin,在 Linux 上安装比较繁琐,所以暂时只试用 easyDarwin。
easyDarwin
使用 RTSP 协议播放
- 首先从 github 下载源码或者已编译版本,因为上面有 CentOS 的已编译版本,直接下载解压即可使用。
- 使用 root 账户启动执行程序,首次启动迁移开启调试模式,
./easydarwin -c ./easydarwin.xml -d
。 - 启动后,可以在执行的从终端看到调试信息。同时使用 http://[serverip]:8088 可以登录,默认使用 admin/admin 登录。
- 在 Movies 目录下放置一些视频文件,就可以在客户端使用播放器进行播放,我测试使用的是 VLC。
Nginx + HLS
HLSHTTP Live Streaming 苹果公司开放的支持 html5 直接播放的视频流技术。
Nginx 实现 http 服务器功能,可以通过 http 访问 m3u8 文件实现播放。
要使用 HLS 播放的第一步,是将视频文件切割成多个 ts 视频流,然后使用 m3u8 索引文件进行播放。生成 m3u8 和 ts 文件可以借助 ffmpeg 工具,使用如下命令就可以将一般的视频文件转换成 HLS 支持的文件。
ffmpeg -i "G:\video\7 magic leap2.avi" -f hls "G:\video\HLR\test.m3u8"
对于大文件用上面这种方式有可能出现 m3u8 缺少索引的情况,因此也可以使用以下的方式对文件进行转换。
ffmpeg -i bigfile.mp4 -codec:v libx264 -codec:a aac -map 0 -f ssegment -segment_format mpegts -segment_list tos.m3u8 -segment_time 10 taste_of_shanghai%04d.ts
直接使用 Nginx 访问文件路径
不需要多余的软件,直接将 m3u8 文件所在目录设置为 http server 的根目录。
server {listen 80; | |
server_name localhost; | |
#charset koi8-r; | |
#access_log logs/host.access.log main; | |
location / {# root html; | |
root /var/www/html; | |
index index.html index.htm; | |
} |
即可使用播放器打开远程连接。
Nginx + jwplayer
Nginx 编译时增加 mp4 和 flv 模块,可以让 Nginx 支持 flv 和 mp4 格式。为了后面说明支持 RMTP 协议,同时在增加 RTMP 模块。
- 安装依赖包
yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-devel gettext-devel libtool mhash.x86_64 perl-Digest-SHA1.x86_64
tar xzvf zlib-1.2.8.tar.gz | |
cd zlib-1.2.8 | |
./configure | |
make | |
make install |
tar xzvf pcre-8.37.tar.gz | |
cd pcre-8.37 | |
./configure | |
make | |
make install |
tar xzvf yamdi-1.9.tar.gz | |
cd yamdi-1.9 | |
./cofigure | |
gcc yamdi.c -o yamdi -O2 -Wall |
tar xzvf openssl-1.0.1t.tar.gz | |
cd openssl-1.0.1t | |
./config | |
make depend | |
make install |
- 安装 ffmpeg 以及依赖包
需要安装 yasm, x264, LAME, libogg,libvorbis, libvpx, faad2, faac
# 汇编工具 | |
# 请网络搜索安装包 | |
unzip yasm-1.2.0-1.el6.x86_64.zip | |
rpm -ivh yasm-1.2.0-1.el6.x86_64.rpm |
# h.264 编码 | |
# http videolan.org | |
tar xjvf last_x264.tar.bz2 | |
cd x264-snapshot-20160718-2245 | |
./configure --enable-shared | |
make | |
make install |
# LAME mp3 编码器 | |
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz | |
tar xzvf lame-3.99.5.tar.gz | |
cd lame-3.99.5 | |
./configure --enable-nasm | |
make | |
make install |
# libogg 音频编码器 | |
wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz | |
tar xzvf libogg-1.3.2.tar.gz | |
cd libogg-1.3.2 | |
./configure | |
make | |
make install |
# libvorbis 音频编码器 | |
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz | |
tar xzvf libvorbis-1.3.5.tar.gz | |
cd libvorbis-1.3.5 | |
./configure | |
make | |
make install |
# libvpx VP8 编码解码器 | |
# 网络搜索 | |
tar xjvf libvpx-1.5.0.tar.bz2 | |
cd libvpx-1.5.0 | |
./configure --enable-shared | |
make | |
make install |
# FAAD2 MPEG- 2 和 AAC 格式的编解码器 | |
wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz | |
tar xzvf faad2-2.7.tar.gz | |
cd faad2-2.7 | |
./configure | |
make | |
make install |
# faac AAC 编解码器 | |
wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz | |
tar xzvf faac-1.28.tar.gz | |
cd faac-1.28 | |
./configure | |
make | |
make install |
# xvid 视频编码 | |
wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz | |
tar zxvf xvidcore-1.3.2.tar.gz | |
cd xvidcore/build/generic | |
./configure | |
make | |
make install |
# ffmpeg 转换工具 | |
wget http://ffmpeg.org/releases/ffmpeg-3.1.1.tar.bz2 | |
tar xjvf ffmpeg-3.1.1.tar.bz2 | |
cd ffmpeg-3.1.1 | |
./configure --prefix=/opt/ffmpeg/ \ | |
--enable-version3 \ | |
--enable-libvpx \ | |
--enable-libfaac \ | |
--enable-libmp3lame \ | |
--enable-libvorbis \ | |
--enable-libx264 \ | |
--enable-libxvid \ | |
--enable-shared \ | |
--enable-gpl \ | |
--enable-postproc \ | |
--enable-nonfree \ | |
--enable-avfilter \ | |
--enable-pthreads | |
make | |
# 可以忽略编译过程中的警告信息 | |
make install |
- 修改
/etc/ld.so.conf
inclue ld.so.conf.d/*.conf | |
/lib | |
/lib64 | |
/usr/lib | |
/usr/lib64 | |
/usr/local/lib | |
/usr/local/lib64 | |
/opt/ffmpeg/lib |
执行 ldconfig
使修改生效。
- 编码测试
ffmpeg -i ./a_day_with_htc_vive.avi -f hls ./htcvive.m3u8
- 编译 Nginx
wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz | |
tar xzvf nginx_mod_h264_streaming-2.2.7.tar.gz | |
unzip nginx-rtmp-module-master.zip |
vi nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c | |
# 注释以下内容 | |
/* TODO: Win32 */ | |
if (r->zero_in_uri) | |
{return NGX_DECLINED; | |
} |
groupadd nginx | |
useradd nginx | |
usermod -G nginx nginx |
tar zxf nginx-1.8.0.tar.gz | |
cd nginx-1.8.0 | |
./configure --prefix=/usr/local/nginx \ | |
--add-module=/opt/video/nginx_mod_h264_streaming-2.2.7 \ | |
--with-http_flv_module \ | |
--with-http_ssl_module \ | |
--with-http_mp4_module \ | |
--with-http_gzip_static_module \ | |
--with-http_stub_status_module \ | |
--with-pcre=/opt/video/pcre-8.37 \ | |
--with-zlib=/opt/video/zlib-1.2.8 \ | |
--user=nginx --group=nginx \ | |
--add-module=/opt/video/nginx-rtmp-module-master \ | |
--with-cc-opt=-I/opt/ffmpeg/include \ | |
--with-ld-opt=-L/opt/ffmpeg/lib-R/opt/ffmpeg/lib | |
make | |
make install |
- 配置 nginx.conf 文件
server {listen 80; | |
server_name localhost; | |
location / { | |
root /var/www/html; | |
index index.html index.htm; | |
location ~ \.flv$ | |
{flv;} | |
location ~ \.mp4$ | |
{mp4;} | |
} | |
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { | |
root /var/www/html; | |
break; | |
} |
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142101p2.htm
- 使用 jwplayer 实现 http 播放
在网站上下载一个 jwplayer,解压后上传至 /var/www/html 目录,然后就可以在浏览器直接访问以 h264 编码的 mp4 文件或 flv 文件。
此方法的兼容性较好,在 IE, Chrome, Firefox, Safari 输入地址http://192.168.40.134/player.swf?type=http&file=sample_h264_100kbit.mp4
,视频都可以直接打开。
效果如下图所示:
不过这样的播放方式,要求在地址栏输入一长串的地址,优雅一点的方法是写一个页面放在网站目录下,然后通过访问页面来播放嵌套其中的视频。
如下建立一个 index.html 文件。
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> | |
<title>test of nginx-http</title> | |
</head> | |
<body> | |
<div id="myElement"></div> | |
<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="360"> | |
<param name="movie" value="player.swf"/> | |
<param name="quality" value="high"/> | |
<param name="wmode" value="opaque"/> | |
<param name="swfversion" value="6.0.65.0"/> | |
<EMBED SRC="player.swf" WIDTH="480" HEIGHT="360" QUALITY="high" flashvars="type=http&file=/magicleap2.flv&autostart=true" wmode="opaque"/></object> | |
</body> | |
</html> |
其中 flv 文件如果要支持拖动,需要对文件添加关键帧,方法如下:
yamdi -i magicleap.flv -o magicleap2.flv
然后通过浏览器访问这个地址http://192.168.40.134/index.html
。可以看到视频实现在页面中的播放。
Nginx + RMTP 模块
- 测试 RTMP 直播功能
提示:测试 RTMP 功能可以参考 nginx-rtmp-module 中的 test 目录。
rtmp {server {listen 1935; | |
chunk_size 4000; | |
application vod {play /var/www/vod; | |
} | |
application live {live on; | |
} | |
access_log logs/rtmp_access.log; | |
} | |
} |
在本地的 VLC 打开 rtmp 地址 rtmp://192.168.40.134/live/mystream。
在远程主机上使用 ffmpeg 命令模拟一个视频流推送给 VLC。这种推流的方式实际就是所谓的直播了。
ffmpeg -loglevel verbose -re -i /var/www/html/a_day_with_htc_vive.avi -f flv rtmp://localhost/live/mystream | |
ffmpeg –i/usr/local/nginx/vod/flvs/a.flv-strict -2 -c:v libx264 -c:a aac -f flv rtmp://192.168.10.4/live/test |
一旦远程主机上的转换开始,VLC 开始缓冲几秒后就会开始播放,如下图所示。
- 在 http 模块中配置 RTMP 虚拟机 (server) 实现点播功能
实现方法是用 jwplayer 调用 rtmp 的流实现视频播放。如下 html 实现对视频的嵌入播放。
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |
<title>nginx-rtmp</title> | |
</head> | |
<body> | |
<div id="myElement"></div> | |
<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="360"> | |
<param name="movie" value="player.swf" /> | |
<param name="quality" value="high" /> | |
<param name="wmode" value="opaque" /> | |
<param name="swfversion" value="6.0.65.0" /> <EMBED SRC="player.swf" WIDTH="480" HEIGHT="360" QUALITY="high" flashvars="streamer=rtmp://192.168.40.134:1935/vod&file=magicleap2.flv&autostart=true" wmode="o | |
paque" /> | |
</object> | |
</body> | |
</html> |
播放效果如下:
通过这个 RTMP 流的优势是,可以避免视频文件被浏览器通过 http 方式进行下载。
视频文件存储
所有流服务器存储媒体文件的方式都是将文件放在指定目录下面,且磁盘系统绝大部分 I / O 都是读操作,写操作只会发生在上传和更新媒体文件过程中。对于这种 I / O 操作特性,建议选择 RAID 5 用于中小规模的视频点拨服务。这样可以提供比独立磁盘更高的数据安全性和读取速度,同时将成本控制在较小的范围内。实际可用容量为 (N-1) 个磁盘。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142101.htm
目标用于搭建内网流媒体服务器支持视频的点播。
背景
用于支持培训网站中视频点拨功能,在培训网站总体方案中需要加入流媒体服务器,用于存储和传输视频资源。
相关概念
- 流媒体
流媒体(Streaming Media)是一种新兴的网络传输技术,在互联网上实时顺序地传输和播放视 / 音频等多媒体内容的连续时基数据流。
流媒体技术包括流媒体数据采集、视 / 音频编解码、存储、传输、播放等领域。
-
流媒体系统组成
包括编码工具、流媒体数据、服务器、网络和播放器。 -
流媒体传输过程
如下图所示:
- 传输协议
RSVP: 资源预留协议
RTP: 实时传输协议
RTCP: 实时传输控制协议
MMS: 微软流媒体服务协议
RTSP: 实时流协议
RTMP: 实时消息传输协议
MIME: 多目因特网电子邮件扩展协议
解决方案
商业方案
-
Real Network 的 Real System
服务端软件:Helix Server 平台:Windows or Linux 文件格式:RealAudio, Realvideo, RealFlash -
微软的 Windows Media Services
服务端软件:Windows Media Server 平台:Windows 文件格式:ASF, WMV -
苹果公司的 Quick Time 系列
服务端软件:QuickTime Streaming Server (开源版本为 Darwin Streaming Server) 平台:MacOS X, Linux, Windows 文件格式:MOV, MP4
在这三家公司的流媒体产品中,RealNetworks 公司的免费服务端 Helix Server Basic 最大提供个流的并发, 仅支持其专有编码 RealAudio 和 RealVideo,基本上只能算是体验性的产品;微软公司的流媒体服务端 Windows Media Server 附带于其服务器产品 Windows Server 中, 但只有最高版本的 Windows Server Enterprice 才具有完整的包括组播在内的所有流媒体服务器功能;苹果公司的 Darwin Streaming Server(简称 DSS)完全免费, 没有任何功能限制, 且符合国际标准。
开源 / 免费解决方案
-
ffmpeg
全平台视频转换 开源 -
RED5
Red5 是一个采用 Java 开发开源的 Flash 流媒体服务器。它支持:把音频(MP3)和视频(FLV)转换成播放流;录制客户端播放流(只支持 FLV);共享对象;现场直播流发布;远程调用。Red5 使用 RSTP 作为流媒体传输协议,在其自带的一些示例中演示了在线录制,flash 流媒体播放,在线聊天,视频会议等一些基本功能。开源地址:[](https://github.com/Red5/red5-server)
-
Darwin Streaming Server
为苹果公司视频流解决方案的开源版本。
-
easyDarwin
国内基于 Darwin Streaming Server 二次开发的流媒体服务器,有中文支持网站。
安装配置
RED5
使用 HTTP 协议播放
- 首先从 github 下载已编译版本,因为在 Linux 上安装使用,直接下载 red5-server-1.0.7-RELEASE.tar.gz 文件即可。
- Java 程序,在服务器上安装 jre1.7 版本后即可解压运行。测试阶段可以使用
./red5-debug.sh
启动 red5 服务器。在浏览器上输入 http://[serverip]:5080/ 可以看到 red5 控制主页。 - 在 red5 安装目录下的 webapp/vod 目录下的视频文件可以在本地 VLC 播放器上连接 http://[serverip]:5080/[filename]进行播放。
Darwin Streaming Server
功能同 easyDarwin,在 Linux 上安装比较繁琐,所以暂时只试用 easyDarwin。
easyDarwin
使用 RTSP 协议播放
- 首先从 github 下载源码或者已编译版本,因为上面有 CentOS 的已编译版本,直接下载解压即可使用。
- 使用 root 账户启动执行程序,首次启动迁移开启调试模式,
./easydarwin -c ./easydarwin.xml -d
。 - 启动后,可以在执行的从终端看到调试信息。同时使用 http://[serverip]:8088 可以登录,默认使用 admin/admin 登录。
- 在 Movies 目录下放置一些视频文件,就可以在客户端使用播放器进行播放,我测试使用的是 VLC。
Nginx + HLS
HLSHTTP Live Streaming 苹果公司开放的支持 html5 直接播放的视频流技术。
Nginx 实现 http 服务器功能,可以通过 http 访问 m3u8 文件实现播放。
要使用 HLS 播放的第一步,是将视频文件切割成多个 ts 视频流,然后使用 m3u8 索引文件进行播放。生成 m3u8 和 ts 文件可以借助 ffmpeg 工具,使用如下命令就可以将一般的视频文件转换成 HLS 支持的文件。
ffmpeg -i "G:\video\7 magic leap2.avi" -f hls "G:\video\HLR\test.m3u8"
对于大文件用上面这种方式有可能出现 m3u8 缺少索引的情况,因此也可以使用以下的方式对文件进行转换。
ffmpeg -i bigfile.mp4 -codec:v libx264 -codec:a aac -map 0 -f ssegment -segment_format mpegts -segment_list tos.m3u8 -segment_time 10 taste_of_shanghai%04d.ts
直接使用 Nginx 访问文件路径
不需要多余的软件,直接将 m3u8 文件所在目录设置为 http server 的根目录。
server {listen 80; | |
server_name localhost; | |
#charset koi8-r; | |
#access_log logs/host.access.log main; | |
location / {# root html; | |
root /var/www/html; | |
index index.html index.htm; | |
} |
即可使用播放器打开远程连接。
Nginx + jwplayer
Nginx 编译时增加 mp4 和 flv 模块,可以让 Nginx 支持 flv 和 mp4 格式。为了后面说明支持 RMTP 协议,同时在增加 RTMP 模块。
- 安装依赖包
yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-devel gettext-devel libtool mhash.x86_64 perl-Digest-SHA1.x86_64
tar xzvf zlib-1.2.8.tar.gz | |
cd zlib-1.2.8 | |
./configure | |
make | |
make install |
tar xzvf pcre-8.37.tar.gz | |
cd pcre-8.37 | |
./configure | |
make | |
make install |
tar xzvf yamdi-1.9.tar.gz | |
cd yamdi-1.9 | |
./cofigure | |
gcc yamdi.c -o yamdi -O2 -Wall |
tar xzvf openssl-1.0.1t.tar.gz | |
cd openssl-1.0.1t | |
./config | |
make depend | |
make install |
- 安装 ffmpeg 以及依赖包
需要安装 yasm, x264, LAME, libogg,libvorbis, libvpx, faad2, faac
# 汇编工具 | |
# 请网络搜索安装包 | |
unzip yasm-1.2.0-1.el6.x86_64.zip | |
rpm -ivh yasm-1.2.0-1.el6.x86_64.rpm |
# h.264 编码 | |
# http videolan.org | |
tar xjvf last_x264.tar.bz2 | |
cd x264-snapshot-20160718-2245 | |
./configure --enable-shared | |
make | |
make install |
# LAME mp3 编码器 | |
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz | |
tar xzvf lame-3.99.5.tar.gz | |
cd lame-3.99.5 | |
./configure --enable-nasm | |
make | |
make install |
# libogg 音频编码器 | |
wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz | |
tar xzvf libogg-1.3.2.tar.gz | |
cd libogg-1.3.2 | |
./configure | |
make | |
make install |
# libvorbis 音频编码器 | |
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz | |
tar xzvf libvorbis-1.3.5.tar.gz | |
cd libvorbis-1.3.5 | |
./configure | |
make | |
make install |
# libvpx VP8 编码解码器 | |
# 网络搜索 | |
tar xjvf libvpx-1.5.0.tar.bz2 | |
cd libvpx-1.5.0 | |
./configure --enable-shared | |
make | |
make install |
# FAAD2 MPEG- 2 和 AAC 格式的编解码器 | |
wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz | |
tar xzvf faad2-2.7.tar.gz | |
cd faad2-2.7 | |
./configure | |
make | |
make install |
# faac AAC 编解码器 | |
wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz | |
tar xzvf faac-1.28.tar.gz | |
cd faac-1.28 | |
./configure | |
make | |
make install |
# xvid 视频编码 | |
wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz | |
tar zxvf xvidcore-1.3.2.tar.gz | |
cd xvidcore/build/generic | |
./configure | |
make | |
make install |
# ffmpeg 转换工具 | |
wget http://ffmpeg.org/releases/ffmpeg-3.1.1.tar.bz2 | |
tar xjvf ffmpeg-3.1.1.tar.bz2 | |
cd ffmpeg-3.1.1 | |
./configure --prefix=/opt/ffmpeg/ \ | |
--enable-version3 \ | |
--enable-libvpx \ | |
--enable-libfaac \ | |
--enable-libmp3lame \ | |
--enable-libvorbis \ | |
--enable-libx264 \ | |
--enable-libxvid \ | |
--enable-shared \ | |
--enable-gpl \ | |
--enable-postproc \ | |
--enable-nonfree \ | |
--enable-avfilter \ | |
--enable-pthreads | |
make | |
# 可以忽略编译过程中的警告信息 | |
make install |
- 修改
/etc/ld.so.conf
inclue ld.so.conf.d/*.conf | |
/lib | |
/lib64 | |
/usr/lib | |
/usr/lib64 | |
/usr/local/lib | |
/usr/local/lib64 | |
/opt/ffmpeg/lib |
执行 ldconfig
使修改生效。
- 编码测试
ffmpeg -i ./a_day_with_htc_vive.avi -f hls ./htcvive.m3u8
- 编译 Nginx
wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz | |
tar xzvf nginx_mod_h264_streaming-2.2.7.tar.gz | |
unzip nginx-rtmp-module-master.zip |
vi nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c | |
# 注释以下内容 | |
/* TODO: Win32 */ | |
if (r->zero_in_uri) | |
{return NGX_DECLINED; | |
} |
groupadd nginx | |
useradd nginx | |
usermod -G nginx nginx |
tar zxf nginx-1.8.0.tar.gz | |
cd nginx-1.8.0 | |
./configure --prefix=/usr/local/nginx \ | |
--add-module=/opt/video/nginx_mod_h264_streaming-2.2.7 \ | |
--with-http_flv_module \ | |
--with-http_ssl_module \ | |
--with-http_mp4_module \ | |
--with-http_gzip_static_module \ | |
--with-http_stub_status_module \ | |
--with-pcre=/opt/video/pcre-8.37 \ | |
--with-zlib=/opt/video/zlib-1.2.8 \ | |
--user=nginx --group=nginx \ | |
--add-module=/opt/video/nginx-rtmp-module-master \ | |
--with-cc-opt=-I/opt/ffmpeg/include \ | |
--with-ld-opt=-L/opt/ffmpeg/lib-R/opt/ffmpeg/lib | |
make | |
make install |
- 配置 nginx.conf 文件
server {listen 80; | |
server_name localhost; | |
location / { | |
root /var/www/html; | |
index index.html index.htm; | |
location ~ \.flv$ | |
{flv;} | |
location ~ \.mp4$ | |
{mp4;} | |
} | |
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { | |
root /var/www/html; | |
break; | |
} |
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142101p2.htm
