2016-03-19 12 views
0

bir GES zaman çizelgesine üç dosya ekler aşağıdaki Python kodu da vardı diğerleri aşağıdaki hatayı atar:Gstreamer1.0 eksik eklenti: Python kodunda decodebin2

(GError ('Sizin Gstreamer kurulumu eksik plug-in. ',),' gstdecodebin2.c (3928): gst_decode_bin_expose():/GESPipeline: gespipeline0/GESTimeline: gestimeline0/GESVideoTrack: gesvideotrack0/GnlCompozisyon: gnlcomposition1/GnlSource: gnlsource0/GstBin: videosrcbin/GstURIDecodeBin: uridecodebin0/GstDecodeBin : decodebin4: Ben GST_PLUGIN_PATH_1_0 ortam değişkeni belirledik

from gi.repository import GES 
from gi.repository import GstPbutils 
from gi.repository import Gtk 
from gi.repository import Gst 
from gi.repository import GObject 
import sys 
import signal 

VIDEOPATH = "file:///path/to/my/video/folder/" 

class Timeline: 
    def __init__(self, files): 
    print Gst._version # prints 1 

    self.pipeline = GES.Pipeline() 
    container_caps = Gst.Caps.new_empty_simple("video/quicktime") 
    video_caps = Gst.Caps.new_empty_simple("video/x-h264") 
    audio_caps = Gst.Caps.new_empty_simple("audio/mpeg") 
    self.container_profile = GstPbutils.EncodingContainerProfile.new("jane_profile", "mp4 concatation", container_caps, None)#Gst.Caps("video/mp4", None)) 

    self.video_profile = GstPbutils.EncodingVideoProfile.new(video_caps, None, None, 0) 
    self.audio_profile = GstPbutils.EncodingAudioProfile.new(audio_caps, None, None, 0) 
    self.container_profile.add_profile(self.video_profile) 
    self.container_profile.add_profile(self.audio_profile) 

    self.bus = self.pipeline.get_bus() 
    self.bus.add_signal_watch() 
    self.bus.connect("message", self.busMessageCb) 

    self.timeline = GES.Timeline.new_audio_video() 
    self.layer = self.timeline.append_layer() 
    signal.signal(signal.SIGINT, self.handle_sigint) 
    self.start_on_timeline = 0 

    for file in files: 
     asset = GES.UriClipAsset.request_sync(VIDEOPATH + file) 
     print asset.get_duration() 
     duration = asset.get_duration() 
     clip = self.layer.add_asset(asset, self.start_on_timeline, 0, duration, GES.TrackType.UNKNOWN) 
     self.start_on_timeline += duration 
     print 'start:' + str(self.start_on_timeline) 

    self.timeline.commit() 
    self.pipeline.set_timeline(self.timeline) 

def handle_sigint(self, sig, frame): 
    Gtk.main_quit() 

def busMessageCb(self, unused_bus, message): 
    print message 
    print message.type 
    if message.type == Gst.MessageType.EOS: 
     print "eos" 
     Gtk.main_quit() 
    elif message.type == Gst.MessageType.ERROR: 
     error = message.parse_error() 
     print (error) 
     Gtk.main_quit() 


if __name__=="__main__": 
    GObject.threads_init() 
    Gst.init(None) 
    GES.init() 
    gv = GES.version() # prints 1.2 

    timeline = Timeline(['one.mp4', 'two.mp4', 'two.mp4']) 
    done = timeline.pipeline.set_render_settings('file:///home/directory/output.mp4', timeline.container_profile) 
    print 'done: {0}'.format(done) 
    timeline.pipeline.set_mode(GES.PipelineFlags.RENDER) 
    timeline.pipeline.set_state(Gst.State.PAUSED) 
    Gtk.main() 

\ nno uygun eklentileri bulundu ') "/usr/local/lib:/usr/local/lib/gstreamer-1.0:/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu/gstreamer-1.0"

Bu sürüm için temel, iyi, kötü ve çirkin paketlerle birlikte gstreamer1.0-1.2.4'ü derledim ve yükledim. GES, bulunduğum gstreamer sürümüne en yakın olan sürüm 1.2.1 ile kuruldu. Ayrıca libav-1.2.4'ü kurdum.

decodebin2 benim GST_PLUGIN_PATH_1_0 parçası olan eklenti-tabanı için günlük yükleyip libgstplayback içine bağlantılıdır marka, uygun baz olmalıdır:

/usr/local/lib/gstreamer-1.0 libgstplayback_la-gstdecodebin2.lo 

ben gstreamer0.10 var ve decodebin2 olduğunu Ben gstreamer0.10 kütüphane yolunda 1.0 yerine bunun yerine oturur gibi 'gst-inspect-1.0 -b' yaptığımda kara listeye alınmış bir sürüm olarak.

Eklenti kayıt defterini yeniden oluşturmak için ~/.cache/gstreamer dosyalarını temizlemeyi ve gst-inspect-1.0'ı yeniden çalıştırmayı denedim ancak yine de Python kodundaki hatayı almaya devam ediyorum. Bu örnek kod, Gstreamer düzenleme hizmetlerini kullanarak bir zaman çizelgesi yazmadaki ilk adımım olduğu için yanlış olabilir. Ubuntu Trusty veya 14.04.

Dosya, mp4 dosyasıdır; bu nedenle, gerekli olan kitaplıklar için gst-libav uygulamasını yükledim. MP4Box çıkış dosyada -bilgi geçerli:

  • Film Bilgileri * Zaman ölçeği 90000 - Süre 00: 00: 08,405 Parçalanmış Dosya no - 2 parça (lar) Dosya aşamalı indirme (moov için uygun Dosya Marka mp42) mdat önce - düzenlendi sürümü 0 : GMT Sal Eyl 17 17:02:26 2015

    Dosya hiçbir MPEG4 IOD/OD

    Parça 1. Bilgi var - TrackID 1 - timescale 50000 - Süre 00: 00: 08.360 Medya Bilgisi: Dil "İngilizce" - Tür "vide: avc1" - 209 numuneler Görsel demiryolu planı: x = 0 y = 0 width = 1.920 height = 1080 MPEG-4 Yapılandırma: Görsel Akış - ObjectTypeIndication 0x21 AVC/H264 Video - Görsel Boyut 1920 x 1080 AVC Bilgisi: Belirtilen parça boyutunu 1920 x 1080 Kendinden senkronize

    - 1: 32 Piksel Boy Oranı 1: 1 SPS - - 1 PPS Ana @ Seviye 4.2 NAL Birim uzunluk bitleri Profil

    Parça # 2 Bilgisi - TrackID 2 - TimeScale 48000 - Süre 00:00:08.405 Ortam Bilgisi: Dil "İngilizce" - Tip "soun: mp4a" - 394 örnek MPEG-4 Yapılandırma: Ses Akışı - ObjectTypeIndication 0x40 MPEG-4 Ses MPEG-4 Ses AAC LC - 2 Kanal (lar) - SampleRate 48000 1

günlük pastebin.com/BjJ8Z5Bd @ ı çalıştırdığınızda boyunca akımda Senkronize 'GST_DEBUG = 3, gnl *: 5 piton ./timeline1.py> timeline1.log 2> & 1'

cevap

0

diye bir şey yok " Burada kullandığınız GStreamer 1.x'te decodebin2 ". Şimdi sadece "decodebin" deniyor ve 0.10'da "decodebin2" ye eşdeğer.

Sorununuz burada değil, ancak decodebin bulunamadı. Sorununuz, bu belirli medya dosyasını oynatmak için bir eklentiyi kaçırmanız. Ne tür bir medya dosyası?

+0

Merhaba Sebastian, Adınızı Gstreamer projesinin önemli bir katkıcısı olarak gördüğümüzü duymaktan büyük mutluluk duyuyorum ve umarım Gstreamer videom ile çalışmamın temeli olacaktır. MP4Box'tan MP4 detayları benim soruma eklenmiştir. Kodum neden Gstreamer0.10 tabanlı öğeler istiyor? –

+0

Container_caps 'video/mpeg' ('sürüm' 4 'de ayarlayarak)' video/quicktime 'olarak değiştirildi. Ancak, 'timeline.pipeline.set_render_settings (' file: ///home/ian/output.mp4 ', timeline.container_profile)' false değerini döndürür ve hiçbir şey çalınmaz. –

+0

0.10 eleman istemiyor. Gördüğünüz yeri bildiğinizden emin olun decodebin2 :) Sorun, çıktı formatı değil, ancak problem giriş dosyasını okuyor ve deşifre ediyor. Ne tür bir girdi dosyası kullanıyorsunuz? Ayrıca çıktı için bir şeyleri özlüyor olabilirsiniz, ama bu noktada bile değil. –

İlgili konular