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. MQ 分拆Json数据包然后上传

    public void UploadInsurHistory() { using (IDbConnection connection = ConnConfig.DmsConnection) { IDb ...

  2. 创建一个vue-cli项

    一.vue cli脚手架 Vue 提供了一个官方的cli,为单页面应用 (SPA) 快速搭建繁杂的脚手架,通过这个工具我们就可以很方便的来创建一个基于vue的项目. 二.安装一些必要的东西node.n ...

  3. 洛谷——P1119 灾后重建

    P1119 灾后重建 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重 ...

  4. ByteBuffer的介绍

    转摘 有一个问题需要明确:为什么要使用bytebuffer,它比byte比起来有什么优点? 很简单:为了提高IO的效率.怎样提高的,这个还得google一下. 记住几个标志的含义:position[0 ...

  5. centos7.3 开放端口 防火墙端口

    1. 查看已打开的端口 # netstat -anp 2. 查看想开的端口是否已开 # firewall-cmd --query-port=666/tcp 若此提示 FirewallD is not ...

  6. WinSCP介绍、安装、使用(转)

    http://blog.csdn.net/liang19890820/article/details/49700931 前言 如果说XManager通过Xshell.Xftp可以很方便的进行远程管理, ...

  7. ScutSDK 0.9版本发布

    ScutSDK简介: ScutSDK是和Scut游戏服务器引擎,简化客户端开发的配套SDK,她彻底打通了Scut开源游戏服务器引擎与客户端引擎(如Cocos2d-x/Quick-x/Unity3D)项 ...

  8. 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解【转】

    http://www.cnblogs.com/qinpengming/archive/2013/06/08/3127346.html 1,什么是ODF .NE,?就是Oracle 为 .NET (OD ...

  9. 移植MonkeyRunner的图片对照和获取子图功能的实现-UiAutomator/Robotium篇

    依据前一篇文章<移植MonkeyRunner的图片对照和获取子图功能的实现-Appium篇>所述,由于Appium和MonkeyRunner有一个共同点--代码控制流程都是在client实 ...

  10. vue Object.freeze() 优化

    参考自:https://segmentfault.com/a/1190000006191558 Object.freeze()是ES5新增的特性,可以冻结一个对象,防止对象被修改. vue 1.0.1 ...