GStreamer学习三(延迟)

2023-05-16

1、延迟
延迟(即latency)是在时间戳0处捕获的样本到达接收器所花费的时间此时间是根据流水线的时钟测量的。对于只有包含与时钟同步的接收器元素的流水线,latency始终为0,因为没有其他元素延迟缓冲区。对于实时源的管道,必须引入延迟,这主要是因为实时源的工作方式。考虑一个音频源,它将在时间0开始捕获第一个采样。如果该源以44100Hz的频率一次推送具有44100个采样的缓冲区,由于缓冲区的时间戳为0,而现在是时钟的>= 1(单位:44100采样时间),接收器将丢弃此缓冲区。因为为时已晚,在接收器中没有任何延迟补偿的情况下,所有缓冲区将被丢弃。
 
在以下情况下情况变得更加复杂:
  • 2个实时的SrcElement 连接到 2个具有不同延迟的 实时sinkElement
    • 具有同步实时预览的音频/视频捕获。
    • 由于效果(延迟,重采样器...)而增加了延迟
  • 1个活动源连接到2个活动接收器
    • firewire DV
    • RTP,由于抖动缓冲区而增加了延迟。
  • 混合实时源和非实时源方案。
    • 同步音频捕获的和非实时的播放。(配音,..)
  • 由于实时信号源提供了自己的时钟,因此接收器中的时钟从动。
要在上述情况下执行所需的延迟校正,我们必须开发一种算法来计算管道的全局延迟。该算法必须是可扩展的,以便可以优化运行时的延迟。还必须有可能根据特定的应用程序需(所需的最小延迟)来禁用或调整算法。

2、延迟的必要性

我们显示一些示例来演示典型捕获管道中的延迟问题。
例1
音频捕获/播放管道。
  • asrc:音频源,提供时钟
  • asink音频接收器,提供时钟
 
  • NULL→READY:
    • asink:  NULL→READY: probes device, returns  SUCCESS
    • asrc:  NULL→READY: probes device, returns  SUCCESS
  • READY→PAUSED:
    • asink:  READY:→PAUSED open device, returns  ASYNC
    • asrc:  READY→PAUSED: open device, returns  NO_PREROLL
  • PAUSED→PLAYING : asrc clock selected because it is the most upstream clock provider. asink can only provide a clock when it received the first buffer and configured the device with the samplerate in the caps.
    • asink:  PAUSED:→PLAYING, sets pending state to  PLAYING, returns  ASYNC because it is not prerolled. The sink will commit state to  PLAYING when it prerolls.
    • asrc:  PAUSED→PLAYING: starts pushing buffers.
  • since the sink is still performing a state change from  READY→PAUSED, it remains  ASYNC. The pending state will be set to  PLAYING.
  • The clock starts running as soon as all the elements have been set to  PLAYING.
  • the source is a live source with a latency. Since it is synchronized with the clock, it will produce a buffer with timestamp 0 and duration D after time D, ie. it will only be able to produce the last sample of the buffer (with timestamp D) at time D. This latency depends on the size of the buffer.
  • the sink will receive the buffer with timestamp 0 at time  >= D. At this point the buffer is too late already and might be dropped. This state of constantly dropping data will not change unless a constant latency correction is added to the incoming buffer timestamps.
该问题是由于以下事实造成的:将接收器设置为(挂起)PLAYING 而不能进行回滚,这仅在活动管道中发生。
 
例2
音频捕获/视频捕获/播放的管道:我们同时捕获音频和视频,并使它们再次同步播放。
  • asrc:音频源,提供时钟
  • asink音频接收器,提供时钟
  • vsrc:视频源
  • vsink视频接收器
 
状态更改的发生方式与例1相同。两个接收器都以的挂起状态PLAYING和返回值结束,ASYNC直到它们接收到第一个缓冲区。为了使音频和视频同步播放,两个接收器必须补偿其源的延迟,但也必须使用完全相同的延迟校正。假设asrc的延迟为20ms,vsrc的延迟为33ms,则管道中的总延迟必须至少为33ms。这也意味着管道必须在33 - 20 = 13ms音频流上至少具有一个缓冲区,否则在音频接收器等待之前的样本播放时,音频src将不足。
例3
连接到活动接收器(vsink,sink)的非活动(文件)和活动源(vsrc)的组合示例。
 
