EasyDarwin入门实践

EasyDarwin开源流媒体平台

本文大部分内容参考
http://doc.easydarwin.org/EasyDarwin/README/

EasyDarwin是由国内开源流媒体团队开发和维护的一款开源流媒体平台框架,从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目,更好地帮助广大流媒体开发者和创业型企业快速构建流媒体服务平台,更快、更简单地实现最新的移动互联网(安卓、IOS、微信)流媒体直播与点播的需求,尤其是安防行业与互联网行业的衔接。

EasyDawin目前支持

1.MP4点播回放;

2.标准RTSP推模式直播(QTSSReflectorModule);

3.标准RTSP拉模式直播(EasyRelayModule);

4.HLS直播(EasyHLSModule);

5.接入EasyDarwin流媒体平台,分布式部署;

编译部署方法

1.获取EasyDarwin最新版本。

2.VS下进行项目生成,将相关dll文件拷入文件夹中即可启动服务。

3.配置easydarwin.xml
主要的几个配置项:

rtsp_port: EasyDarwin RTSP服务监听的端口;

movie_folder:媒体文件存储的路径,包括点播文件、直播切片生成的hls文件;

http_service_port:Webservice服务端口;

hls_output_enabled:配置QTSSReflectorModule在接收推送的同时,是否同步输出hls;

HTTP_ROOT_DIR:配置EasyHLSModule的对外WEB路径;

local_ip_address:配置EasyRelayModule对外服务的ip地址,因为可能会有多网卡或者内网映射,所以需要手动配置;

4.运行EasyDarwin

【前提】EasyDarwin可执行文件必须与/html/目录在同一层目录中

Windows版本运行(控制台调试运行):

EasyDarwin.exe -c ./easydarwin.xml -d

注:需要把libEasyHLS.dll,libEasyPusher.dll,libEasyRTSPClient.dll,html文件夹和Movies文件夹拷贝到可执行程序的同目录下!

Windows服务运行:

cd ./
set curPath="%cd%"
echo service path:%curPath%
sc create EasyDarwin binPath= "%curPath%\EasyDarwin.exe -c %curPath%\easydarwin.xml" start= auto
sc failure EasyDarwin reset= 0 actions= restart/0
net start EasyDarwin
pause

将这段脚本做成bat,运行,我们就创建了一个叫做EasyDarwin的Windows服务了,通过系统服务(services.msc)可以查看到。 注:Windows不同版本可能稍有差异,建议在命令行运行bat脚本,而不是直接双击运行,这样能看到具体出错原因!

5.具体使用示例

MP4点播

将经过Hint处理过的mp4文件存在movie_folder目录中,访问RTSP地址:

rtsp:://[ip]:[rtsp_port]/[filename]

使用VLC等播放器即可播放。

推模式转发

直接通过标准RTSP/RTP推送流程(ANNOUNCE/SETUP/PLAY/RTP)向EasyDarwin推送音视频数据进行转发和分发,例如rtsp_port配置为8554,那我们可以直接用EasyDarwin EasyPusher或者live555 DarwinInjector向8554端口进行直播推送;

拉模式转发

调用接口(用vlc、ffplay、live555等RTSP Client调用)

RTSP://[ip]:[rtsp_port]/EasyRelayModule?name=[relayName]&url="[RTSP_URL]"

例如EasyDarwin服务器IP地址是:8.8.8.8,RTSP端口(rtsp_port):554,IPCamera的RTSP地址是:rtsp://admin:admin@192.168.66.189/22,那么我们可以:

1、配置easydarwin.xml EasyRelayModule

<PREF NAME="local_ip_address" >8.8.8.8</PREF>

2、请求转发:RTSP://8.8.8.8:554/EasyRelayModule?name=live&url=”rtsp://admin:admin@192.168.66.189/22” (name是定义一个拉模式转发流的唯一标识,不允许重复)

3、直播URL:RTSP://8.8.8.8:554/EasyRelayModule?name=live

4、请求停止转发:RTSP://8.8.8.8:554/EasyRelayModule?name=live&cmd=stop (cmd=stop表示停止拉模式转发)

6.实际操作

A 使用EasyDarwin+VLC进行MP4点播,效果如下:
MP4点播

B 使用EasyPuhser+EasyDarwin+Nginx查看网页直播
具体操作详见最上面网址,配置过程一定要知道每一步自己在干什么,配合Nginx+EasyPusher+EasyDarwin,可以实现向服务器推送RTSP流,然后转发到公网进行查看。效果如下:
HLS

7.这一套每个工具的作用
EasyDarwin:直播、点播,安防行业与互联网行业对接

输入:MP4本地文件 RTSP流
输出:RTSP流 HLS直播

EasyPusher:一个给EasyDarwin推送流媒体音视频的推送库,使EasyDarwin可以进行转发和分发

EasyPush_FILE:推送本地文件到服务器
EasyPusher_RTSP:通过EasyRTSPClient库,将RTSP/RTP数据获取到本地,再推送到EasyDarwin
支持的视频编码有:H264、MJPEG、MPEG4
支持的音频编码有:AAC、G711 alaw、G711 ulaw

EasyHLS:只需要传入打包的文件名、切片存放的目录、单个切片时长以及切片数等参数,EasyHLS库就能轻松将H264+AAC的流媒体切片成m3u8+ts,提供给WEB服务器进行HLS流媒体发布;

EasyHLS_RTSP:通过RTSPClient将RTSP URL的流媒体数据获取并进行ts打包,提供HLS直播

EasyRTSPClient:EasyRTSPClient是EasyDarwin开源流媒体团队提供的一套非常稳定、易用、支持重连的RTSPClient工具,接口调用非常简单,再也不用像调用live555那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY的复杂流程,担心内存释放的问题了!

拉取RTSP流到本地

EasyClient:客户端项目,支持多种源接入,Windows摄像头、麦克风、RTSP摄像机、屏幕桌面,采集后经过264编码、EasyPuhser推送到流媒体服务器进行转发;还支持通过EasyRTSPClient拉取EasyDarwin直播流,充当VLC的作用。如下图所示:

Client

总之,这一套解决方案算是全的了,有如下这些(官网截图,我们用的只是其中一小部分):

系列解决方案

8.科普小知识

HLS(HTTP Living Streaming):Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。

RTSP(Real Time Streaming Protocol):实时流传输协议,用于在客户端和服务器之间建立和协商实时流会话。

有兴趣的可以多研究研究。