将pygst程序从gstreamer 0.10移植到1.0的管道中出错

将pygst程序从gstreamer 0.10移植到1.0的管道中出错,gstreamer,python-gstreamer,gstreamer-0.10,Gstreamer,Python Gstreamer,Gstreamer 0.10,我正在将一个程序从pygst 0.10移植到1.0,我的管道有问题。我在0.10版本中使用并运行良好的管道是: udpsrc name=src ! tsparse ! tsdemux ! queue ! ffdec_h264 max-threads=0 ! identity ! xvimagesink force-aspect-ratio=True name=video 对于1.0版本,管道应类似于: udpsrc name=src ! tsparse ! tsdemux ! queue !

我正在将一个程序从pygst 0.10移植到1.0,我的管道有问题。我在0.10版本中使用并运行良好的管道是:

udpsrc name=src ! tsparse ! tsdemux ! queue ! ffdec_h264 max-threads=0 ! identity ! xvimagesink force-aspect-ratio=True name=video
对于1.0版本,管道应类似于:

udpsrc name=src ! tsparse ! tsdemux ! queue ! avdec_h264 ! videoconvert ! xvimagesink force-aspect-ratio=True name=video
代码是:

self.pipeline = Gst.Pipeline()

self.udpsrc = Gst.ElementFactory.make('udpsrc', 'src')
self.pipeline.add(self.udpsrc)
self.udpsrc.set_property("socket", Gio.Socket().new_from_fd(self.videosocket.fileno()))

self.tsparse = Gst.ElementFactory.make("tsparse", None)
self.pipeline.add(self.tsparse)

self.demux = Gst.ElementFactory.make('tsdemux', None)
self.pipeline.add(self.demux)

self.queue = Gst.ElementFactory.make('queue', None)
self.pipeline.add(self.queue)

self.h264 = Gst.ElementFactory.make('avdec_h264', None)
self.pipeline.add(self.h264)

self.videoconvert = Gst.ElementFactory.make('videoconvert', None)
self.pipeline.add(self.videoconvert)

self.imagesink = Gst.ElementFactory.make('xvimagesink', None)
self.pipeline.add(self.imagesink)

self.udpsrc.link(self.tsparse)
self.tsparse.link(self.demux)
self.demux.link(self.queue)
self.queue.link(self.h264)
self.h264.link(self.videoconvert)
self.videoconvert.link(self.imagesink)
我已设置调试标志,输出为:

