RTPS代理与转发服务
Proxy介绍
利用libevent实现网络连接和线程池。通过tcp连接的方式实现rtsp消息转发,再通过udp连接进行rtp与rtcp转发。报文解析使用到了Qt库。请尽量使用qmake进行编译。源码
通讯时序图

RTSP协议介绍
RTSP协议是一套用来进行音视频发送与接收的网络协议,与HTTP协议不同。它包含了一套tcp连接和两套udp连接。通过对协议的实测,大致的交互流程如下:
1. 服务端监听tcp连接:默认的连接端口是554,如果你希望实现自己的rtsp服务也可以自定义。
2. 客户端连接后需要根据固定的顺序完成握手:OPTIONS、DESCRIBE、SETUP、PLAY和TEARDOWN。除此以外的其它请求都为可选。
3. 服务端的返回值最常见的是200和403。如果返回200则表示请求通过,403表示需要验证验证权限。
4. 在客户端发送SETUP请求的报文中需要包含client_port=xxxx-xxxx的信息,通常是相邻的两个端口号,前一个是偶数端口用来接收rtp音视频报文,后一个端口是奇数端口用来发送rtcp同步报文。
5. 服务端收的应答中会包含server_port=xxxx-xxxx的信息,也是两个相邻端口号。偶数为rtp发送端口,奇数为rtcp接收端口。
6. 最后等待客户端发送PLAY请求,双方开始启用udp通信,tcp连接保持。海康的硬盘录像机除可以使用rtsp协议获取直播流以外还能获取录像流。当客户端与服务器建立完成连接后,客户端通过重新发送PLAY请求动态调整录像的播放速率。服务器调整播放速度其实只是调整了rtp端口的报文发送速度而已,具体解码播放还是要播放器来实现。
Proxy做了哪些工作
通过tcp连接,proxy接受客户端的连接后会向服务器发起连接,并将服务器的rtsp报文转发回客户端处理。因此握手与校验的工作依然需要由客户端来完成。
当proxy接收到来自客户端的SETUP请求后会将client_port=xxxx-xxxx的报文替换成自己的代理端口。服务器返回的server_port=xxxx-xxxx报文也会被替换。proxy内部会将这4个udp端口两两配对,两个偶数端口组成一个rtp管线负责向下转发,两个奇数端口组成rtcp管线负责向上转发。这两条管线(UdpPipe)我们称为StreamTask,会分配给一个线程(StreamThread)运行。线程来自一个用libevent实现的线程池(ThreadPool)。每当有一个StreamTask被创建的时候,proxy会从线程池中找一条负载最小的线程来分配任务。会在客户端连接断开后从线程池释放。

RTPS代理与转发服务的更多相关文章
- 阿里云服务器 centos7 中继邮箱+转发服务 详细配置
阿里云centos7 邮箱转发服务配置 一.文档编写目的: 网络拓扑图: 阿里云服务器屏蔽掉25端口后,内网服务器如何通过跳板机发送邮件到外网邮箱. 如果是可联网的阿里云机器,可以直接配置mailx使 ...
- 使用AWS亚马逊云搭建Gmail转发服务(三)
title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...
- 使用AWS亚马逊云搭建Gmail转发服务(二)
title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...
- 使用AWS亚马逊云搭建Gmail转发服务(一)
title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...
- 搭建Pypi转发服务
有时候有些正式环境的机器,不能访问外网,就只能在能访问外网的机器上搭建一个转发服务. 一.安装包 pip install flask_pypi_proxy flask_pypi_proxy 二.启动 ...
- live 555 freebsd 或centos 7.4 实现代理视频直播服务
live 555 freebsd 或centos 7.4 实现代理视频直播服务 the live555 media server 在线直播服务器 关于此服务器 此服务是一个无安全的rtsp服 ...
- Windows Server 2008R2 设置SMTP邮件转发服务
最近因业务需求在Windows Server 2008R2server上设置SMTP转发服务,主要是在业务审批过程中邮件通知相关人员审批情况, 1.在server上加入服务 2.打开服务 3.新建一个 ...
- netcore 之动态代理(微服务专题)
动态代理配合rpc技术调用远程服务,不用关注细节的实现,让程序就像在本地调用以用. 因此动态代理在微服务系统中是不可或缺的一个技术.网上看到大部分案例都是通过反射自己实现,且相当复杂.编写和调试相当不 ...
- .net core编写转发服务(二) 添加服务发布订阅
源设计就单纯完成了把服务转发到特定的服务模块,一定程度上解耦了业务流程 但是我们实际开发过程中会面临服务转发后还有一些列关联的服务 举个例子 你调用了发送邮件的服务,接下来会面临扣费的服务,扣费之后会 ...
- .net core编写转发服务
我有个小伙伴问我,他需要写一个转发服务的他有很多功能要通过他的服务转发~ 技术栈又不一定asp.net core,我就想起泥水老前辈的BeetleX.FastHttpApi 中午午休,折腾了一会儿前辈 ...
随机推荐
- 手把手教你!STM32单片机入门指南:从初级到中级工程师的学习路线
在当今科技日新月异的时代,嵌入式系统作为智能设备的核心驱动力,正以前所未有的速度渗透到我们生活的方方面面.STM32系列微控制器,以其高性能.低功耗及丰富的外设资源,成了许多开发者踏入嵌入式领域首选 ...
- docker cmd和entrypoint
FROM scratch 很多镜像都是从他开始 创建自己的centos FROM centos 基于官方的centos开始写 构建自己的centos [root@docker dockerfile]# ...
- 【Linux】11 RPM & YUM 管理工具 介绍
rpm包的管理 介绍: 一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中. 它生成具有.RPM扩展名的文件.RPM是RedHat Package Manager(RedHat软件包 ...
- 并行化强化学习 —— 最终版本 —— 并行reinforce算法的尝试
本文代码地址: https://gitee.com/devilmaycry812839668/final_-version_-parallelism_-reinforce_-cart-pole 结合了 ...
- Chrome(Google) 浏览器安装Vue2、Vue3插件方法 (亲测有效)
1.背景 2.步骤 步骤一:下载插件 网站:https://chrome.zzzmh.cn/#/search 百度网盘下载: 链接:https://pan.baidu.com/s/1xdEK-7qVx ...
- UCX84X笔记
1. 管脚定义 COMP: 误差放大器补偿引脚.将外部补偿元件连接到此引脚,以修改误差放大器输出.误差放大器内部有电流限制,因此用户可以通过外部强制COMP接地来命令零占空比. UCx84x系列中的误 ...
- C#给类的添加扩展方法
今天学习了给类添加扩展方法,这里记录下.我这记性不好,过不了两天就给忘记了. 下面的例子是给控件ListView类添加三个方法: 1. AddItemInofStudent 作用是用结构体数据添加新 ...
- zabbix 4.0监控web页面
web监控 web监测是用来监控web程序的,可以监控web程序的平均下载速度.响应时间.HTTP状态码. 环境 至少有两台被监控主机 静态网页检测 选择监控主机 配置场景 web监测->创 ...
- 我的微服务项目之IdentityServer4
2021,祝大家新年快乐!!! 2021年了,新的一年应该有新的计划,我的计划是准备去学习微服务,所以我将我自己的博客项目拆分成了一个微服务项目,用来给自己学习,项目地址:http://www.tt ...
- 无分号js风格注意的三个问题
建议如果一行代码是以 ( [ ` 开头的,则最好都在其前面补上一个分号. // 1.( function say() { console.log('hello world') } // ...