用Darwin和live555实现的直播框架

咱们在开发视频直播或者监控类项目的时候,如场馆监控、学校监控、车载监控等等,每每首先但愿的是造成一个项目的雏形,而后再在这个框架的基础上进行不断的完善和扩展工做,那么咱们今天要给你们介绍的就是,如何造成一个这样的框架:html

采集本地音视频数据(Win) -->视频分发服务器-->客户端随意接入git

大体流程:咱们首先经过DShow采集Windows(XPWin7通过测试)主机的视频设备(Camera)和音频设备(Mic)的音视频资源,通过live555RTSP推送流程和RTP封包过程,将直播数据推送给Darwin分发服务器,Darwin分发服务器接收live555的推送数据并作相应的缓存(超过缓存时间的数据将会被移除),同时响应客户端的接入,将推送来的直播数据转发给客户端。github

设备采集端:采集端是以live555为基础框架,以DarwinInjector作为与Darwin交互的接口,再在live555 Source端分别实现CamH264VideoStreamFramer(H264视频)AudioInputMicDevice(AAC音频)的数据源。缓存


固然,在采集和发送数据以前,咱们须要进行的是与Darwin服务器之间的信令通道交互,这里咱们采用的是RTSP标准的Announce(SDP payload)SetupPlay过程,让Darwin服务器端创建转发类(主要是在QTSSReflectorModule),等待RTP数据的推送。服务器

设备采集端代码:http://pan.baidu.com/s/1y1E8s 微信

转发服务器:转发服务器是RTSP服务器Darwin Streaming Server,在以前的博客:基于DSS的推送式转发已经描述了RTSP标准推送流程,这里只说明一点小小的修改,就是在Darwin中,当设备端意外断线,也就是不通过标准的RTSP Teardown流程就与服务器断开的话,服务器端将会等待设备推送超时才会释放转发资源,那么对于这一点,咱们作了一个小小的更改,这个在:Darwin推送端断开的处理问题中已经描述了。那么最新代码的下载能够到EasyDarwin开源项目中去获取:https://github.com/xiejiashu/EasyDarwin,后续对Darwin的扩展,如分布式RTSP服务器、RTSP直播服务器、服务器端录像、Hint模块等功能,都会在这个开源项目中加入,但愿有兴趣的朋友加入到这个开源项目组中来。框架

客户端端客户端固然不用太多描述,标准的RTSP流播放器都能播放Darwin视频,不过若是有想开发RTSP客户端的朋友,也能够加入到讨论群中(288214068)tcp


框架扩展:在上述的流程中,咱们是在采集程序一开启时,就开始向Darwin服务器推送数据,那么在一般状况下,点播或者直播一般都是On Demand的形式,就是说,只有有须要的时候,咱们才推送视频给服务器,没有须要的时候,设备处在空闲状态的,那么咱们可不能够在上述的框架上作到这一点呢?固然能够!分布式


如上图,咱们能够先在设备端,开启一条tcp通道,链接到Darwin服务器,Darwin服务器中扩展一个管理模块,专门管理与设备的通讯与接入,这样,在服务器不须要设备数据的时候,只与设备保持信令通道的链接和畅通就能够了,当有须要设备当前音视频数据的时候,就经过这条信令通道发送开启命令,采集设备收到命令(自定义命令),就开始本地采集、编码、打包和RTP传输流程,RTP通道能够与信令通道公用也能够单独创建,不过建议仍是单独创建的好。当服务器端对此设备分发的客户端数量为0或者其余更高级的需求来到时,能够经过信令通道,发送中止命令到采集设备,这样采集设备就中止本地采集、编码等工做,进入最开始时候的空闲等待状态。如此,就实现了实时视频的点播效果。固然,图中的转发模块与管理模块能够在同一个程序里面开发,也能够分开,分为管理服务器和转发服务器。ide

------------------------------------------------------------
本文转自www.easydarwin.org,更多开源流媒体解决方案,请关注咱们的微信:EasyDarwin 

相关文章
相关标签/搜索