GST_EVENT gstevent.c:709:gst_event_new_segment: creating segment event time segment start=0:00:00.000000000, stop=99:99:99.999999999, rate=1,000000, applied_rate=1,000000, flags=0x00, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999
0:00:06.241739369  5576      0x2f1c590 INFO                 basesrc gstbasesrc.c:2772:gst_base_src_loop:<src> marking pending DISCONT
0:00:06.241751688  5576      0x2f1c590 INFO        mpegtspacketizer mpegtspacketizer.c:770:mpegts_try_discover_packet_size: have packetsize detected: 188 bytes
0:00:06.241786466  5576      0x2f1c590 INFO              mpegtsbase mpegtsbase.c:726:mpegts_base_apply_pat:<mpegtsparse2-0> PAT
0:00:06.242321432  5576      0x2f1c590 INFO        GST_ELEMENT_PADS gstelement.c:897:gst_element_get_static_pad: found pad mpegtsparse2-0:sink
0:00:06.252539174  5576      0x2f1c590 INFO               GST_EVENT gstevent.c:628:gst_event_new_caps: creating caps event video/mpegts, systemstream=(boolean)true, packetsize=(int)188
0:00:06.252604078  5576      0x2f1c590 INFO               GST_EVENT gstevent.c:709:gst_event_new_segment: creating segment event time segment start=0:00:00.000000000, stop=99:99:99.999999999, rate=1,000000, applied_rate=1,000000, flags=0x00, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999
0:00:06.252655518  5576      0x2f1c590 INFO        mpegtspacketizer mpegtspacketizer.c:770:mpegts_try_discover_packet_size: have packetsize detected: 188 bytes
0:00:06.252693109  5576      0x2f1c590 INFO              mpegtsbase mpegtsbase.c:726:mpegts_base_apply_pat:<tsdemux0> PAT
0:00:06.252856437  5576      0x2f1c590 INFO        GST_ELEMENT_PADS gstelement.c:897:gst_element_get_static_pad: found pad tsdemux0:sink
0:00:06.252870522  5576      0x2f1c590 INFO               GST_EVENT gstevent.c:628:gst_event_new_caps: creating caps event audio/mpeg, mpegversion=(int)1
0:00:06.252894869  5576      0x2f1c590 WARN                 default descriptions.c:612:format_info_get_desc: Unexpected MPEG-1 layer in audio/mpeg, mpegversion=(int)1
0:00:06.252931277  5576      0x2f1c590 INFO        GST_ELEMENT_PADS gstelement.c:897:gst_element_get_static_pad: found pad tsdemux0:sink
0:00:06.252940534  5576      0x2f1c590 INFO               GST_EVENT gstevent.c:628:gst_event_new_caps: creating caps event video/x-h264, stream-format=(string)byte-stream, alignment=(string)nal
0:00:06.252997433  5576      0x2f1c590 INFO        GST_ELEMENT_PADS gstelement.c:646:gst_element_add_pad:<tsdemux0> adding pad 'audio_0041'
0:00:06.253006343  5576      0x2f1c590 INFO               GST_EVENT gstevent.c:709:gst_event_new_segment: creating segment event time segment start=0:00:00.000000000, stop=99:99:99.999999999, rate=1,000000, applied_rate=1,000000, flags=0x00, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999
0:00:06.253348125  5576      0x2f1c590 INFO        GST_ELEMENT_PADS gstelement.c:646:gst_element_add_pad:<tsdemux0> adding pad 'video_0040'
0:00:06.253394366  5576      0x2f1c590 INFO                 basesrc gstbasesrc.c:2785:gst_base_src_loop:<src> pausing after gst_pad_push() = not-linked
0:00:06.253408940  5576      0x2f1c590 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<src> error: Internal data flow error.
0:00:06.253413835  5576      0x2f1c590 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<src> error: streaming task paused, reason not-linked (-1)
0:00:06.253425400  5576      0x2f1c590 INFO        GST_ERROR_SYSTEM gstelement.c:1835:gst_element_message_full:<src> posting message: Internal data flow error.
0:00:06.253439614  5576      0x2f1c590 INFO        GST_ERROR_SYSTEM gstelement.c:1858:gst_element_message_full:<src> posted error message: Internal data flow error.
0:00:06.253513306  5576      0x2f1c590 INFO        GST_ELEMENT_PADS gstelement.c:766:gst_element_remove_pad:<tsdemux0> removing pad 'audio_0041'
0:00:06.253531993  5576      0x2f1c590 INFO        GST_ELEMENT_PADS gstelement.c:766:gst_element_remove_pad:<tsdemux0> removing pad 'video_0040'
('on_error():', (GError('Internal data flow error.',), 'gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:src:\nstreaming task paused, reason not-linked (-1)'))
0:00:06.253551147  5576      0x2f1c590 INFO                    task gsttask.c:300:gst_task_func:<src:src> Task going to paused
GST\u EVENT gstevent.c:709:GST\u EVENT\u new\u段:创建段事件时间段开始=0:00:00.000000000,停止=99:99:99.99999999,速率=1000000,应用速率=1000000,标志=0x00,时间=0:00:00.000000000,基数=0:00:00.000000000,位置0:00.000000000,持续时间99:99:99.999999
0:00:06.241739369 5576 0x2f1c590信息基础gstbasesrc.c:2772:gst_基础src_循环:标记待定不连续
0:00:06.241751688 5576 0x2f1c590信息mpegtspacketizer mpegtspacketizer.c:770:mpegts\u try\u discover\u数据包大小:是否检测到数据包大小:188字节
0:00:06.241786466 5576 0x2f1c590信息mpegtsbase mpegtsbase.c:726:mpegts_base_apply_pat:pat
0:00:06.242321432 5576 0x2f1c590信息GST_元素_焊盘gstelement.c:897:GST_元素_获取_静态_焊盘:找到焊盘mpegtsparse2-0:sink
0:00:06.252539174 5576 0x2f1c590信息GST_事件gstevent.c:628:GST_事件gstevent\u新caps:creating caps事件视频/mpegts,systemstream=(布尔值)true,packetsize=(int)188
0:00:06.252604078 5576 0x2f1c590信息GST_事件gstevent.c:709:GST_事件新_段:创建段事件时间段开始=0:00:00.000000000,停止=99:99:99.999999999,速率=1000000,应用速率=1000000,标志=0x00,时间=0:00:00.000000000,基数=0:00:00.000000000,位置0:00.000000000,持续时间99:99:99:99
0:00:06.252655518 5576 0x2f1c590信息mpegtspacketizer mpegtspacketizer.c:770:mpegts\u try\u discover\u数据包大小:是否检测到数据包大小:188字节
0:00:06.252693109 5576 0x2f1c590信息mpegtsbase mpegtsbase.c:726:mpegts_base_apply_pat:pat
0:00:06.252856437 5576 0x2f1c590信息GST\u元素\u焊盘gstelement.c:897:GST\u元素\u获取\u静态\u焊盘:找到焊盘tsdemux0:接收器
0:00:06.252870522 5576 0x2f1c590信息GST_事件gstevent.c:628:GST_事件gstevent\u新caps:creating caps事件音频/mpeg,mpegversion=(int)1
0:00:06.252894869 5576 0x2f1c590警告默认描述。c:612:格式信息获取描述:音频/MPEG中意外的MPEG-1层,mpegversion=(int)1
0:00:06.252931277 5576 0x2f1c590信息GST_元素_焊盘gstelement.c:897:GST_元素_获取_静态_焊盘:找到焊盘tsdemux0:sink
0:00:06.252940534 5576 0x2f1c590信息GST_事件gstevent.c:628:GST_事件\u新的\u caps:creating caps事件视频/x-h264,流格式=(字符串)字节流,对齐=(字符串)nal
0:00:06.252997433 5576 0x2f1c590信息GST\u元素\u焊盘gstelement.c:646:GST\u元素\u添加\u焊盘:添加焊盘“音频\u 0041”
0:00:06.2530063435576 0x2f1c590信息GST_事件gstevent.c:709:GST_事件新_段:创建段事件时间段开始=0:00:00.000000000,停止=99:99:99.999999999,速率=1000000,应用速率=1000000,标志=0x00,时间=0:00:00.000000000,基数=0:00:00.000000000,位置0:00.000000000,持续时间99:99:99:99
0:00:06.253348125 5576 0x2f1c590信息GST\u元素\u焊盘gstelement.c:646:GST\u元素\u添加\u焊盘:添加焊盘“视频\u 0040”
0:00:06.253394365576 0x2f1c590 INFO basesrc gstbasesrc.c:2785:gst\U base\U src\U循环:gst\U pad\U push()后暂停=未链接
0:00:06.253408940 5576 0x2f1c590 WARN basesrc gstbasesrc.c:2865:gst_base_src_循环:错误:内部数据流错误。
0:00:06.253413835 5576 0x2f1c590 WARN basesrc gstbasesrc.c:2865:gst_base_src_循环:错误:流式处理任务已暂停,原因未链接(-1)
0:00:06.253424005576 0x2f1c590信息GST\u错误\u系统gstelement.c:1835:GST\u元素\u消息\u完整:发布消息:内部数据流错误。
0:00:06.253439614 5576 0x2f1c590信息GST\u错误\u系统gstelement.c:1858:GST\u元素\u消息\u完整:发布的错误消息:内部数据流错误。
0:00:06.25351306 5576 0x2f1c590信息GST\u元件\u焊盘gstelement.c:766:GST\u元件\u移除\u焊盘:移除焊盘“音频\u 0041”
0:00:06.253531993 5576 0x2f1c590信息GST\u元素\u焊盘gstelement.c:766:GST\u元素\u移除\u焊盘:移除焊盘“视频\u 0040”
('on_error():',(GError('Internal data flow error'),'gstbasesrc.c(2865):gst_base_src_loop():/GstPipeline:pipeline0/GstUDPSrc:src:\n流任务已暂停,原因未链接(-1))
0:00:06.2535511475576 0x2f1c590信息任务gsttask.c:300:gst_任务_func:任务将暂停

您必须使用套接字吗?无法为启动器尝试端口?udpsrc帽呢。。我认为您必须指定它们,否则它将不会被链接(可能)

我会这样做(不准确-您必须调试/调优它):


你必须使用插座吗?无法为启动器尝试端口?udpsrc帽呢。。我认为您必须指定它们,否则它将不会被链接(可能)

我会这样做(不准确-您必须调试/调优它):


我认为以下几行有错误:

self.udpsrc = Gst.ElementFactory.make('udpsrc', 'src')
self.pipeline.add(self.udpsrc)
self.udpsrc.set_property("socket",Gio.Socket().new_from_fd(self.videosocket.fileno()))
它们应该是:

self.udpsrc = Gst.ElementFactory.make('udpsrc', 'src')
self.udpsrc.set_property("socket",Gio.Socket().new_from_fd(self.videosocket.fileno()))
self.pipeline.add(self.udpsrc)

我认为以下几行有错误:

self.udpsrc = Gst.ElementFactory.make('udpsrc', 'src')
self.pipeline.add(self.udpsrc)
self.udpsrc.set_property("socket",Gio.Socket().new_from_fd(self.videosocket.fileno()))
它们应该是:

self.udpsrc = Gst.ElementFactory.make('udpsrc', 'src')
self.udpsrc.set_property("socket",Gio.Socket().new_from_fd(self.videosocket.fileno()))
self.pipeline.add(self.udpsrc)