热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Gstreamer1.0返回的缓冲区(在python中)没有正确的偏移值

我正在尝试使用Gstreamer0.1转置代码以使用Gstreamer1.0。在旧版本的代码中(使用Gstreame

我正在尝试使用Gstreamer 0.1转置代码以使用Gstreamer 1.0。在旧版本的代码中(使用Gstreamer 0.1),回调函数(在解码新帧时调用)接收一个缓冲区,该缓冲区具有一个偏移量字段,据我所知,该字段表示帧号。在执行过程中,此偏移量从零开始,并且一直在增长。

在使用Gstreamer 1.0的代码中,接收到的缓冲区还具有一个offset字段,但它不会随时间变化,并且等于任意一个非常高的值。
dts,duration和offset_end字段在高值时也保持恒定,只有pts字段从低值开始并在执行期间增长。

我可能错过了几行代码(Gstreamer 1.0中需要,而Gstreamer 0.1中不需要),但是我找不到哪几行。

有人可以告诉我我在这里想念什么吗?

以下是使用Gstreamer 1.0的版本:

from utils import mksock
class Video():
""" Video stream from RU """
_PIPEDEF=[
"udpsrc name=src blocksize=1316 close-socket=false buffer-size=100000 ",# UDP video data
# "video/mpegts ","tsparse ",# parse the incoming stream to MPegTS
"tsdemux emit-stats=True ",# get pts statistics from the MPegTS stream
"queue ",# build queue for the decoder
# "video/x-h264 ","h264parse ","avdec_h264 max-threads=1 ","identity name=decoded ",# used to grab video frame to be displayed
"fakesink sync=false " # dump video frames from memory after all relevant processing is done
]
_pipeline = None # The GStreamer pipeline
_keepalive = None # Keepalive for video
_sock = None # Communicaion socket
def __init__(self,streamLibs):
[self._Gst,self._Gio,GLib] = streamLibs
def start(self,peer):
""" Start grabbing video """
# Create socket
self._sock = mksock(peer)
# Create G address for sending keepalive msg
Gpeer = self._Gio.Inetsocketaddress.new_from_string(peer[0],peer[1])
# Create G socket using socketfd
self._Gsock = self._Gio.Socket.new_from_fd(self._sock.fileno())
self._Gsock.set_keepalive(True)
# Create pipeline
self._pipeline= self._Gst.parse_launch("!".join(self._PIPEDEF))
# Set socket to get data from out socket
src = self._pipeline.get_by_name("src")
src.set_property("socket",self._Gsock)
# Catch decoded frames
decoded = self._pipeline.get_by_name("decoded")
decoded.connect("handoff",self._decoded_buffer)
# Start video streaming
srcpad = src.get_static_pad("udpsrc")
# Start the video pipeline
self._pipeline.set_state(self._Gst.State.PLAYING)
print 'Succeeded launching video stream pipeline...'
def _decoded_buffer(self,ident,buf):
""" Callback for decoded buffer """
# Make sure to convert timestamp to us
print("Bufer: pts/1000="+str(buf.pts/1000)) #Starts near zero and grows in time
print("dts/1000="+str(buf.dts/1000)) #Stays static at an arbitrary high value
print("duration/1000="+str(buf.duration/1000)) #Stays static at an arbitrary high value
print("offset="+str(buf.offset)) #Stays static at an arbitrary high value
print("offset_end="+str(buf.offset_end)) #Stays static at an arbitrary high value





推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
author-avatar
飞儿gxj_505
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有