三、Buffer has no PTS和runtime check failed

news2024/11/18 5:42:23

1 问题来源

1.1 Buffer has no PTS

我使用mp4mux或者qtmux的时候,偶尔会出现Buffer has no PTS问题。

PTS(时间戳)是用于标识音视频数据在时间轴上的位置的重要参数,缺少时间戳信息会导致无法确定数据在时间轴上的位置,从而无法正确的封装和处理。

在 GStreamer 中,DTS 表示“解码时间戳”(Decode Time Stamp)。DTS 是一个用于视频和音频数据流的时间戳,表示媒体数据流中每个样本的解码时间。每个样本都与一个时间戳相关联,它表示该样本应该在媒体时钟中播放的时间。

DTS 通常用于同步音视频,因为它可以告诉播放器何时应该将音频或视频样本解码并呈现给用户。在视频中,DTS 表示每一帧视频在解码后应该呈现的时间。在音频中,DTS 表示每个音频样本应该在什么时间播放。通常,媒体解码器会根据 DTS 对媒体样本进行解码,以确保样本在正确的时间播放。

需要注意的是,DTS 不同于 PTS(Presentation Time Stamp),PTS 表示样本应该在播放时呈现的时间,而 DTS 则表示样本应该在解码时呈现的时间。PTS 通常用于同步音视频和处理延迟问题。

使用DeepStream过程中,解析海康摄像头rtsp流时
PTS 有时无效
DTS = -1
Duration = -1

1.2 runtime check failed

也有可能是因为我的GStreamer版本的问题。下面这个警告来于英伟达的H264编解码插件(nvv4l2decoder、nvv4l2h264enc)。目前不清楚该警告和PTS关联情况,具体待测试。

(vpf-app:45070): GStreamer-WARNING **: 01:26:03.100: (../subprojects/gstreamer/gst/gstinfo.c:653):gst_debug_log_valist: runtime check failed: (object == NULL || G_IS_OBJECT (object))

(vpf-app:45070): GStreamer-WARNING **: 01:26:03.101: (../subprojects/gstreamer/gst/gstinfo.c:653):gst_debug_log_valist: runtime check failed: (object == NULL || G_IS_OBJECT (object))

(vpf-app:45070): GStreamer-WARNING **: 01:26:03.101: (../subprojects/gstreamer/gst/gstinfo.c:653):gst_debug_log_valist: runtime check failed: (object == NULL || G_IS_OBJECT (object))

(vpf-app:45070): GStreamer-WARNING **: 01:26:03.101: (../subprojects/gstreamer/gst/gstinfo.c:653):gst_debug_log_valist: runtime check failed: (object == NULL || G_IS_OBJECT (object))

因为没有发现具体影响,该插件也不开源,GStreamer源程序中暂时禁用相关函数。

请添加图片描述

2 网上搜索到的解决方案

2.1 OpenAI提供了几种方案

解决这个问题的方法是在实时流中添加时间戳信息。如果您使用的是GStreamer进行开发,可以使用相应的插件来添加时间戳信息,例如使用"identity"插件或"videotestsrc"插件中的"timestamp-mode"属性添加时间戳信息。另外,您还可以使用"queue2"插件来缓存数据并确保时间戳信息正确传递。

如果您的实时流确实没有时间戳信息,则需要在解码数据之前先添加时间戳信息。具体的方法可能因数据源的不同而有所不同,但一般来说,您可以使用当前系统时间或音视频帧的采样时间作为时间戳信息。

需要注意的是,实时流的处理和封装比较复杂,需要对数据的传输延迟、帧率、码率等因素进行合理的设置和优化,以保证数据的正确解码和封装。

  1. GStreamer mp4mux gives “Buffer has no PTS” error using custom appsrc 通过预测时间戳(文中的方法不稳定,元素运行时间与PTS时间存在变化,没有确定关系)。
  2. Gstreamer for Android Buffer has no PTS 通过h264parse设定时间戳的推断模式和启用插值的PTS处理。(好像只有缺失B帧的情况才有用)。
  gst_base_parse_set_infer_ts (GST_BASE_PARSE (bin->codecparse), TRUE);
  gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (bin->codecparse), TRUE);

3.,mp4mux和qtmux都会出现Buffer缺失PTS情况,使用Matroska媒体容器未出现(成功

  • mp4mux、qtmux 和 matroskamux 都是媒体容器格式的组件,用于将音频和视频数据打包成单个文件。它们的区别如下:

  • mp4mux:用于将音频和视频流打包成 MP4 文件格式。它通常用于在移动设备和流媒体服务中使用。

  • qtmux:用于将音频和视频流打包成 QuickTime 文件格式。它通常用于苹果设备和软件中。

  • matroskamux:用于将音频和视频流打包成 Matroska 文件格式,也称为MKV。它通常用于视频压制和数字储存设备。

  • 总的来说,这些组件的主要区别在于它们支持的容器格式不同。而每种容器格式又有其自身的特点和适用场景,需要根据具体的使用需求进行选择。

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

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

相关文章

Java单元测试浅析(JUnit+Mockito)

Java测试我们应该都遇到过,一般我们会被要求做单元测试,来验证我们代码的功能以及效率。 这里来和大家一起探讨下有关单于测试。 什么是单元测试? 是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般…

C/C++开发,无可避免的内存管理(篇四)-智能指针备选

一、智能指针 采用C/C开发堆内存管理无论是底层开发还是上层应用,无论是开发新手,还是多年的老手,都会不自觉中招,尤其是那些不是自己一手经历的代码,要追溯问题出在哪里更是个麻烦事。C/C程序常常会遇到程序突然退出&…

Idea启动多个SpringBoot项目的3种方案

​ 悟纤:师傅,你最近是哪去了,这上班都快1个月了,都没见你踪影,你这是上哪里去放纵去了吗? 师傅:徒儿,你说的这是啥话,是放松,不是放纵,为师严重…

axicom的测试文档

目录)SQLpython开放性业务题(二选一)完整代码SQL 问题描述 SQL, 请根据前一周各产品的总GMV将其分成五类:GMV Top 20%、20%-40%,40%-60%,60%-80%以及Bottom 20%的产品组,请计算这五…

