2017-05-04 2 views
2

파이썬으로 네트워크 비디오 스트림을 캡처하고 표시하려고합니다. 다음 명령을 사용하여 스트림이 생성되었습니다 (내 랩톱에서).파이썬으로 gstreamer 네트워크 비디오 캡처하기

gst-launch-1.0 v4l2src ! videorate ! video/x-raw,framerate=2/1,width=640,height=480 ! x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=5000 

UDP 카메라는 웹캠 입력을 받아 UDP 포트를 통해 스트리밍합니다. 나는 스트림을 캡처하고 다음 명령을 사용하여 표시 할 수 있습니다 : 지금은 파이썬 스크립트와 같은 (캡처) 할 노력하고 있어요

gst-launch-1.0 udpsrc port=5000 ! "application/x-rtp, payload=127" ! rtph264depay ! avdec_h264 ! xvimagesink sync=false 

하지만 부족하지.

import gi 
gi.require_version('Gst', '1.0') 
from gi.repository import Gst 

udpPipe = Gst.pipeline("player") 
source = Gst.ElementFactory.make('udpsrc', None) 
source.set_property("port", 5000) 
source.set_property("host", "127.0.0.1") 

rdepay = Gst.ElementFactory.make('rtph264depay', 'rdepay') 
vdecode = Gst.ElementFactory.make('avdec_h264', 'vdecode') 
sink = Gst.ElementFactory.make('xvimagesink', None) 

udpPipe.add(source, rdepay, vdecode, sink) 
gst.element_link_many(source, rdepay, vdecode, sink) 
udpPipe.set_state(gst.STATE_PLAYING) 

내가 점점 오전 오류는 다음과 같습니다 :

/usr/lib/python2.7/dist-packages/gi/overrides/Gst.py:56: Warning: /build/glib2.0-prJhLS/glib2.0-2.48.2/./gobject/gsignal.c:1674: parameter 1 of type '<invalid>' for signal "GstBus::sync_message" is not a value type 
    Gst.Bin.__init__(self, name=name) 
/usr/lib/python2.7/dist-packages/gi/overrides/Gst.py:56: Warning: /build/glib2.0-prJhLS/glib2.0-2.48.2/./gobject/gsignal.c:1674: parameter 1 of type '<invalid>' for signal "GstBus::message" is not a value type 
    Gst.Bin.__init__(self, name=name) 
Traceback (most recent call last): 
    File "getUdp.py", line 13, in <module> 
    source = Gst.ElementFactory.make('udpsrc', None) 
    File "/usr/lib/python2.7/dist-packages/gi/overrides/Gst.py", line 217, in make 
    return Gst.ElementFactory.make(factory_name, instance_name) 
TypeError: unbound method fake_method() must be called with ElementFactory instance as first argument (got str instance instead) 

어떤 아이디어가 여기 내 코드는? :-(

+0

. 난 당신이 볼 am Python 2.7을 사용한다. I. 파이썬 3 환경에서 Gst를 테스트 해 보았습니다. 이제 파이썬 2 응용 프로그램에서 구현하고이 오류가 발생했습니다. 나는 이것이 어떻게 고정 될 수 있는지 아직 확신하지 못한다. 하지만 어쨌든 응용 프로그램을 Python 3에 이식 할 계획이었습니다. 그러나 그것은 시간이 걸릴 것입니다. 그것이 작동하고 나는이 링크를 잊어 버리지 않았다면 나는 당신에게 업데이트를 줄 것이다. – exhuma

답변

2

또한 명시 적으로 Gst.init 모두 파이썬 2.7과 3.5으로 내 시스템에 xvimagesink 창을 팝업 문제.

다음 코드를 해결 호출 (스트레칭)는 오늘. 데비안 9.3에서 같은 오류가 발생했습니다.

#!/usr/bin/python 
import sys 
import gi 
gi.require_version('GLib', '2.0') 
gi.require_version('Gst', '1.0') 
from gi.repository import GLib, Gst 

Gst.init(sys.argv) 

udpPipe = Gst.Pipeline("player") 
source = Gst.ElementFactory.make('udpsrc', None) 
source.set_property("port", 5000) 
#source.set_property("host", "127.0.0.1") 
caps = Gst.caps_from_string("application/x-rtp, payload=127") 
source.set_property("caps", caps) 

rdepay = Gst.ElementFactory.make('rtph264depay', 'rdepay') 
vdecode = Gst.ElementFactory.make('avdec_h264', 'vdecode') 
sink = Gst.ElementFactory.make('xvimagesink', None) 
sink.set_property("sync", False) 

udpPipe.add(source, rdepay, vdecode, sink) 

#Gst.element_link_many(source, rdepay, vdecode, sink) 
source.link(rdepay) 
rdepay.link(vdecode) 
vdecode.link(sink) 

udpPipe.set_state(Gst.State.PLAYING) 

GLib.MainLoop().run() 

가 나는 Gst.init를 호출하고 PyGObject와 파이썬 스크립트에 GST-발사 명령 줄을 변환 주회 돌이를 실행하는 것이 필요하다 생각합니다. 난 그냥 같은 문제로 실행했습니다

관련 문제