关于push和pull模式的说明

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

最近好像很多人关注网络数据流的时时播放.要求延时小.所以大家考虑使用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

 

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

相关推荐

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

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

metal的博客 704

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的接口

qq_40388552的博客 5929

nmap、X-Scan漏洞扫描和Metasploit中用永恒之蓝漏洞入侵靶机并上传冰河

利用nmap、X-Scan扫描靶机的漏洞,在Metasploit中用扫描出的永恒之蓝漏洞入侵靶机,建立连接后上传冰河木马控制靶机,最后用冰河陷阱清除靶机的冰河木马,记一次完整的入侵控制实验。

m0_59302403的博客 4405

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

官方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的博客 517

【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞

【代码】【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞。

weixin_41369892的博客 901

mtk-drm初始化

mtk-drm初始化走读

zhexingsunba的博客 4930

STM32通用IO口原理和八种IO口模式学习

1.GPIO基本结构 来自官网数据书册介绍: Each of the general-purpose I/O ports has two 32-bit configuration registers (GPIOx_CRL,GPIOx_CRH), two 32-bit data registers (GPIOx_IDR, GPIOx_ODR), a 32-bit set/resetregister (GPIOx_BSRR), a 16-bit reset register (GPIOx_BRR) an

SSSS的博客 5352

大规模SoC芯片Hierarchical Flow Calibre LVS教程

大规模SoC芯片Hierarchical Flow Calibre物理验证LVS实现教程

weixin_37584728的博客 1200

面试官:RocketMQ 的推模式和拉模式有什么区别?

大家好,我是君哥。 RocketMQ 消息消费有两种模式,PULL 和 PUSH,今天我们来看一下这两种模式有什么区别。 PUSH 模式 首先看一段 RocketMQ 推模式的一个官方示例: publicstaticvoidmain(String[]args)throwsInterruptedException,MQClientException{ Tracertracer=initTracer(); DefaultMQPushConsumerconsum...

zjj2006的专栏 3243

CMOS锁相环核心:四种鉴频鉴相器(PFD)结构深度剖析与选型指南

本文深入剖析了CMOS锁相环中四种鉴频鉴相器(PFD)的结构与性能,包括传统RS触发器型、非时钟型、预充电型和边沿触发型PFD。通过详细的电路分析、实测数据和工程案例,提供了PFD选型的实用指南,帮助工程师根据速度、功耗和精度需求选择最优方案,提升锁相环设计效率。

weixin_42530458的博客 587

2026年算法工程师常见面试简答题

本文摘要:文章系统梳理了机器学习与深度学习中的30个核心概念,涵盖模型优化、评估指标、经典算法和大模型应用等关键知识点。主要内容包括:1)过拟合与欠拟合的成因及解决方法;2)偏差-方差权衡原理;3)数据划分与交叉验证策略;4)分类/回归任务评估指标选择;5)逻辑回归、决策树、SVM等传统算法解析;6)梯度下降优化与正则化技术;7)CNN、RNN、Transformer架构对比;8)Embedding表示与RAG技术。特别强调面试高频考点如XGBoost改进、注意力机制原理等,并给出实际工程中的解决方案建议,

不务正业的猿 349

GPIO八种配置模式

Input floating:浮空输入,此模式的IO口输入引脚电平不确定,可能是低电平0或高电平1; Input pull-up:上拉输入,此模式的IO口输入引脚电平为高电平; Input pull-down:下拉输入,此模式的IO口输入引脚电平为低电平; Analog input:模拟输入,采集外部模拟电压,此时连接在ADC模块下; Output open-drain:开漏输出,此模式IO口无法输出高电平,只能输出低电平; Output push-pull:推挽输出,此模式可以输出高电平和低电平

CC_Lsh的博客 747

C#跨平台制图新纪元:Mapsui,一库在手,地图我有

深入学习Mapsui的渲染机制,定制属于你的地图样式,无论是颜色、图标还是文字,都可以随心所欲。

java专栏 1455

Java push和pull生产模式

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

weixin_41202047的博客 161

量化交易 米筐 案例:市值因子选股策略

案例:市值因子的选股策略 1.结果 获得超额收益 年化 49% 2. 从股票中选择市值小的股票 选定财务数据筛选 进行每日调仓(多因子选股调仓 周期频率会小一些) 3. 代码 估值有关指标 # 在沪深300股票中,选出市值比较小的10只股票 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。 def init(context): # 沪深300组合 stocks = index_components('000300.XSHG') # 沪深3

廷益_飞鸟的博客 2311

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MVC中的pull和push

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

encina_china的博客 450

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

gitblog_00097的博客 494

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

java_beautiful的博客 178

RocketMQ 消费端PUSH 模式详解

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

bingfengxiyang703的博客 1694

ZeroMQ的几种模式和使用场景

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

ch_majia的博客 3553

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

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

m0_69818080的博客 1109

RocketMQ 消费模式

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

果酱 の 博客 1633

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

老码农重操旧事业 522

python与zmq系列(4)

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

一新新的小白的博客 1189

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值