【Java】创建多线程的四种方式

一、方式1:继承Thread类 步骤: 创建一个继承于Thread类的子类重写Thread类的run()方法 ----> 此线程执行的操作声明在方法体中创建当前Thread子类的对象通过实例对象调用start()方法,启动线程 ----> Java虚拟机会调用run()方法 注意…

QuickHMI Hawk R3 Crack

基于网络的 SCADA / HMI 系统 QuickHMI Hawk R3 QuickHMI是一个 100% 基于网络的SCADA/HMI 系统。 得益于HTML5、SVG和Javascript等现代网络技术,可视化可以在任何当前浏览器和设备中显示。作为浏览器的替代品,可以使用“独立查看器”和移动应用程序。 Q…

react react-redux学习记录

react react-redux学习记录1.原理2.怎么用呢2.1 容器组件2.2UI组件2.3 App.jsx3.简化3.1简写mapDispatch3.2 Provider组件的使用3.3整合UI组件和容器组件1.原理 UI组件:不能使用任何redux的api,只负责页面的呈现、交互等。 容器组件:负责和redux通信&…

Orcad原理图放置辅助线的方法

Orcad原理图放置辅助线的方法 设计当中,可以通过放置辅助线来标识信号方向或者对功能模块进行分块标识。 1)执行菜单命令“Place-Line”(快捷键“ShiftL”),激活放置状态。 2)在一个合适的位置单击鼠标左键…

零基础该如何转行Python工程师?学习路线是什么?

最近1年的主要学习时间,都投资到了 python 数据分析和数据挖掘上面来了,虽然经验并不是十分丰富,但希望也能把自己的经验分享下,最近也好多朋友给我留言,和我聊天,问我python该如何学习,才能少走…

字节前端必会面试题(持续更新中)

事件传播机制(事件流) 冒泡和捕获 谈一谈HTTP数据传输 大概遇到的情况就分为定长数据 与 不定长数据的处理吧。 定长数据 对于定长的数据包而言,发送端在发送数据的过程中,需要设置Content-Length,来指明发送数据的长度。 当…

前端面试题——性能优化 高频

目录 一、CDN的概念 二、CDN的原理 三、懒加载的实现原理 四、对节流与防抖的理解 五、实现节流函数和防抖函数 六、回流与重绘的概念及触发条件 七、如何避免回流与重绘? 八、如何对项目中的图片进行优化? 九、如何⽤webpack来优化前端性能&…

Python 简单可变、复杂可变、简单不可变、复杂不可变类型的copy、deepcopy的行为

copy模块:copy:浅拷贝deepcopy:深拷贝简单可变类型、复杂可变的copy()、deepcopy():简单不可变、复杂不可变类型的copy()、deepcopy():结论:对于简单类型的可变类型copy是深拷贝,改变了该拷贝变…

1.FFmpeg-音视频基础

专栏介绍基于最新的FFmpeg5.1.2版本讲解学习, 跟随博主一起学习ffmpeg: 本专栏学习流程为: FFmpeg安装、

Spring之AOP理解及使用

文章目录AOP是什么AOPSpring的通知类型1.Before通知2. AfterReturning通知3.AfterThrowing通知4. After通知5. Around通知动态代理JDK动态代理CGLib动态代理动态代理的代码展示AOP使用切面类的配置最后大家好,我是Leo!今天给大家带来的是关于Spring AOP的…

jsp学生成果管理系Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 学生成果管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…

分布式理论-学习笔记

1 分布式概述 分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。 2 系统模型 2.1 故障模型 Byzantine failure:节点可以任意篡改发送给其他节点的数据ADB:Byzantine fa…

Stacked hourglass networks for human pose estimation代码学习

Stacked hourglass networks for human pose estimation https://github.com/princeton-vl/pytorch_stacked_hourglass 这是一个用于人体姿态估计的模型,只能检测单个人 作者通过重复的bottom-up(高分辨率->低分辨率)和top-down&#xff0…

乐友商城学习笔记(十五)

无状态登陆原理 在服务器端保存session 无状态不需要session,把登陆状态保存在cookie中 jwtrsa token:登陆时, jwt oath2 jwt:头信息(jwt) 载荷(用户信息,签发人,签发时…

设备驱动模型--存储技术原理分析笔记 基于2.6.43内核

本文为读书笔记,详细内容参考《存储原理技术分析》1- 驱动模型2- 总线类型2.1- 重要数据结构总线bus_type 和 bus_type_private 互相可以找到对方struct bus_type {const char *name;struct bus_attribute *bus_attrs;struct device_attribute *dev_attrs;s…

2023软件测试工程师全新技术栈,吃透这些,起薪就是25k~

相信每个准备软件测试面试的同学,不管你是大学刚毕业,满心憧憬着进入公司实习、非计算机行业转行软件测试、自学测试就业还是培训后就业,都会面临着众多的疑问和不解,那就是该怎么走出着第一步,今天本文一次性告诉你&a…