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代理与转发服务的更多相关文章

  1. 阿里云服务器 centos7 中继邮箱+转发服务 详细配置

    阿里云centos7 邮箱转发服务配置 一.文档编写目的: 网络拓扑图: 阿里云服务器屏蔽掉25端口后,内网服务器如何通过跳板机发送邮件到外网邮箱. 如果是可联网的阿里云机器,可以直接配置mailx使 ...

  2. 使用AWS亚马逊云搭建Gmail转发服务(三)

    title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...

  3. 使用AWS亚马逊云搭建Gmail转发服务(二)

    title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...

  4. 使用AWS亚马逊云搭建Gmail转发服务(一)

    title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...

  5. 搭建Pypi转发服务

    有时候有些正式环境的机器,不能访问外网,就只能在能访问外网的机器上搭建一个转发服务. 一.安装包 pip install flask_pypi_proxy flask_pypi_proxy 二.启动 ...

  6. live 555 freebsd 或centos 7.4 实现代理视频直播服务

    live 555   freebsd 或centos 7.4 实现代理视频直播服务 the live555 media server    在线直播服务器 关于此服务器 此服务是一个无安全的rtsp服 ...

  7. Windows Server 2008R2 设置SMTP邮件转发服务

    最近因业务需求在Windows Server 2008R2server上设置SMTP转发服务,主要是在业务审批过程中邮件通知相关人员审批情况, 1.在server上加入服务 2.打开服务 3.新建一个 ...

  8. netcore 之动态代理(微服务专题)

    动态代理配合rpc技术调用远程服务,不用关注细节的实现,让程序就像在本地调用以用. 因此动态代理在微服务系统中是不可或缺的一个技术.网上看到大部分案例都是通过反射自己实现,且相当复杂.编写和调试相当不 ...

  9. .net core编写转发服务(二) 添加服务发布订阅

    源设计就单纯完成了把服务转发到特定的服务模块,一定程度上解耦了业务流程 但是我们实际开发过程中会面临服务转发后还有一些列关联的服务 举个例子 你调用了发送邮件的服务,接下来会面临扣费的服务,扣费之后会 ...

  10. .net core编写转发服务

    我有个小伙伴问我,他需要写一个转发服务的他有很多功能要通过他的服务转发~ 技术栈又不一定asp.net core,我就想起泥水老前辈的BeetleX.FastHttpApi 中午午休,折腾了一会儿前辈 ...

随机推荐

  1. 手把手教你!STM32单片机入门指南:从初级到中级工程师的学习路线

    ​在当今科技日新月异的时代,嵌入式系统作为智能设备的核心驱动力,正以前所未有的速度渗透到我们生活的方方面面.STM32系列微控制器,以其高性能.低功耗及丰富的外设资源,成了许多开发者踏入嵌入式领域首选 ...

  2. docker cmd和entrypoint

    FROM scratch 很多镜像都是从他开始 创建自己的centos FROM centos 基于官方的centos开始写 构建自己的centos [root@docker dockerfile]# ...

  3. 【Linux】11 RPM & YUM 管理工具 介绍

    rpm包的管理 介绍: 一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中. 它生成具有.RPM扩展名的文件.RPM是RedHat Package Manager(RedHat软件包 ...

  4. 并行化强化学习 —— 最终版本 —— 并行reinforce算法的尝试

    本文代码地址: https://gitee.com/devilmaycry812839668/final_-version_-parallelism_-reinforce_-cart-pole 结合了 ...

  5. Chrome(Google) 浏览器安装Vue2、Vue3插件方法 (亲测有效)

    1.背景 2.步骤 步骤一:下载插件 网站:https://chrome.zzzmh.cn/#/search 百度网盘下载: 链接:https://pan.baidu.com/s/1xdEK-7qVx ...

  6. UCX84X笔记

    1. 管脚定义 COMP: 误差放大器补偿引脚.将外部补偿元件连接到此引脚,以修改误差放大器输出.误差放大器内部有电流限制,因此用户可以通过外部强制COMP接地来命令零占空比. UCx84x系列中的误 ...

  7. C#给类的添加扩展方法

    今天学习了给类添加扩展方法,这里记录下.我这记性不好,过不了两天就给忘记了. 下面的例子是给控件ListView类添加三个方法: 1.  AddItemInofStudent 作用是用结构体数据添加新 ...

  8. zabbix 4.0监控web页面

    web监控 web监测是用来监控web程序的,可以监控web程序的平均下载速度.响应时间.HTTP状态码. 环境 至少有两台被监控主机 静态网页检测 选择监控主机 ​ 配置场景 web监测->创 ...

  9. 我的微服务项目之IdentityServer4

     2021,祝大家新年快乐!!! 2021年了,新的一年应该有新的计划,我的计划是准备去学习微服务,所以我将我自己的博客项目拆分成了一个微服务项目,用来给自己学习,项目地址:http://www.tt ...

  10. 无分号js风格注意的三个问题

    建议如果一行代码是以   (   [   `  开头的,则最好都在其前面补上一个分号. // 1.( function say() { console.log('hello world') } // ...