live555二次开发经验总结:RTSPClient客户端与RTSPServer服务器
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的复杂流程和担心内存释放的问题了!
获取更多信息
Copyright © EasyDarwin.org 2012-2017
live555二次开发经验总结:RTSPClient客户端与RTSPServer服务器的更多相关文章
- 【Meetup回顾】Apache DolphinScheduler在联通的实践和二次开发经验分享
在由 openLooKeng 社区主办,Apahce DolphinScheduler社区.Apache Pulsar 社区.示说网协办的联合 Meetup 上,来自联通数字科技的王兴杰老师分享了Do ...
- Portable Basemap Server:多数据源多客户端的底图服务器
Portable Basemap Server:多数据源多客户端的底图服务器 [poll id=”1″]2014.3.8更新v3.1~在线切片转换为MBTiles时,增加RecreateEmptyCa ...
- C#实现不安装Oracle客户端访问远程服务器数据!!
概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...
- C#实现不安装Oracle客户端访问远程服务器数据
概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...
- 二、socket编写简单BIO的HTTP服务器
一.目标 诸如tomcat等web服务器中间件简化了我们web的开发成本,但有时候我们或许并不需要这么一个完备的服务器,只是希望做一个简单地处理或者做特殊用途的服务器. 本文将提供一个HTTP的服务器 ...
- WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建
WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建 四月 4, 2019 作者:李超,音视频技术专家.本文首发于 RTC 开发者社区,欢迎在社区留言与作者交流. htt ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- 客户端挂载NFS服务器中的共享目录(用户后台上传图片与前台上传图片放在同一个服务器上)
服务器端使用showmount命令查询NFS的共享状态 # showmount -e //默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错 # showmount -a //显示已经与客 ...
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
1. TCP之客户端读取文本文件服务器控制台输出 (1)客户端:(发送数据到服务端) package cn.itcast_10; import java.io.BufferedReader; impo ...
随机推荐
- Android学习--持久化(一) 文件存储
持久化之 文件存储 这里把Android持久化全都整理一下,这一篇文章先简单的说一下文件的存储,通过下面一个简单的Demo,理解一下这个文件存储,先说说下面Demo的思路: 1.创建EditTex ...
- 某考试T2 frog
题目背景 无 题目描述 数轴上有 n 只青蛙,分别编号为 1 到 n.青蛙 i 的初始位置的坐标为 xi. 它们准备进行如下形式的移动:每轮包括 m 次跳跃,第 i 次跳跃由青蛙 ai(1 < ...
- iptables 一些有用的规则
-A INPUT -i lo -j ACCEPT #允许本机内部访问,即回环 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #允许 ...
- ubuntu归档管理器消失了?
Ubuntu - gnome 下的归档管理器软件名称: file-roller如果没有看看是不是这个包让你删除掉了?用这个命令查: dpkg -l | grep file-roller 如果有这 ...
- hdu1061(C++)
简单的找规律,不妨设N=10*x+a(a=N%10),那么N^N=(10*x+a)^N,用二项式展开定理可以知道N^N%10=a^N%10; 由于0<a<10,打表a^1,a^2,a^3, ...
- Git可视化极简易教程 — Git GUI使用方法
Git可视化极简易教程 — Git GUI使用方法 学习了:http://www.runoob.com/w3cnote/git-gui-window.html
- 在cmd窗口输入命令遇到You must run this command from a command prompt with administrator privilege怎么办?
点开始菜单,找到Accessories(附件),找到Command Prompt窗口,点右键,选“run as administrator”(以管理员身份运行),之后再执行先前的命令就好了. 2017 ...
- Timus : 1002. Phone Numbers 题解
把电话号码转换成为词典中能够记忆的的单词的组合,找到最短的组合. 我这道题应用到的知识点: 1 Trie数据结构 2 map的应用 3 动态规划法Word Break的知识 4 递归剪枝法 思路: 1 ...
- 关于郭天祥51开发板无法烧敲代码问题的解决(Prolific USB-to-Serial Comm Port)
1. 事件背景: 因为使用了win8系统,之前购买的郭天祥C51开发板在通过一个两头都是usb口的下载线下载程序时出现了问题:下载工具stc isp无法连接到开发板上的串口,所以无法下载程序到c51开 ...
- servlet实现文件下载所需步骤及说明
servlet实现文件下载所需步骤及说明 CreateTime--2017年9月1日15:46:22 Author:Marydon 参考链接:http://blog.sina.com.cn/s/b ...