0%

Linux下视频流媒体服务器搭建详解

用于搭建内网流媒体服务器支持视频的点播。

背景
用于支持培训网站中视频点拨功能,在培训网站总体方案中需要加入流媒体服务器,用于存储和传输视频资源。

相关概念
流媒体
流媒体(Streaming Media)是一种新兴的网络传输技术,在互联网上实时顺序地传输和播放视/音频等多媒体内容的连续时基数据流。
流媒体技术包括流媒体数据采集、视/音频编解码、存储、传输、播放等领域。

流媒体系统组成
包括编码工具、流媒体数据、服务器、网络和播放器。

流媒体传输过程
如下图所示:
传输协议
RSVP: 资源预留协议
RTP: 实时传输协议
RTCP: 实时传输控制协议
MMS: 微软流媒体服务协议
RTSP: 实时流协议
RTMP: 实时消息传输协议
MIME: 多目因特网电子邮件扩展协议

开源/免费解决方案
ffmpeg

1
2
全平台视频转换
开源

RED5

1
2
Red5是一个采用Java开发开源的Flash流媒体服务器。它支持:把音频(MP3)和视频(FLV)转换成播放流; 录制客户端播放流(只支持FLV);共享对象;现场直播流发布;远程调用。Red5使用RSTP作为流媒体传输协议,在其自带的一些示例中演示了在线录制,flash流媒体播放,在线聊天,视频会议等一些基本功能。
开源地址:[](https://github.com/Red5/red5-server)

Darwin Streaming Server

1
为苹果公司视频流解决方案的开源版本。

easyDarwin

1
2
国内基于Darwin Streaming Server二次开发的流媒体服务器,有中文支持网站。
https://github.com/EasyDarwin/EasyDarwin

安装配置
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
要使用HLS播放的第一步,是将视频文件切割成多个ts视频流,然后使用m3u8索引文件进行播放。生成m3u8和ts文件可以借助ffmpeg工具,使用如下命令就可以将一般的视频文件转换成HLS支持的文件。

1
ffmpeg -i "G:\video\7 magic leap2.avi" -f hls "G:\video\HLR\test.m3u8"

对于大文件用上面这种方式有可能出现m3u8缺少索引的情况,因此也可以使用以下的方式对文件进行转换。

1
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的根目录。

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name localhost;

location / {
root /var/www/html;
index index.html index.htm;
}
}