EasyPlayer、EasyRTSPClient是如何设计重连的

首先大概解释一下EasyRTSPClient与EasyPlayer间的关系:EasyRTSPClient是一个专门用于与RTSP流媒体服务器交互的RTSPClient框架,类似于live555的OpenRTSP功能,他能够很好很兼容地实现RTSP OPTIONS、SETUP、PLAY、TEARDOWN等功能,还能进行数据回调的解析和网络事件的回调,更重要的是EasyRTSPClient非常稳定,用于工业级项目3年多,收到了很多用户发来的好评!

EasyPlayer的底层RTSP交互过程全部采用的是libEasyRTSPClient来实现的,这样EasyPlayer只需要专注于获取到的数据的处理过程,而且不需要关注其他的网络协议部分的功能,EasyPlayer只需要调用EasyRTSPClient的相关接口和回调处理,就能控制整个RTSP播放流程的运转了!

重点说一下EasyRTSPClient是如何进行RTSP重连过程的,EasyRTSPClient采用的是线程控制的,内部RTSP采用的是一个独立线程运行获取数据,再在获取到数据后,进行解析回调,外部线程进行时间统计,当超时时间内没有任何视频或者音频数据回调,外部线程会主动干涉内部RTSP线程,重新goto到RTSP初始状态,重新开始连接RTSP Server服务器;

上层对RTSP重连的多种控制方法

我们先观察EasyRTSPClient的事件回调:

else if (_frameType == EASY_SDK_EVENT_FRAME_FLAG)//回调连接状态事件
{
// EasyRTSPClient开始进行连接,建立EasyRTSPClient连接线程
if (NULL == _pBuf && NULL == _frameInfo)
{
printf("Connecting:%s ...\n", fRTSPURL);
} // EasyRTSPClient RTSPClient连接错误,错误码通过EasyRTSP_GetErrCode()接口获取,比如404
else if (NULL != _frameInfo && _frameInfo->codec == EASY_SDK_EVENT_CODEC_ERROR)
{
printf("Error:%s:%d :%s ...\n", fRTSPURL, EasyRTSP_GetErrCode(fRTSPHandle), _pBuf?_pBuf:"null" );
} // EasyRTSPClient连接线程退出,此时上层应该停止相关调用,复位连接按钮等状态
else if (NULL != _frameInfo && _frameInfo->codec == EASY_SDK_EVENT_CODEC_EXIT)
{
printf("Exit:%s,Error:%d ...\n", fRTSPURL, EasyRTSP_GetErrCode(fRTSPHandle));
}
}

EasyRTSPClient会在几种情况下回调出状态:

  • RTSPClient开始连接的时候;
  • RTSPClient连接发送错误的时候会立即反馈回调;
  • RTSPClient连接线程退出的时候;

EasyRTSPClient自身有重连功能,如果用户不想麻烦处理重连的过程,完全可以交由EasyRTSPClient内部处理,如果用户想接管重连过程,主要是处理 EASY_SDK_EVENT_CODEC_ERROREASY_SDK_EVENT_CODEC_EXIT 两种回调;

EasyPlayer

EasyPlayer是由EasyDarwin开源团队开发和维护的一个流媒体播放器项目,目前有RTSP版和Pro版两个版本,RTSP支持Windows(支持多窗口、包含ActiveXnpAPI Web插件)、Android平台,iOS平台,视频支持H.264H.265MPEG4MJPEG,音频支持G711AG711UG726AAC,支持RTSP over TCP/UDP,支持硬解码,是一套极佳的RTSP流播放组件;

EasyPlayer Pro版支持RTSP、RTMP、HTTP、HLS等各种流媒体协议播放,稳定、高效、可靠,支持Windows、Android、iOS!

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

最新文章

  1. mysql 中基础英语单词 (一)关于数据库创建与查找 (包括简写单词)
  2. ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】
  3. tensor flow入门笔记
  4. 微软极品工具箱-Sysinternals Suite
  5. 字节流和字符流(PrintStream类和PrintWiter类)
  6. 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)
  7. 【转】 Understanding Component-Entity-Systems
  8. 【翻译习作】 Windows Workflow Foundation程序开发-第一章03
  9. Java7编程 高级进阶学习笔记--嵌套类
  10. android开发之路04(初级android工程师必会,你懂得!)
  11. dedecms 5.7文章编辑器附件上传图标不显示
  12. cloudera目录位置
  13. bestcoder单调区间
  14. JVM(一)JVM的基本结构
  15. Docker(二):Docker镜像使用
  16. SpriteKit游戏开发 Challenge 2: An invincible zombie 问题的另一种解决方法
  17. synchronized(this) 与synchronized(class) 之间的区别
  18. npm cnpm yarn
  19. 【kindle笔记】之 《浪潮之巅》- 2018-1-
  20. BZOJ4963 : String

热门文章

  1. (3)Django 配置
  2. Codeforces Round #324 (Div. 2) Kolya and Tanya 组合数学
  3. sslstrip 中间人HTTP
  4. oracle小知识点16-诊断事件diagnostic events
  5. ios与js交互获取webview元素和赋值
  6. Beginning Auto Layout Tutorial in iOS 7: Part 4
  7. 【spring boot】在自定义拦截器中从request中获取json字符串
  8. Android性能优化第(二)篇---Memory Monitor检测内存泄露
  9. SilverLight.3-Validation:二、银光验证。TheLabel、TheDescriptionViewer和TheValidationSummary
  10. StringUtils和IOUtils工具包的使用