在EasyDarwin进行实时视频转发的两种模式

2024-02-22 03:48

本文主要是介绍在EasyDarwin进行实时视频转发的两种模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、首先引用Darwin开发文档里面的一段来介绍一下流转发的拉模式和推模式:

Darwin支持两种自动播送的场景:

  • 先拉后推。为了发起自动播送,RTSP客户会发送标准的RTSP请求来向服务器请求一个流,然后服务器将该流中继到一个或者多个流媒体服务器。这种场景在"先拉后推"部分中加以描述。
  • 先侦听后推送。在这个场景中,自动播送在流媒体服务器接收到ANNOUNCE请求时被发起。这个场景在"先侦听后推送"部分中进行描述。

先拉后推

用户可以通过发送标准的DESCRIBE/SETUP/PLAY请求来向远程的源中请求一个流,然后将它中继转发到一个或者多个目的地。当只希望让外部流的一份拷贝占用其内部连接的带宽时,这个功能可能有用。中继转发获取一份拷贝进行多份的复制和转发、分发到请求的客户端。图 1.提供了一个先拉后推(pull-then-push)场景的实例。

pull-then-push

图1.先拉后推式

图1.作为参考,先拉后推场景的步骤如下:

  1. 流媒体服务器A(转发服务器)发送标准的RTSP客户DESCRIBE/SETUP/PLAY请求给远程服务器,即流媒体服务器B。 
  2. 发起请求的中继“客户端”(流媒体服务器A)开始接受流,然后向该输入流的中继配置中列出的所有目的地发送ANNOUNCE推送请求。

注意:我们在实际的需求中常常遇到的场景为,客户端的请求触发转发服务器以拉模式从前端设备或者其他流媒体服务器获取视频后,再传输给客户端,是一种先拉后拉(pull-then-pull)模式,如果客户端请求的视频流存在,则直接转发已经获取的拷贝进行分发,这个是我们后面在对Darwin做二次开发中所需要做的

先侦听后推送

流媒体服务器可以被配置为将ANNOUNCE请求创建的输入流自动发送到一个或者多个目的地。这可能可以用于配制自动播送网络。图 2.提供了一个先侦听后推送的场景的实例。

图2.先侦听后推送式

图2.作为参考,先侦听后推送场景的步骤如下:

  • 远程机器(IpCamera等前端设备或者中继服务器)向流媒体服务器A发送一个ANNOUNCE请求。流媒体服务器可以接受或者否认这个请求。如果它接受了请求,则流媒体服务器会检查其中继配置,以确定这个流是否应该被中继。
  • 如果该流应该被中继,则流媒体服务器将向自身发送标准的RTSP客户DESCRIBE/SETUP/PLAY请求。 
  • 发出请求的中继“客户”(流媒体服务器A)开始接收流,然后向相应的输入流的中继配置中列出的所有目的地发送一个ANNOUCE请求。

注意:我们在实际的需求中常常遇到的场景为,前端设备RTSP Announce上线至中继服务器,上报其流媒体SDP信息,前端设备再经过'被触发',通过SETUP/PLAY流程发起流推送,客户端再以拉模式拉取实时视频流,是一种先推后拉(push-then-pull)模式,如果客户端请求的视频流存在,则直接转发已经获取的拷贝进行分发,这个又是我们后面在对Darwin做二次开发中所需要做的,"我怎么说又了"!

在缺省情况下,认证对于自动播送是必要的。来自播送器的ANNOUNCE请求需要通过服务器中活跃的认证机制来过滤。为了支持播送认证,需要在qtaccess文件中加入一个新的WRITE指令。这个新的指令使得SDP文件可以被写入到媒体文件夹(Darwin中为Movies文件夹)中。

 

二、Darwin中实现转发和分发的具体类

 在Darwin中,实现拉模式转发的模块为QTSSRelayModule,每一路转发会话为一个RelaySession对象,转发列表存储于队列sSessionQueue中

QTSSRelayModule一开始Initialize()读取配置文件中关于转发文件路径存储于sRelayPrefs静态变量中

[html]  view plain copy
  1. <MODULE NAME="QTSSRelayModule" >  
  2.     <PREF NAME="relay_prefs_file" >./relayconfig.xml</PREF>   
  3.     <PREF NAME="relay_stats_url" ></PREF>  
  4. </MODULE>  

在ReadRelayPrefsFile()中读取sRelayPrefs中配置并解析出分发列表,并对每一个分发配置中的source配置创建RelaySessionCreator开启分发,并加入到sSessionQueue中,RTSPSourceInfo::RelaySessionCreator::Run() 再通过RTSPSourceInfo::RunCreateSession()开始DESCRIBE/SETUP/PLAY拉取数据,RTSP流程成功后,再配置RTP数据分发的地址,将RTP数据推送至分发列表(即destination列表与source列表同一级)中,即实现了Darwin文档中所述的先拉后推模式,那么我们如何实现服务器基于客户端请求的全拉模式(On Demand)转发,在后续的文档中将推出。

 

那么如何实现推模式的转发呢,这个也很简单,而且有现成的代码可以用,在Darwin中的QTSSReflectorModule接受来自live555的DarwinInjector通过Annonce/SETUP(push mode)/PLAY过程,模拟前端设备,推送视频流至Darwin,Darwin再将每一个客户端的请求加入到QTSSReflectorModule中ReflectorSession的Output列表中,进行分发,即可实现先推后拉模式的转发,那么如何实现On Demand方式的先推后拉,我们在后面的文章中也会推出,并会附上部分代码,敬请期待!

这篇关于在EasyDarwin进行实时视频转发的两种模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734042

相关文章

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.