python 网络摄像头软件_Python GStreamer网络摄像头查看器

本文展示了如何使用Python和GStreamer在GTK窗口中显示网络摄像头的实时视频流,并探讨了如何捕获和保存当前帧的快照。通过修改GStreamer管道或利用GTK的功能来实现这一目标。
摘要由CSDN通过智能技术生成

我正在研究这个很好的例子,它在一个带有

python和GStreamer的GTK小部件中显示了一个网络摄像头输出:

#!/usr/bin/env python

import sys, os

import pygtk, gtk, gobject

import pygst

pygst.require("0.10")

import gst

class GTK_Main:

def __init__(self):

window = gtk.Window(gtk.WINDOW_TOPLEVEL)

window.set_title("Webcam-Viewer")

window.set_default_size(500, 400)

window.connect("destroy", gtk.main_quit, "WM destroy")

vbox = gtk.VBox()

window.add(vbox)

self.movie_window = gtk.DrawingArea()

vbox.add(self.movie_window)

hbox = gtk.HBox()

vbox.pack_start(hbox, False)

hbox.set_border_width(10)

hbox.pack_start(gtk.Label())

self.button = gtk.Button("Start")

self.button.connect("clicked", self.start_stop)

hbox.pack_start(self.button, False)

self.button2 = gtk.Button("Quit")

self.button2.connect("clicked", self.exit)

hbox.pack_start(self.button2, False)

hbox.add(gtk.Label())

window.show_all()

# Set up the gstreamer pipeline

self.player = gst.parse_launch ("v4l2src ! autovideosink")

bus = self.player.get_bus()

bus.add_signal_watch()

bus.enable_sync_message_emission()

bus.connect("message", self.on_message)

bus.connect("sync-message::element", self.on_sync_message)

def start_stop(self, w):

if self.button.get_label() == "Start":

self.button.set_label("Stop")

self.player.set_state(gst.STATE_PLAYING)

else:

self.player.set_state(gst.STATE_NULL)

self.button.set_label("Start")

def exit(self, widget, data=None):

gtk.main_quit()

def on_message(self, bus, message):

t = message.type

if t == gst.MESSAGE_EOS:

self.player.set_state(gst.STATE_NULL)

self.button.set_label("Start")

elif t == gst.MESSAGE_ERROR:

err, debug = message.parse_error()

print "Error: %s" % err, debug

self.player.set_state(gst.STATE_NULL)

self.button.set_label("Start")

def on_sync_message(self, bus, message):

if message.structure is None:

return

message_name = message.structure.get_name()

if message_name == "prepare-xwindow-id":

# Assign the viewport

imagesink = message.src

imagesink.set_property("force-aspect-ratio", True)

imagesink.set_xwindow_id(self.movie_window.window.xid)

GTK_Main()

gtk.gdk.threads_init()

gtk.main()

我想要做的是有一种方法来拍摄当前帧的快照并保存到磁盘.

我认为有两种方法可以做到:

– 一些gstreamer方法(但我想我至少应该修改管道)

– 用GTK本身以某种方式抓住图片

有什么暗示吗?

我没有使用gstreamer或gtk的经验,任何帮助都非常感激

非常感谢

毛罗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值