GStreamer Basic tutorial 学习笔记(十三)

1 播放速度


GStreamer提供了两种改变播放速度的机制:步进事件(Step Events)和搜索事件(Seek Events)。步进事件允许跳过一定量的媒体,并改变随后的播放速度(只能为正值)。搜索事件还允许跳转到流中的任何位置,并设置正向和负向的播放速度。

1.1 改变播放速度

步进事件 :是一种更方便的改变播放速度的方式,因为创建它们所需的参数较少;但是,它们也有一些缺点,因此本教程使用搜索事件代替步进事件。步进事件只影响到sink(在管道的末端),因此只有在管道的其余部分能够支持以不同的速度运行时才起作用,而搜索事件会通过整个管道传播,因此每个元素都可以对其做出反应。步进事件的优点是它们的执行速度要快得多。步进事件也无法改变播放方向。

要使用这些事件,需要创建它们,并将其传递到管道中,其中它们向上传播,直到达到可以处理它们的元素。如果将事件传递到像playbin这样的容器元素中,它将简单地将事件传递给其所有的sink,这将导致执行多次搜索。常见的做法是通过video-sinkaudio-sink属性检索playbin的一个sink,并直接将事件馈送到sink中。

1.2 逐帧播放视频

逐帧播放是一种允许逐帧播放视频的技术。它通过暂停管道,然后发送步进事件来跳过每一帧。

