基于EasyDarwin远程视频传输

来源:互联网 发布:外汇数据行情做单 编辑:程序博客网 时间:2024/05/22 01:24

  在无人机的远程视频传输方面,目前可以采用的就是用4G网络来完成视频的传输。把实时采集到的视频流推送给转发服务器,地面站再从转发服务器获取视频流,因为目前的网络条件和硬件编码压缩的原因,会有1S-3S左右的延时。目前的基于4G网络,还没有很低延时的技术。所以这种模式远程视频传输并不适合于向多旋翼这种实时性要求很高的场合,比较适合于地面车辆,或者需要视频监控的场合。其实在Mission Planner中有mjpeg的视频传输,但是目前视频采集都采用h264的高清编码格式。这系类文章的意义就是把mjpeg升级为h264编码传输的。接触EasyDarwin有一段时间了,就索性写一些文档,参考了http://blog.csdn.net/haolipengzhanshen/article/details/50783723

博主的文档。其中EasyDarwin的项目创始人蔡哥,也提供了重要的帮助!EasyDarwin是很优秀的国内的开源项目。

EasyDarin是什么
EasyDarwin是由国内开源流媒体团队维护的一款开源流媒体平台框架,从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目,更好地帮助广大流媒体开发者和创业型企业快速构建流媒体服务平台。

EasyDarwin官网及Github项目地址
官方网址:http://www.easydarwin.org/
Github地址:https://github.com/EasyDarwin/EasyDarwin

目前EasyDarwin流媒体平台整套解决方案包括有:
EasyDarwin(流媒体服务)
EasyCamera(开源流媒体摄像机)
EasyPlayer(开源流媒体播放器)
工具库(EasyHLS / EasyRTMP / EasyRTSPClient / EasyPusher / EasyAACEncoder)
注意:EasyDarwin有两个私有自定义的Module:拉模式转发模块EasyRelayModule和HLS直播模块EasyHLSModule,这里用到的libEasyRTSPClient、libEasyPusher、libEasyHLS三个库文件都是没有开源的,他们都是EasyDarwin团队开发的SDK库,但这些都是完全免费使用的。
EasyDarwin的编译和部署可以参考官方的文档
http://doc.easydarwin.org/EasyDarwin/README/#_1

这个项目计划用到
EasyDarwin(流媒体服务)
EasyCamera(开源流媒体摄像机)
EasyPlayer(开源流媒体播放器)
其中EasyDarwin(流媒体服务)部署到云端服务器,EasyCamera(开源流媒体摄像机)安装在无人机端,EasyPlayer(开源流媒体播放器)集成到地面站。

4GRTSP                                             图1.1 4G网络的视频传输方案图

一.主体框架
DSS的核心服务器部分是由一个父进程所fork出的一个子进程构成,该父进程就构成了整个流媒体服务器。父进程会等待子进程的退出,如果在运行的时候子进程产生了错误从而退出,那么父进程就会fork出一个新的子进程。可以看出,网络客户和服务器直接的对接是由核心服务器来完成的。网络客户RTSPoverRTP来发送或者接受请求。服务器就通过模块来处理相应的请求并向客户端发送数据包。

核心流媒体服务通过创建四种类型的线程来完成自己的工作,具体如下:
服务器自己拥有的主线程。当服务器需要关闭检查,以及在关闭之前记录相关状态打印相关统计信息等任务处理时,一般都是通过这个线程来完成的。
空闲任务线程。这个任务线程是用来对一个周期任务队列的管理,主要管理两种任务,超时任务和Socket任务。
事件线程。套接口相关事件由事件线程负责监听,当有RTSP请求或者收到RTP数据包时,事件线程就会把这些实践交给任务线程来处理。
任务线程。任务线程会把事件从事件线程中取出,并把处理请求传递到对应的服务器模块进行处理,比如把数据包发送给客户端的模块,在默认情况下,核心服务器会为每个处理器核创建一个任务线程。

二.模块分类 
流媒体服务器使用模块来响应各种请求及完成任务。有三种类型的模块:
(1).内容管理模块
媒体源相关的RTSP请求与响应,我们通过内容管理模块来管理,每个模块都用来对客户的需求进行解释并做相应处理,例如读取和解析模块支持的文件,或者请求的网络源信息,并通过RTP等方式响应。
内容管理模块有以下几个:
QTSSFileModule,
QTSSReflectorModule,
QTSSRelayModule,
QTSSMP3StreamingModule。
(2).服务器支持模块
服务器支持模块执行服务器数据的收集和记录功能。
服务器模块包括:
QTSSErrorLogModule,
QTSSAccessLogModule,
QTSSWebStatsModule,
QTSSWebDebugModule,
QTSSAdminModule,
QTSSPOSIXFileSystemModule。
(3).访问控制模块
访问控制模块提供鉴权和授权功能,以及操作URL路径提供支持。
访问控制模块包括:
QTSSAccessModule,
QTSSHomeDirectoryModule,
QTSSHttpFileModule,
QTSSSpamDefenseModule。

二.EasyDarwin特性(后续补充)
支持MP4、3GPP等文件格式;
支持MPEG-4、H.264等视频编解码格式;
支持RTSP流控协议,支持HTTP协议;
支持RTP流媒体传输协议;
支持单播和组播;
支持基于Web的管理;
具有完备的日志功能。
50                                         图1.2  EasyDarwin项目图

打开项目文件可以看到EasyDarwin的系统工程,改工程的入口函数在Core文件夹下,其中win32main.cpp是入口主函数,我们可以在入口函数里面打上断点来分析运行流程。


更多资讯参考:http://www.amovauto.com 阿木社区

QQ群:526221258

0 0
原创粉丝点击