在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

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试