Gstreamer的Python3错误 [英] Python3 error with Gstreamer

查看:87
本文介绍了Gstreamer的Python3错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我跑步:

raspivid -t 999999 -w 1080 -h 720 -fps 25 -hf -b 2000000 -o - | \gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 \! gdppay ! tcpserversink host=serverIp port=5000

在Raspberry Pi上运行:

on the Raspberry Pi and run:

gst-launch-1.0 -v tcpclientsrc host=serverIp port=5000 \! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

在我的计算机上.我收到了Raspberry播放的视频现在我想在计算机上编写一个python代码,我的代码是:

on my computer. and I received the video streamed from Raspberry. now I want write a python code to do so in my computer.my code is :

#!/usr/bin/python3

from os import path

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

# Needed for window.get_xid(), xvimagesink.set_window_handle(), respectively:
from gi.repository import GdkX11, GstVideo


GObject.threads_init()
Gst.init(None)


class Player(object):
    def __init__(self):

        self.pipeline = Gst.Pipeline()

        self.tcpsrc = Gst.ElementFactory.make('tcpclientsrc','tcpsrc')
        self.tcpsrc.set_property("host",'192.168.1.12')
        self.tcpsrc.set_property("port",5000)

        self.gdepay = Gst.ElementFactory.make('gdpdepay', 'gdepay')


        self.rdepay = Gst.ElementFactory.make('rtph264depay', 'rdepay')

        self.avdec = Gst.ElementFactory.make('avdec_h264', 'avdec')

        self.vidconvert = Gst.ElementFactory.make('videoconvert', 'vidconvert')

        self.asink = Gst.ElementFactory.make('appsink', 'asink')
        self.asink.set_property('sync', False)
        #self.asink.set_property('emit-signals', True)
        #self.set_property('drop', True)

        self.pipeline.add(self.tcpsrc)
        self.pipeline.add(self.gdepay)
        self.pipeline.add(self.rdepay)
        self.pipeline.add(self.avdec)
        self.pipeline.add(self.vidconvert)
        self.pipeline.add(self.asink)

        self.tcpsrc.link(self.gdepay)
        self.gdepay.link(self.rdepay)
        self.rdepay.link(self.avdec)
        self.avdec.link(self.vidconvert)
        self.vidconvert.link(self.asink)
    def run(self):
        self.pipeline.set_state(Gst.State.PLAYING)

p = Player()
p.run()

但出现以下错误:

(DO.py:3618):GStreamer-警告**:gstpad.c:4555:store_sticky_event:粘性事件顺序错误,在大写字母"之前出现细分"

(DO.py:3618): GStreamer-WARNING **: gstpad.c:4555:store_sticky_event: Sticky event misordering, got 'segment' before 'caps'

(DO.py:3618):GStreamer-警告**:gstpad.c:4555:store_sticky_event:粘性事件顺序错误,在大写字母"之前出现细分"

(DO.py:3618): GStreamer-WARNING **: gstpad.c:4555:store_sticky_event: Sticky event misordering, got 'segment' before 'caps'

最好的问候,莫斯塔法(Mostafa)

Best Regards, Mostafa

推荐答案

我回答了我的问题:我替换了这段代码:

I answered My question: I replaced this code:

#!/usr/bin/python3

from os import path

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

# Needed for window.get_xid(), xvimagesink.set_window_handle(), respectively:
from gi.repository import GdkX11, GstVideo


GObject.threads_init()
Gst.init(None)


class Player(object):
    def __init__(self):

        self.pipeline = Gst.Pipeline()

        self.tcpsrc = Gst.ElementFactory.make('tcpclientsrc','tcpsrc')
        self.tcpsrc.set_property("host", '192.168.1.13')
        self.tcpsrc.set_property("port", 5000)

        self.gdepay = Gst.ElementFactory.make('gdpdepay', 'gdepay')


        self.rdepay = Gst.ElementFactory.make('rtph264depay', 'rdepay')

        self.avdec = Gst.ElementFactory.make('avdec_h264', 'avdec')

        self.vidconvert = Gst.ElementFactory.make('videoconvert', 'vidconvert')

        self.asink = Gst.ElementFactory.make('autovideosink', 'asink')
        self.asink.set_property('sync', False)
        #self.asink.set_property('emit-signals', True)
        #self.set_property('drop', True)

        self.pipeline.add(self.tcpsrc)
        self.pipeline.add(self.gdepay)
        self.pipeline.add(self.rdepay)
        self.pipeline.add(self.avdec)
        self.pipeline.add(self.vidconvert)
        self.pipeline.add(self.asink)

        self.tcpsrc.link(self.gdepay)
        self.gdepay.link(self.rdepay)
        self.rdepay.link(self.avdec)
        self.avdec.link(self.vidconvert)
        self.vidconvert.link(self.asink)

    def run(self):

        self.pipeline.set_state(Gst.State.PLAYING)
        Gtk.main()

p = Player()
p.run()

首先,我忘记将 Gtk.main()添加到 run 函数中.第二我将 self.asink = Gst.ElementFactory.make('appsink','asink')更改为 self.asink = Gst.ElementFactory.make('autovideosink','asink')

first, I forgotten to add Gtk.main() to the run function. second I changed self.asink = Gst.ElementFactory.make('appsink', 'asink') to self.asink = Gst.ElementFactory.make('autovideosink', 'asink')

这篇关于Gstreamer的Python3错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