live555介绍

安防领域的流媒体开发者估计没有谁不知道live555的,可能并不是因为其架构有多牛,代码有多好看,而是因为这玩意存在的年限实在是太长了,从changelog来看,live555从2002年至今2017年,已经整整15年的时间了,这还不是关键,关键是现在还一直保持着迭代更新!!!在经历过如此浮躁的互联网时代,还能不忘初心地坚持,真的是少见。

自2011年我研究live555,也对live555做过不少的二次开发,其中最大的体会就是:老牌架构但还能有一技之长!live555被广大开发者吐槽的主要是他的架构模型:单线程,这就导致整个程序的开发是一个阻塞式的流程,或者说live555其实就是一个披着C++外衣的C程序,各种嵌套、各种继承,开发者在调试live555的时候,可能稍不留神就跟丢了,二次开发也是最好是在外围打转,不要轻易涉足到内核部分!

live555能干啥?

是啊,live555能干啥?主要有两个方向:RTSPClient客户端和RTSPServer服务器,live555的核心工程也基本上就是围绕着RTSPClient.cpp和RTSPServer.cpp两个类来展开的;

先说道RTSPClient:个人认为live555最大的优势就是RTSPClient,为啥?因为兼容性强,整个安防的10多年都被他包括在里面了,各种各样RTSP的兼容,各种各样的场景,可以说开发到现在已经没有遇到过live555不能请求到的IPC了,可能大部分的IPC的内置服务器还是基于live555的RTSPServer来二次开发实现的!我经常在博客中描述我遇到的各种各样的奇葩IPC接入情景,有的IPC写的非常灵活,整个OPTIONS/DESCRIBE/SETUP/PLAY/TEARDOWN/GET_PARAMETER/SET_PARAMETER都实现了,而且收发消息都非常正常,而有的摄像机就是固定一条道,如果在这个过程中穿插着发了个OPTION或者GET_PARAMETER,那不得了,摄像机直接就无响应了,所以,我在做EasyRTSPClient的时候,开发了各种各样的选项,例如是否发保活、url是否带用户名密码等等!

再说RTSPServer:上面也说了,目前在市面上还是运行了很多基于live555的RTSPServer.cpp类二次开发的摄像机/NVR的流媒体服务器,这些服务器能跟vlc(vlc的RTSPClient部分是基于live555)很亲密的交互,因为都是一套架构流程的产物。基于live555实现RTSPServer服务器的经验总结下来,应该就是几点:1、外围调用;2、发送优化;在博客《EasyIPCamera高性能摄像机RTSP服务器RTSPServer解决方案》 中描述了我基于live555开发的一套RTSPServer组件的框架模型,而在内核方面,我修改了live555在网络发送方面,不在是单个RTP包发送,而是将所有数据都累积到4096才调用底层的发送,这样就大大提升了发送的效率,经过测试EasyIPCamera在网络使用率上非常好,千兆网络带宽使用率超过80%,也能PK海康、大华的IPC性能,高清同步输出超过4路!

关于EasyRTSPClient

EasyRTSPClient是一套非常稳定、易用、支持重连的RTSPClient工具,SDK形式提供,接口调用非常简单,再也不用像调用live555那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY的复杂流程,担心内存释放的问题了,全平台支持(包括Windows/Linux 32&64,ARM各平台,Android,iOS),支持RTP Over TCP/UDP,支持断线重连,连续维护与迭代超过5年,能够接入市面上99%以上的IPC,调用简单且成熟稳定!

关于EasyIPCamera

EasyIPCamera是一套非常稳定、易用、支持多种平台(包括Windows/Linux 32&64,Android,ARM hisiv100/hisiv200/hisiv400等平台)的RTSP Server组件,适用于IPCamera、内网RTSP服务等小型RTSP流媒体服务器,接口调用非常简单成熟,无需关注RTSPServer中关于客户端监听接入、音视频多路复用、RTSP具体流程、RTP打包与发送等相关问题,支持多种音视频格式,再也不用像调用live555 RTSPServer那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的复杂流程和担心内存释放的问题了!

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

