#!/usr/bin/pythonimport sys,osimport pygtk,gtk,gobjectimport pygstpygst.require("0.10")import gst def __init__(self): #.... # Code to create a gtk Window #.... self.player = gst.Pipeline("player") source = gst.element_factory_make("v4l2src","vIDeo-source") sink = gst.element_factory_make("xvimagesink","vIDeo-output") caps = gst.Caps("vIDeo/x-raw-yuv,wIDth=640,height=480") filter = gst.element_factory_make("capsfilter","filter") filter.set_property("caps",caps) self.player.add(source,filter,sink) gst.element_link_many(source,sink)
在此之后,我试图通过总线创建一个信号来侦听来自源或接收器的任何消息,以指示已发送或接收到新帧,以便可以保存它.
bus = self.player.get_bus() bus.add_signal_watch() bus.connect("message::any",self.save_file,"Save file")
save_file是我的回调,我想保存文件.
def save_file(self,bus,msg): print "SAVED A NEW file"
我有两个问题,
>如何调用此回调.消息:: any不起作用.
>调用此消息时,如何访问图像缓冲区.
更新(2012年4月12日):
几个链接供参考
> v4l的python接口.但它并没有为我工作.当我试图抓住12.04 Ubuntu时似乎崩溃了.
http://code.google.com/p/python-video4linux2/
>为感兴趣的人提供网络摄像头查看器代码.但这不是我想要的,因为它使用gst-launch并且不提供我想要的管道控制级别. http://pygstdocs.berlios.de/pygst-tutorial/webcam-viewer.html
您可以考虑几种可能性:
>在vIDeoink之前制作“tee”元素并将“multifilesink”与vIDeosink并行连接(你可能想要看一些图像编码器,如pngenc或jpegenc,并在multifilesink之前放置其中一个)
>像之前一样,但使用“appsink”,它允许您处理缓冲区并随心所欲地执行任何 *** 作
>如果要打开和关闭转储,请考虑使用“valve”元素
您可能希望在附加接收器上将“sync”属性设置为false(这会导致缓冲区尽快转储而不同步到时钟).考虑在tee之后添加一些队列(在ready-gt; paused过渡期间不会发生这种死锁).
总结以上是内存溢出为你收集整理的python – 从视频源(网络摄像头)发出新帧信号的Gstreamer消息全部内容,希望文章能够帮你解决python – 从视频源(网络摄像头)发出新帧信号的Gstreamer消息所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)