Gstreamer的Python3错误

时间:2015-07-05 06:28:53

标签: python gstreamer

我跑:

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

在Raspberry Pi上运行:

#!/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()

在我的电脑上。我收到了从Raspberry流式传输的视频。 现在我想在我的计算机上编写一个python代码。我的代码是:

import java.util.*;
import java.util.*;

public class lalala {
    public static Scanner input;
    public static void main(String[] args) {
        input = new Scanner(System.in);

        System.out.print("Input array: ");
        String n = input.nextLine();
        String[] x= n.split("");

        int[] array = new int [x.length];
        for(int i=1;i<x.length;i++){ //this is the loop i want to ask
            array[i] = Integer.parseInt(x[i]);
        }

        System.out.println(Arrays.toString(array));     

    }
}

但是我收到以下错误:

  

(DO.py:3618):GStreamer-WARNING **:   gstpad.c:4555:store_sticky_event:粘性事件   错误的,得到了​​分段&#39;在&#39; caps&#39;

之前      

(DO.py:3618):GStreamer-WARNING **:   gstpad.c:4555:store_sticky_event:粘性事件   错误的,得到了​​分段&#39;在&#39; caps&#39;

之前

最诚挚的问候, Mostafa的

1 个答案:

答案 0 :(得分:0)

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

#!/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')