gstreamer uri vs文件:无法播放本地视频文件

时间:2016-02-04 08:05:32

标签: python gstreamer

我是gstreamer的新手,并尝试在我的基于NVIDIA Jetson ARM的主板上使用它进行GPU加速视频解码。我在网上发现了一些python代码,它创建了一个gstreamer管道,我试图用它来熟悉自己。创建管道的代码如下:

def new_pipeline(self, mediauri):

    pipeline = Gst.Pipeline()

    if (not pipeline):
        print ('Failed to create pipeline')
        exit (-1)

    # Create bus to get events from GStreamer pipeline
    bus = pipeline.get_bus()
    self.bus.append(bus)
    bus.add_signal_watch()
    bus.connect('message::error', self.on_error)

    # This is needed to make the video output in our DrawingArea:
    bus.enable_sync_message_emission()
    bus.connect('sync-message::element', self.on_sync_message)

    # Create GStreamer elements
    decodebin = Gst.ElementFactory.make('uridecodebin', 'decodebin')
    videosink = Gst.ElementFactory.make('nveglglessink', 'videosink')

    if (not decodebin or not videosink):
        print ('Failed to create uridecodebin and/or nveglglessink')
        exit(-1)

    # Set properties
    decodebin.set_property('uri', mediauri)
    videosink.set_property('create-window', False)

    # Add elements to the pipeline
    pipeline.add(decodebin)
    pipeline.add(videosink)

    decodebin.connect("pad-added", self.decodebin_pad_added)

    return pipeline

可在此处找到完整项目(https://github.com/kulve/gst-multiwindow

现在,每当我尝试从本地文件创建管道时,我都会收到错误:

on_error(): (GError('Invalid URI "testfile.avi".',), 'gsturidecodebin.c(1373): gen_source_element (): /GstPipeline:pipeline0/GstURIDecodeBin:decodebin')

我感觉这个错误是因为本地文件不是有效的uri。我尝试将其作为file://testfile.avi传递,但无法返回could not open resource for reading错误。

此代码是否有更改可以帮助我播放本地视频文件?

3 个答案:

答案 0 :(得分:2)

要播放的文件/ URI应通过“uri”属性设置。这必须是绝对URI,不允许使用相对文件路径。

前:

file.avi位于/ home / user / Downloads,然后:

URI =文件:///home/user/Downloads/file.avi

答案 1 :(得分:1)

URI必须以URI标签开头,如http,tcp,rtsp,file。 然后:在资源的最后位置。

For Ex : for file /home/Desktop/a.avi
             URI : file:/home/Desktop/a.avi
      For RTSP,
  URI : rtsp://<IP>:<PORT>/<PATH>
           ex: rtsp://192.168.1.1/test

答案 2 :(得分:1)

您仅提供文件名作为输入。 URI属性采用标准URI作为输入。此外,uridecodebin仅不支持可重复的URI。正确的URI类似于:

file://localhost/absolute/path/to/file

或者如果要删除主机名(请注意其他斜杠):

file:///absolute/path/to/file

某些解析器也足够智能,可以解析相对路径(uridecodebin不支持此功能)。在您的情况下,可以将其指定为:

file:./testfile.avi

有关File URI scheme的更多详细信息。