状态更改的发生方式与例1相同。除了接收器能够预滚动(将其提交到PAUSED)。在这种情况下,接收器将没有延迟,但vsink将没有延迟。总延迟应该是vsink的延迟。
请注意,由于存在实时源(vsrc),可以在接收器能够预滚动之前将管道设置为正在播放。如果不对实时源进行补偿,这可能会导致同步问题,因为应该在元素中进行配置,然后才能转到PLAYING
例4
非实时资源和实时资源的组合示例。非活动源连接到活动接收器,活动源连接到非活动接收器。
 
状态更改的发生方式与示例3相同。接收器将能够进行预滚动(将状态提交至PAUSED)。文件将无法预卷。接收器没有延迟,因为它没有连接到实时源。文件不执行同步,因此它不关心延迟。流水线中的总延迟为0。vsrc与接收器中的回放同步捕获。与例3一样,接收器只能PLAYING在成功预卷后设置为。
 
3、查看管道中的延迟
一个跟踪模块,它通过在源中注入自定义事件并在接收器中处理它们来确定从源到接收器的延迟。该元素支持跟踪整个管道延迟和每个元素延迟。默认情况下,仅跟踪管道延迟。'flags'参数可用于启用元素跟踪。
 
4、测试rtspsrc latency延迟效果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GStreamer学习三(延迟) 的相关文章

  • 攻防世界 web练习区

    目录 view source robots backup cookie disabled button weak auth simple php get post xff referer webshell command execution
  • 网络安全编程基础--使用结构体数组完成信息录入

    实验1 xff1a C语言基础实验 目录 实验1 xff1a C语言基础实验 实验步骤分析 xff1a 1 定义结构体 xff1a 2 信息录入 3 信息修改 4 信息展示 5 主函数编写 结果展示 xff1a 源代码 xff1a 实验设备
  • 服务端和客户端通信-TCP(含完整源代码)

    简单TCP通信实验 目录 简单TCP通信实验 分析 1 套接字类型 2 socket编程步骤 3 socket编程实现具体思路 实验结果截图 程序代码 实验设备 xff1a 目标系统 xff1a windows 软件工具 xff1a vs2
  • 汇编语言--实验四

    实验名称 xff1a BX 和loop的使用 一 xff1a 实验目的 学会使用 bx 和loop 使用debug练习一些简单的编程 练习使用debug调试汇编程序的方法 二 xff1a 实验内容及步骤 内容 xff1a xff08 1 x
  • 汇编语言--实验七

    实验名称 xff1a 寻址方式在结构化数据访问中的应用 一 xff1a 实验目的 学会寻址方式在结构化数据访问中的应用 xff1b 利用前面所学知识熟悉编程技巧 二 xff1a 实验内容及步骤 内容 xff1a xff08 1 xff09
  • 汇编语言--实验九

    实验名称 xff1a 根据材料编程 目录 实验名称 xff1a 根据材料编程 一 xff1a 实验目的 二 xff1a 实验内容及步骤 内容 xff08 1 xff09 步骤 xff08 1 xff09 结果 xff08 1 xff09 三
  • Visual Studio 2022 C++开发 (Win)配置教程

    前言 本文将讲解如何在Window系统下配置Visual Studio 2022版本的C 43 43 开发环境 步骤 下载并且安装Visual Studio Tools xff08 1 xff09 下载 Visual Studio Tool
  • template < class T> ,map和vector用法——恶补c++

    部分目录 template lt class T gt 是什么找到各素数因子map数组下用法map遍历map元素的默认值 vector 用法 template lt class T gt 是什么 template lt class T gt
  • 停车场寻车系统(识别车牌,手机app查询相关信息)

    停车场寻车系统 文章目录 停车场寻车系统前言一 手机app二 车牌识别三 数据查询总结 停车场寻车系统 前言 上个星期用了一周左右做了一个停车场寻车系统的项目 xff0c 可以识别车牌 xff0c 通过手机app查询车辆信息 一 手机app
  • K210+MLX90614红外测温

    红外测温 文章目录 红外测温前言一 MLX90614二 使用步骤总结 前言 K210随便找一个都行 一 MLX90614 这个模块之前的博客有介绍 xff0c 他是用IIC通信的 模块就不过多介绍了 xff0c 之间看代码吧 import
  • PHP mysql_connect()连接-已淘汰

    1 首先在mysql命令控制台新建数据库 mysql gt create database test Query OK 1 row affected 0 04 sec mysql gt use test Database changed m
  • STM32使用红外测温

    红外测温 文章目录 红外测温前言一 原理二 STM32代码1 MLX90614 c2 MLX90614 h 总结 前言 一 原理 红外测温的原理可以直接去看卖家的手册 xff0c 手册多余的话太多了 xff0c 知道他是IIC通信的就行了
  • Arduino——PAJ7620手势识别模块

    手势识别模块 文章目录 手势识别模块前言一 安装PAJ7620库二 代码 前言 在用arduino驱动这些模块得时候 xff0c 方法很简单 xff0c 先去管理库中找这个库 xff0c 如果有这个库 xff0c 然后下载这个库 xff0c
  • Arduino——正点原子sim800c模块

    sim800c 文章目录 sim800c前言一 arduino代码 前言 最近要做一个项目需要用到sim800c xff0c 就用arduino驱动一下吧 xff0c 用的是正点原子的sim800c 使用的时候最好使用12v1A供电 xff
  • Arduino——野火GPS模块

    GPS模块 文章目录 GPS模块前言一 Arduino代码 前言 手上还有一个GPS xff0c 用arduino做模块很方便 xff0c 打算和短信模块结合 xff0c 短信模块上次已经使用完成了 xff0c 这次学习一下GPS模块 看模
  • Arduino——GY39大气压、温湿度、光照模块

    GY39模块 文章目录 GY39模块前言一 模块介绍二 arduino代码 前言 前几天买东西的时候买了一个GY39 xff0c 这个模块集成了温湿度 xff0c 大气压 xff0c 海拔 xff0c 光照一体 xff0c 使用起来很方面
  • Arduino通过NRF24L01实现双机无线通信

    双机无线通信 文章目录 双机无线通信前言一 接线二 Arduino代码1 主机2 从机 总结 前言 无线通信对于做各种项目来说都很加分 xff0c 今天使用这个nrf模块进行无线通信 我原本是想用两个蓝牙的 xff0c 但是蓝牙有个缺点 x
  • STM32+ESP8266+机智云+DHT11数据上传

    机智云 文章目录 机智云前言一 工程的修改二 数据的上传1 标识符2 数据处理3 数据上传 三 app控制 前言 今天搞了一下机智云 xff0c 就想把温湿度发到app上去 xff0c 然后能够控制灯的开关 之前从来没有用过这个玩意 xff
  • 数据结构——线性结构(二)

    数据结构 文章目录 数据结构前言一 线性结构1 线性表2 线性表的特点 二 线性结构的存储形式1 顺序结构2 链式结构 前言 很早之前提到了数据结构 xff0c 上一篇博客简单介绍了什么是线性结构 xff0c 这篇博客简单做一个补充 常见的
  • 数据结构——顺序表(三)

    数据结构 文章目录 数据结构一 什么是顺序表二 顺序表的创建1 静态顺序表2 动态数据表 三 顺序表的初始化 销毁四 顺序表的插入1 尾插2 头插3 任意插入 总结 一 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线

