rendered paste bodyimport gobjectgobject.threads_init()import gstimport pygtkpygtk.require("2.0")import gtkimport sysdef new_pad_cb(element, pad, target): dest_pad = target.get_compatible_pad(pad) if dest_pad: pad.link(dest_pad)# set up media pipelinesrc = gst.element_factory_make("filesrc")src.set_property("location", sys.argv[1])dec = gst.element_factory_make("decodebin2")aconv = gst.element_factory_make("audioconvert")sink = gst.element_factory_make("alsasink")volume = gst.element_factory_make("volume")bin = gst.Bin()bin.add(src, dec, aconv, sink, volume)src.link(dec)dec.connect("pad-added", new_pad_cb, volume)volume.link(aconv)aconv.link(sink)def buttonCb(button): if button == playBtn: bin.set_state(gst.STATE_PLAYING) elif button == stopBtn: bin.set_state(gst.STATE_READY)def volumeCb(scale): volume.set_property("volume", scale.get_value())# UI codewindow = gtk.Window()window.set_size_request(320, 240)playBtn = gtk.Button("Play")playBtn.connect("clicked", buttonCb)stopBtn = gtk.Button("Stop")stopBtn.connect("clicked", buttonCb)volumeScale = gtk.HScale()volumeScale.set_range(0, 10)volumeScale.connect("value-changed", volumeCb)volumeScale.set_value(1)volumeScale.set_update_policy(gtk.UPDATE_CONTINUOUS)box = gtk.VBox()for widget in [playBtn, stopBtn, volumeScale]: box.pack_start(widget)window.add(box)window.show_all()window.connect("destroy", gtk.main_quit)gtk.main()