live555二次开发经验总结:RTSPClient客户端与RTSPServer服务器的更多相关文章

  1. 【Meetup回顾】Apache DolphinScheduler在联通的实践和二次开发经验分享

    在由 openLooKeng 社区主办,Apahce DolphinScheduler社区.Apache Pulsar 社区.示说网协办的联合 Meetup 上,来自联通数字科技的王兴杰老师分享了Do ...

  2. Portable Basemap Server:多数据源多客户端的底图服务器

    Portable Basemap Server:多数据源多客户端的底图服务器 [poll id=”1″]2014.3.8更新v3.1~在线切片转换为MBTiles时,增加RecreateEmptyCa ...

  3. C#实现不安装Oracle客户端访问远程服务器数据!!

    概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...

  4. C#实现不安装Oracle客户端访问远程服务器数据

    概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...

  5. 二、socket编写简单BIO的HTTP服务器

    一.目标 诸如tomcat等web服务器中间件简化了我们web的开发成本,但有时候我们或许并不需要这么一个完备的服务器,只是希望做一个简单地处理或者做特殊用途的服务器. 本文将提供一个HTTP的服务器 ...

  6. WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建

    WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建 四月 4, 2019 作者:李超,音视频技术专家.本文首发于 RTC 开发者社区,欢迎在社区留言与作者交流. htt ...

  7. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  8. 客户端挂载NFS服务器中的共享目录(用户后台上传图片与前台上传图片放在同一个服务器上)

    服务器端使用showmount命令查询NFS的共享状态 # showmount -e //默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错 # showmount -a //显示已经与客 ...

  9. Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出

    1. TCP之客户端读取文本文件服务器控制台输出 (1)客户端:(发送数据到服务端) package cn.itcast_10; import java.io.BufferedReader; impo ...

随机推荐

  1. Educational Codeforces Round 35 B. Two Cakes【枚举/给盘子个数,两份蛋糕块数,最少需要在每个盘子放几块蛋糕保证所有蛋糕块都装下】

    B. Two Cakes time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  2. TopCoder SRM 301 Div2 Problem 1000 CorrectingParenthesization(区间DP)

    题意  给定一个长度为偶数的字符串.这个字符串由三种括号组成. 现在要把这个字符串修改为一个符合括号完全匹配的字符串,改变一个括号的代价为$1$,求最小总代价. 区间DP.令$dp[i][j]$为把子 ...

  3. 平衡树之非旋Treap

    平衡树(二叉树) 线段树不支持插入or删除一个数于是平衡树产生了 常见平衡树:treap(比sbt慢,好写吧),SBT(快,比较好写,有些功能不支持),splay(特别慢,复杂度当做根号n来用,功能强 ...

  4. 【转】java:多网卡环境下获取MAC地址

    http://blog.csdn.net/10km/article/details/78569962 JDK6以后 java.net.NetworkInterface提供了完整的方法用于获取网络设备信 ...

  5. Jenkins内存溢出的处理方法

    参考:http://openwares.net/java/jenkens_deploy_to_tomcat_error_of_outofmemoryerror.html上的说明,有如下解释: -Xms ...

  6. Android Spinner In Toolbar

    As the title of the post suggest in this tutorial we will see how to have spinner widget inside the ...

  7. 关于 OGRE 与 OSG 的简单比较 (转)

    关于 OGRE 与 OSG 的简单比较 1   前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(man ...

  8. Spark HA模式访问Hadoop HA下的数据

    首先是需要将hadoop的配置文件core-site,xml和hdfs-site.xml 拷贝到Spark conf目录下 然后启动提交即可 spark-submit \ --master spark ...

  9. 转: Gradle:Gradle入门

    from: http://blog.csdn.net/p106786860/article/details/50422463

  10. 关于Blind XXE

    关于Blind XXE 关于XXE,很早之前内部做过分享,个人觉得漏洞本身没太多的玩点,比较有意思主要在于:不同语言处理URI的多元化和不同XML解析器在解析XML的一些特性. 在科普Blind XX ...