随机推荐

  • PHP new mysqli()连接

    1 首先在mysql命令控制台新建数据库 mysql gt create database test Query OK 1 row affected 0 04 sec mysql gt use test Database changed m
  • 数据结构——链表(五)

    数据结构 96 文章目录 数据结构前言一 什么是链表二 实现单链表1 单链表的结构2 单链表的初始化3 单链表的插入4 遍历链表5 链表长度 总结 前言 接下来学习一下链表 xff0c 链表比数组用的更多 一 什么是链表 概念 xff1a
  • 数据结构——双向循环链表(八)

    数据结构 文章目录 数据结构前言一 双向循环链表初始化二 双向循环链表的插入遍历 三 双向链表的删除总结 前言 双向循环链表用的次数是最多的 xff0c 下面我们看一下双向循环链表的增删改查 一 双向循环链表初始化 双向循环链表不能出现NU
  • 数据结构——栈(九)

    数据结构 文章目录 数据结构前言一 栈的介绍二 栈的实现1 栈的结构2 栈的初始化3 进栈4 出栈5 栈的判断6 取栈顶元素7 栈的清空8 栈的销毁 总结 前言 栈是一种特殊的线性表 xff0c 只允许在固定的一端进行插入和删除元素的操作
  • 数据结构——队列(十)

    数据结构 文章目录 数据结构一 什么是队列二 队列的实现1 队列的结构2 队列的初始化3 入队4 出队6 队头队尾的获取 总结 一 什么是队列 队列 xff1a 只允许在一端进行插入数据操作 xff0c 在另一端进行删除数据操作的特殊线性表
  • ESP8266通过MQTT协议连接onenet云平台

    中国移动onenet平台 文章目录 中国移动onenet平台前言一 onenet平台二 ESP82661 完整代码2 联网代码3 连云代码4 数据处理 总结 前言 最近在弄onenet平台 xff0c 用arduino结合esp8266 x
  • Arduino串口提取数字(整型和浮点型)

    数据提取 文章目录 数据提取前言一 提取整型数据二 提取浮点型数据 前言 之前需要用32和ESP进行通信上传数据 xff0c 一直都用的都是数据上传然后处理成整型数据 xff0c 今天需要处理成浮点型数据所以就查了一下 xff0c 于是就记
  • vins-fusion环境配置、安装与测试

    本文主要介绍如何搭建vins fusion的运行环境 xff0c 以及解决vins fusion编译运行时遇到的环境冲突问题 xff0c 并在此基础上实现例程的运行 目录 一 安装OpenCV 3 4 111 1 配置依赖环境1 2 下载O
  • JS和JQuery监听滚动条事件

    网上查了一下 xff0c 找到两种js监听滚轮事件的方法 xff08 1 xff09 window onscroll 61 function xff08 2 xff09 document addEventListener 34 onscro
  • STM32使用中断及串口通信

    1 中断模式编程控制LED 采用中断模式编程 xff0c 当开关接高电平时 xff0c LED亮灯 xff1b 接低电平时 xff0c LED灭灯 单片机除了基本的连线外 xff0c 我们另外只接一只LED灯 使用外部中断的基本步骤如下 x
  • 用opencv打开图片及视频

    用opencv打开图片及视频 1 opencv的安装 参考文章http t csdn cn QO7dr 2 用opencv打开图片 建立code文件夹存放代码 xff0c 然后打开文件夹创建test1 cpp文件 在test1 cpp文件里
  • 【Keil】 Keil的搭建并配置,并编写简单的汇编程序

    Keil的搭建并配置 一 配置环境1 MDK的安装1 1 MDK5下载1 2安装 2 安装stm32 pack 二 Mdk使用配置技巧1 设置tab键为2个空格2 代码自动补齐3 语法动态错误检测4 右边距指示 三 编写 一个简单的汇编程序
  • 【stm32CubeMX】STM32F103c8t6串口通信

    stm32CubeMX STM32F103c8t6串口通信发送 39 hello windows 39 一 串口通信协议1 UART协议2 RS 2323 RS 485 二 USB转TTL三 配置CubeMX并建立工程四 串口通信实现五 k
  • 【STM32】基于SPI的OLED显示屏与DHT20温湿度采集显示数据

    STM32 基于SPI总线的OLED显示屏与DHT20温湿度采集显示数据 一 SPI通讯协议二 关于0 96英寸OLED模块三 硬件连接四 示例代码五 代码修改与撰写六 屏幕歌词滚动1 滚屏设置2 代码撰写 七 展示八 DHT20温湿度采集
  • 【STM32CubeMX】使用STM32F103C8T6输出PWM波形实现呼吸灯

    STM32CubeMX 使用STM32F103C8T6输出PWM波形实现呼吸灯 一 关于PWM二 Cube MX创建工程三 修改代码四 效果展示五 总结六 参考与代码下载 一 关于PWM 1 关于PWM 含义 PWM xff08 Pulse
  • 【STM32】基于HAL库使用最小系统板移植uCOS

    STM32 基于HAL库使用最小系统板移植uCOS 一 CubeMX建立工程模板二 下载uC OS III源码三 移植准备四 开始移植1 将uCOS文件添加到项目2 为bsp c和bsp h添加代码3 修改main c文件代码4 修改其余文
  • Ubuntu20.04打不开终端

    Ubuntu20 04打不开终端 下载xterm输入gnome terminal显示 xff1a Error constructing proxy for org gnome Terminal org gnome Terminal Fact
  • 串口DMA发送接收

    目录 一 DMA的基本介绍 1 DMA定义 2 原理 1 请求 2 响应 3 传输 4 结束 3 传送方式 1 停止CPU访问内存 2 周期挪用 3 DMA与CPU交替访问内存 4 DMA中断 二 新建cubemx项目 1 选择STM32F
  • Time Limit Exceeded的原因

    Time Limit Exceeded的原因及避免方法 荷叶田田 CSDN博客
  • GStreamer学习三(延迟)

    1 延迟 延迟 xff08 即latency xff09 是在时间戳0处捕获的样本到达接收器所花费的时间 此时间是根据流水线的时钟测量的 对于只有包含与时钟同步的 接收器 元素的流水线 xff0c latency 始终为0 xff0c 因为