关于push和pull模式的说明

SpringCloud 微服务监控方案sentinel + spring boot admin SpringCloud 微服务监控方案sentinel + spring boot admin 前言:项目基于springcloud框架,服务注册中心使用的是Eureka spring boot admin 完整构建过程 只需要搭建一个spring boot admin客户端 所需依赖 spring-cloud-starter-netflix-eureka-client将spring boot admin客户端注册到Eureka spring boot admin 底层还是调用的actuator的接口 阅读详情

最近好像很多人关注网络数据流的时时播放.要求延时小.所以大家考虑使用push模式.
确实,push模式是针对live streaming video.pull针对的是文件的播放.
可是麻烦的是,如果想使用push播放,并且需要splitter filter的话,就会遇到麻烦了.
(如果,只是播放video,直接连接到decoder filter的话,应该没有这个麻烦),因为
并不是所有的splitter filter支持push模式.为什么呢?
下面从基本说起.

pull模式:
需要的是IAsyncReader接口.速度的控制是splitter filter代替了source filter.这是
个标准的directshow的机制.outpin必须同意splitter filter的allocator properties.
这就是为什么没有办法改变传递的数据块的大小了(虽然可以修改每个的大小,可是没有
办法改变数据的总大小,就是为什么要求的数据一定会是2的次方了32768*6,16384*12等等).
在和splitter的连接过程中,splitter需要读一些数据来判断,从而决定流的类型,长度,
和一些相关的信息.连接完后,filter graph开始运行,splitter filter会继续从source
filter要求数据,使用的是 IAsyncReader::SyncReadAligned() .就完成了render工作.

push模式:
流的控制是source filter完成.在开始连接时,splitter是不会要求数据,所有的判断操作
都转交给decoder处理了.render后,就是数据的传输了,使用CBaseOutputPin::GetDeliveryBuffer(),
在CBaseOutputPin::Deliver() ,就可以了.但是,最重要的是,push模式的CBaseOutputPin
要求IMemInput接口的支持!可惜的是,不是所有的splitter都有该接口.
(可以在“CBaseOutputPin Class”这章中,看到:
“Connects only to input pins that support the IMemInput interface.” ,CSourceStream
是从CBaseOutputPin继承的,所以有同样的问题)

大家可以看到,这是两个不同的机制.所以就造成了刚才的麻烦.不是每个splitter会支持
这两个模式的.不支持push模式的splitter,会单方面的要求IAsyncReader的支持,可是你的
source filter却不支持,怎么办???没有办法...结果就是没有办法render成功了.

做MPEG2的朋友就有福气了,对于mpeg2的播放,微软提供了两个filter来支持source filter.
MPEG-2 Demultiplexer:这个是支持push模式的filter了.大家可以看看文档中说的:
The MPEG-2 Demultiplexer (Demux) operates on MPEG-2 transport and program streams
that are delivered in push-mode. (For demultiplexing MPEG-2 program streams that
are delivered in pull-mode, such as in file-playback scenarios, use the MPEG-2 Splitter filter.)
MPEG-2 Splitter filter:这就是基本的splitter filter了.

做MPEG1的朋友们只好使用替代方法了:
如果在pull模式下,把流长度信息该为infinite的话,就可以从播放时间上等同于push模式.
虽然没有象push那样时时,数据的递交权不在自己的手中,可是在没有更好的splitter filter
时,还是个不错的替代方法,至少我做到了1秒的延时(应该不至于没法忍受:)).
如果有谁找到了支持push的MPEG1的splitter filter,希望能够告之大家...谢谢了:)


afterain
afterain@263.net
2001.12.21

 