2 函数与知识点


  1. GstEvent *gst_event_new_seek (gdouble rate, GstFormat format, GstSeekFlags flags, GstSeekType start_type, gint64 start, GstSeekType stop_type, gint64 stop) 功能:为给定的参数分配一个新的seek事件。
    说明:seek事件配置了从start到stop以rate给定的速度进行的管线播放,也称为播放段。起始和停止值以format表示。
    速率为1.0表示正常播放速率,2.0表示加倍速度。负值表示倒播。不允许速率为0.0的情况,而应该通过将管线暂停来实现。
    管道具有默认的播放段配置,其起始位置为0,停止位置为-1,速率为1.0。可以使用GST_QUERY_SEGMENT查询当前配置的播放段。
    start_type和stop_type指定如何调整播放段中当前配置的起始和停止字段。调整可以相对于最后配置的值进行。GST_SEEK_TYPE_NONE表示位置不应更新。
    当速率为正数且已更新起始位置时,播放将从新配置的起始位置开始。
    对于负数的速率,播放将从新配置的停止位置(如果有的话)开始。如果更新了停止位置,则对于负数的速率,它必须与-1(#GST_CLOCK_TIME_NONE)不同。
    不能相对于当前播放位置进行搜索,要实现这一点,需要将管道暂停,使用GST_QUERY_POSITION查询当前播放位置,并使用GST_SEEK_TYPE_SET将播放段的当前位置更新为所需位置。
    参数:
    rate - 新的播放速率
    format - 寻求值的格式
    flags - 可选的寻求标志
    start_type - 新的起始位置的类型和标志
    start - 新起始位置的值
    stop_type - 新停止位置的类型和标志
    stop - 新停止位置的值
  2. gboolean gst_element_send_event (GstElement * element, GstEvent * event) 功能:向元素发送事件。如果元素没有实现事件处理程序,事件将被推送到下游事件的任意链接的sink pad,或者向上游事件的任意链接的source pad
    cleanup:这个函数接管了提供的事件,所以如果你想在此调用之后重用事件,你应该使用gst_event_ref()
  3. GstEvent *gst_event_new_step (GstFormat format, guint64 amount, gdouble rate, gboolean flush, gboolean intermediate) 功能:创建一个新的步进事件。步进事件的目的是指示sink跳过指定量(以format表示)的媒体。它可用于逐帧播放视频或进行快速技巧模式。
    说明:不允许使用小于等于0.0的速率。如果要实现rate = 0.0的效果,请暂停管道,如果要实现rate < 0.0的效果,请使用seek事件来首先反转播放方向。
    flush标志将在开始步进操作之前清除管道中的任何待处理数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“深入解析Spring Boot:从入门到实战“

标题&#xff1a;深入解析Spring Boot&#xff1a;从入门到实战 摘要&#xff1a;本篇博客将深入解析Spring Boot&#xff0c;从入门到实战&#xff0c;帮助读者了解Spring Boot的核心概念、特性和使用方法&#xff0c;并通过示例代码演示如何使用Spring Boot开发一个简单的We…

Python3 unittest学习

Python3 unittest学习 unittest单元测试框架基本结构执行测试普通方式执行通过unittest模块执行 跳过测试与预期失败使用子测试区分测试迭代类与函数class unittest.TestCase(methodNamerunTest)用于运行测试的方法断言方法其他方法和属性 class unittest.IsolatedAsyncioTestC…

JVM五大内存模型

什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一个虚构出来的计算机&#xff0c;有着自己完善的硬件架构&#xff0c;如处理器、堆栈等。 JVM的作用 Java语言使用Java虚拟机屏蔽了与具体平台相关的信息&#xff0c;使得Jav…

Istio Pilot源码学习(三):xDS的异步分发

本文基于Istio 1.18.0版本进行源码学习 5、xDS的异步分发 DiscoveryService主要包含下述逻辑&#xff1a; 启动GRPC Server并接收来自Envoy端的连接请求接收Envoy端的xDS请求&#xff0c;从ConfigController和ServiceController中获取配置和服务信息&#xff0c;生成响应消息…

文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;64&#xff09;-- 算法导论6.5 3题 三、要求用最小堆实现最小优先队列&#xff0c;请写出 HEAP-MINIMUM、HEAP-EXTRACT-MIN、HEAP DECREASE-KEY 和 MIN-HEAP-INSERT 的伪代码。 文心一言&#xff1a; 以下是使用最小堆实现最小…

国内攻克OLED屏幕修复术,成本暴降2/3不用拆机换屏

连着许多年各家手机发布会&#xff0c;屏幕基本是会花大精力宣传的三大件之一 也对&#xff0c;无论是外观还是实际的视觉、操作体验&#xff0c;屏幕都是非常重要的一环。 屏幕素质越来越高&#xff0c;用着也的确更爽了&#xff0c;但也越来越不敢摔了。 普普通通的一块 60…

【传感器】应用充气泵方案的压力传感器

压力传感器&#xff0c;是指以膜片装置&#xff08;不锈钢膜片、硅酮膜片等&#xff09;为媒介&#xff0c;用感压元件对气体和液体的压力进行测量&#xff0c;并转换成电气信号输出的设备。其原理是半导体压电阻抗扩散压力传感器是在薄片表面形成半导体变形压力&#xff0c;通…

SNMP协议是什么?

SNMP协议是什么&#xff1f; 简单网络管理协议&#xff08;Simple Network Management Protocol&#xff0c;SNMP&#xff09;是由互联网工程任务组定义的一套网络管理协议。该协议是基于简单网关监视协议&#xff08;Simple Gateway Monitor Protocol&#xff0c;SGMP&#x…

ChatGPT助力校招----面试问题分享(十二)

1 ChatGPT每日一题&#xff1a;运算放大器与比较器的区别 问题&#xff1a;运算放大器与比较器的区别 ChatGPT&#xff1a;运算放大器和比较器都是电子电路中常用的模拟电路元件&#xff0c;但它们的设计和应用略有不同。下面是两者的主要区别&#xff1a; 功能不同&#xf…

TC3XX - MCAL知识点(十一):WDG EB-tresos配置说明与代码浅析

目录 1、概述 1.1、简介 1.2、Safety Watchdog 1.3、CPU Watchdogs 1.4、看门狗定时器的功能列表

服务器负载均衡算法有哪些

算法举例 服务器负载均衡算法是用于分配网络流量到多个服务器的策略&#xff0c;以实现负载均衡和提高系统性能。以下是一些常见的服务器负载均衡算法的详细说明&#xff1a; 轮询&#xff08;Round Robin&#xff09;算法&#xff1a; 轮询算法是最简单且常见的负载均衡算法之…

2.python设计模式【面向对象设计的SOLID原则 基础概念】

1.可放封闭原则 概念&#xff1a;一个软件实体如类、模块和函数应该对扩展开放&#xff0c;对修改关闭。即软件实体应该尽量在不修改原有代码的情况下进行扩展 2.里式替换原则 概念&#xff1a;所有引用父类的地方必须能透明地使用其子类的对象 3.依赖倒置原则 概念&#…

qs.stringify() 和 JSON.stringfy 的区别

qs 是 nodejs 的一个模块。qs.stringify()常用于对象转url参数&#xff1b;qs.parse()常用户url参数转对象&#xff1b; JSON.stringfy是js自带的方法。 JSON.stringify()用于对象转字符串&#xff1b;JSON.parse()用于字符串转对象&#xff1b; 两者都能进行序列化&#xff0c…

若依日志打印入参,返回参数,日志切面打印接口调用,出现一个接口多次调用的情况且,多次调用返回值为null,initBinder的原因。

使用若依Springboot项目&#xff0c;Controller均继承BaseController。 这里若依原日志切面不会打印接口请求参数&#xff0c;返回参数等信息&#xff0c;这里我做了修改。 修改后日志打印出现一个接口调用4次&#xff0c;5次的情况 15:08:58.342 [http-nio-8082-exec-4] INF…

DevOps系列文章之 Git知识大全

常用命令 其他参数 --inital-branch 初始化的分支 --bare 创建一个裸仓库&#xff08;纯 Git 目录&#xff0c;没有工作目录&#xff09; --template 可以通过模板来创建预先建好的自定义 git 目录 常见 Git 配置 用户名配置 git config --global user.name "yourname&qu…

Oracle压缩数据

Oracle压缩数据的处理基于数据库块&#xff0c;其本质上是通过消除在数据库块中的重复数据来实现空间节约&#xff0c;具体方法如下&#xff1a;比较数据块中包含的所有字段或记录&#xff0c;其中重复的数据只在位于数据块开始部分的记号表&#xff08;Symbol Table&#xff0…

基于Springboot的汽车租赁系统

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包括软件架构模式、整体功能模块、数据库设计。…

信息熵和决策树

在预测分析领域&#xff0c;决策树是可应用于回归和分类任务的算法之一 决策树背后的想法是&#xff0c;根据数据集中的特征对当时响应变量的贡献方式&#xff0c;递归地构建一个颠倒的树状结构。 在每次迭代中&#xff0c;将以使得所得模型最小化成本函数的方式选择特征。 该结…

cmder 使用简介

文章目录 1. cmder 简介2. 下载地址3. 安装4. 配置环境变量5. 添加 cmder 到右键菜单6. 解决中文乱码问题 1. cmder 简介 cmder 是一个增强型命令行工具&#xff0c;不仅可以使用 windows 下的所有命令&#xff0c;更爽的是可以使用 linux的命令, shell 命令。 2. 下载地址 …