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. AC日记——N的倍数 51nod 1103

    1103 N的倍数 思路: 先计算出前缀和: 然后都%n: 因为有n个数,所以如果没有sum[i]%n==0的化,一定有两个取模后的sum相等: 输出两个sum中间的数就好: 来,上代码: #incl ...

  2. gtest 自动化测试 部署

    1.部署 a)编译框架 1.1下载gtest库1.6.0 并解压到文件夹 "/user/{user}/gtest.1.6.0" 下载地址:https://code.google.c ...

  3. 转:Java多线程学习(总结很详细!!!)

    Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...

  4. [置顶] pycurl检测网站性能,pycurl.*_TIME时间问题

    今天使用python+pycurl来检测网站性能,使用curl_obj.getinfo(pycurl.*_TIME)来获取各个阶段运行时间 total_time = curl_obj.getinfo( ...

  5. tomcat部署不成功 Deployment failure on Tomcat 6.x. Could not copy all resources to

    解决办法: tomcat服务并没有启动.上网搜索之后发现和大家犯的是一个毛病,原来工程中我引了一个包,后来这个包被我给删除了,但是因为已经发布过这个工程了,所以classpath中就有这个包名了,这样 ...

  6. POJ 2128:Highways

    Highways Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2730   Accepted: 1008   Specia ...

  7. 鸟哥的linux私房菜服务器架设篇之准备工作和网络基础

    架设服务器的基本功课 1基础网络的基本概念,以方便进行联网和设定及除错 2熟悉操作系统的简易操作:包括登录分析,账号管理,文本编辑器的使用等等的技巧 3信息安全方面:包括防火墙与软件更新方面的相关知识 ...

  8. WinForm启动时接收参数

    1 默认的Main函数,修改如下: static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [ST ...

  9. js传递默认形参

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  10. apue学习笔记(第十二章 线程控制)

    本章将讲解控制线程行为方面的详细内容,而前面的章节中使用的都是它们的默认行为 线程属性 pthread接口允许我们通过设置每个对象关联的不同属性来细调线程和同步对象的行为.管理这些属性的函数都遵循相同 ...