gstreamer 调度模式pull/push gst将实际应用的每个功能模块抽象成元件,元件之间的连接是通过绑定在上面的pad来实现的。所以需要了解下具体数据是如何从一个元件流向另一个元件的。数据的流向可以从上游流向下游, 也可以下游去上游取。这两种方式分别对应的就是push mode pull mode。 6.1 push模式(以视频解码显示为例) 大部分情况下都是工作在push mode。 所以重点介绍下 push mode,所谓的流向 实际上将上游元件的buffer指针传入到 下游元件的特定 函数, 这个函数就是 元件pad... 阅读详情

相关推荐

面试官:RocketMQ 地推模式模式有什么区别?

RocketMQ 消息消费有两种模式PULL PUSH,今天我们来看一下这两种模式有什么区别。 PUSH 模式 首先看一段 RocketMQ 推出模式的一个官方示例: public static void main(String[] args) throws InterruptedException, MQClientException { Tracer tracer = initTracer(); DefaultMQPushConsumer consumer = new De

m0_69305074的博客 530

Nginx-rtmp模块实现流媒体play、pushpull功能

官方wiki:https://github.com/arut/nginx-rtmp-module#readme Nginx rtmp功能特点1. 支持音视频直播2. 支持flv/mp4视频格式,输入可以是文件或者HTTP流3. 支持两种流的分发模式 pushand pull4. 可以将直播流录制成flv文件5. H264/AAC编码6. 支持在线转码...

weixin_33801856的博客 514

ZeroMQ模式对决:如何选择REQ/REP、PUB/SUB还是PUSH/PULL

本文深入解析ZeroMQ的三种核心通信模式(REQ/REP、PUB/SUB、PUSH/PULL),对比其性能、适用场景及底层机制,帮助开发者在分布式系统中做出高效选择。通过实际代码示例性能测试数据,展示如何根据需求选择最佳模式,提升异步消息传递效率。

metal的博客 702

bloomberg用法 固定收益_干货 | 日语高考高频考点:助词を的用法

在日语高考题中,第二大题综合知识运用板块,16-20题固定考察日语的助词的使用。很多同学反映说:高考日语最难学的部分就是助词了。因为中文的结构中是没有助词成分,同时助词的用法也挺多,所以经常容易搞混。日语是黏着语,需要助词作为媒介来连接没有关联的单词。虽然助词的用法很多,并且有的点还比较复杂,但是考法其实相对比较固定。我们在这里整理助词的高频考点,结合例句,帮助同学们加深记忆。「を」的主要用法有两...

weixin_39942992的博客 513

PullPush的关系以及区别

2.而在Push模式中,数据的提供者主动将数据推送给数据的接收者,无需接收者主动请求。1.在Pull模式中,数据消费者主动请求并接收数据,数据持有者被动地响应这些请求。它们描述了数据生产者(或持有者)数据消费者之间是如何通讯的。PullPush是数据交互的两种基本方式。BrokerrConsume交互方式不同。RabbitMQ 采用push的方式。它们反映了数据流动的方向主动性。kafka采用pull的方式。

qq_68534248的博客 3580

git pull & git push的详细使用

git pull & git push的详细使用 git pull

matafeiyanll的博客 3万+

Java pushpull生产模式

我整理的一些关于【数据】的项目学习资料(附讲解~~)大家一起分享、学习一下:https://d.51cto.com/eDOcp1Java PushPull生产模式的实现 在软件开发中,PushPull是两种常见的生产模式。在这里,我们将深入了解如何在Java中实现这两种模式,以便于你更好地理解它们的用途实现方法。...

weixin_41202047的博客 159

MVC中的pullpush

(原文: http://www.guyrutenberg.com/2008/04/26/pull-vs-push-mvc-architecture/)   在 MVC 中的 PushPull 主要是用来描述 View Controller 之间的关系。   Push 模式, controller 来解析用户的行为并且产生相应的数据,并将数据推送到 view ...

encina_china的博客 448

ZeroMQ消息模式深度解析:REQ/REP、PUB/SUB、PUSH/PULL实战指南

ZeroMQ是一个强大的消息队列库,提供了多种灵活的消息模式,帮助开发者构建高效的分布式系统。本文将深入剖析三种核心消息模式——REQ/REP(请求/应答)、PUB/SUB(发布/订阅)PUSH/PULL(推拉),并通过实战案例展示它们的应用场景最佳实践。 ## 一、REQ/REP:简单可靠的请求应答模式 REQ/REP模式是ZeroMQ中最基础也最常用的消息模式,它实现了经典的请求-应答

gitblog_00097的博客 491

RocketMQ的push消费方式实现的简直不要太聪明

所以从以上的分析可以看出,RocketMQ对于push的消费方式的实现是基于长轮询机制来实现的,同时平衡了时实压力,这其实就很nice了。最后我想说一句,其实不论是pull还是push,又或是轮询长轮询,其实都是一种理论或者说是一种思想,不单单是MQ的东西,就比如在Nacos中,也使用了push长轮询机制。但是这些理论在不同产品的具体实现,实现方式可能不太一样,但都是大同小异,所以当你懂了这些思想,再看其它框架的源码,其实就很容易了。...

java_beautiful的博客 174

RocketMQ 消费端PUSH 模式详解

一.简介 从这一期开始,我们对RocketMQ进行源码分析,我们知道,RocketMQ消费分为两种模式pulllpushpull即消费者客户端主要向服务端拉取消息,push模式为服务端主动将消息推到客户端,这次我们从源码的角度分析下push模式的实现 二.问题分析 先简单分析下,什么为推? 我们知道设计模式中有一个模式叫监听器模式,实际上很多框架的实现...

bingfengxiyang703的博客 1690

ZeroMQ的几种模式使用场景

ZeroMQ也看了几天了,感觉这个库就是为我而生的,一直很讨厌封装底层socket,这个库的出现,的确对于通信的基础工作减轻了很多。ZeroMQ一共有以下几种模式: PUB - SUB REQ - REP REQ - ROUTER DEALER - REP DEALER - ROUTER DEALER - DEALER ROUTER - ROUTER PUSH - PULL PA...

ch_majia的博客 3547

【设计模式】观察者模式学习小结

观察者模式,本质是一个一对多的消息通知模式。即被观测者状态发生改变(触发事件)时,需要通知它所有的观察者。而观察者会对这种状态改变做出响应。

m0_69818080的博客 1105

RocketMQ 消费模式

RocketMQ消费模式解析:PushPull的真相 RocketMQ的消费模式看似简单实则巧妙。它表面上提供推(Push)拉(Pull)两种模式,实际上PushConsumer是通过长轮询机制实现的"伪推"模式,底层仍是拉取。Push模式封装了复杂的拉取逻辑,让开发者只需关注消息处理,适合大部分常规场景;Pull模式则提供了更灵活的消费控制能力,适合批量处理、精准控制等特殊需求。

果酱 の 博客 1603

Upload QPE data to cloud

DataSender & DataReceiver DataSender (“DS”) and DataReceiver (“DR”) are a pair of modules to upload QPE data to cloud. #mermaid-svg-JeVgdt9mDorL27hd .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;colo

老码农重操旧事业 520

pythonzmq系列(4)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KWSY2008/article/details/49490813        今天为大家介绍push/pull模式,这是一个什么模式呢?战争时期,食物紧缺,...

一新新的小白的博客 1188

Asp.Net中使用水晶报表(下)

使用PUSH模式   我们采用下面的几步使用Push模式执行水晶报表:  1. 设计一个DataSet  2. 创建一个.rpt文件同时将其指定给上一步建立的DataSet。  3. 在aspx页面中拖放一个CrystalReportViewer控件同时将其前面的rpt文件建立联系。  4. 在代码中访问数据库并把数据存入DataSet  5. 调用DataBind方法。   设计一个DataS

1532
上一篇: 网络播放器的补充
下一篇: 网络播放器
capboy
博客等级 码龄26年 15粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值