У меня есть проект, который запускает Python 2.7, PyGTK 2.24 и самую последнюю версию PyGST.
В следующем коде я получаю странную неустойчивую ошибку.При первой более длинной ошибке видео будет воспроизводиться нормально, а ошибка появится только ПОСЛЕ того, как я закрою окно видео.Второе препятствует открытию окна вообще.
import pygtk
pygtk.require('2.0')
import gtk, pango
import pygst
pygst.require('0.10')
import gst
import Trailcrest
import os, sys
class Video:
def __init__(self):
def on_message(bus, message):
if message.type == gst.MESSAGE_EOS:
# End of Stream
player.set_state(gst.STATE_NULL)
elif message.type == gst.MESSAGE_ERROR:
player.set_state(gst.STATE_NULL)
(err, debug) = message.parse_error()
print "Error: %s" % err, debug
def on_sync_message(bus, message):
if message.structure is None:
return False
if message.structure.get_name() == "prepare-xwindow-id":
if sys.platform == "win32":
win_id = videowidget.window.handle
else:
win_id = videowidget.window.xid
assert win_id
imagesink = message.src
imagesink.set_property("force-aspect-ratio", True)
imagesink.set_xwindow_id(win_id)
win = gtk.Window()
win.set_resizable(False)
win.set_has_frame(False)
win.set_position(gtk.WIN_POS_CENTER)
fixed = gtk.Fixed()
win.add(fixed)
fixed.show()
videowidget = gtk.DrawingArea()
fixed.put(videowidget, 0, 0)
videowidget.set_size_request(640, 480)
videowidget.show()
# Setup GStreamer
player = gst.element_factory_make("playbin", "MultimediaPlayer")
bus = player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
#used to get messages that GStreamer emits
bus.connect("message", on_message)
#used for connecting video to your application
bus.connect("sync-message::element", on_sync_message)
player.set_property("uri", "file://" + os.getcwd() + "/VID/SEQ-GAME-OPEN.ogv")
player.set_state(gst.STATE_PLAYING)
win.show()
def main():
gtk.gdk.threads_init()
gtk.main()
return 0
if __name__ == "__main__":
Video()
main()
Программа 'Video.py' получила системную ошибку X Window.Это, вероятно, отражает ошибку в программе.Ошибка была «BadIDChoice (неверный идентификатор ресурса выбран для этого подключения)».(Подробности: serial 373 error_code 14 request_code 1 minor_code 0) (Примечание для программистов: обычно об ошибках X сообщается асинхронно; то есть вы получите ошибку через некоторое время после ее возникновения. Чтобы отладить вашу программу, запустите ее с -опция командной строки sync, чтобы изменить это поведение. Затем вы можете получить значимую обратную трассировку от вашего отладчика, если вы нарушите функцию gdk_x_error ().)
Краткое замечание по этому вопросу ... Я следил заинструкции и запустил «python Video.py --sync» в командной строке (я нахожусь на Kubuntu), и я получил это сообщение снова.
Вот еще одна ошибка - та, которая вообще запрещает воспроизведение.
python: ../../src/xcb_io.c:221: poll_for_event: утверждение `(((long) (event_sequence) - (long) (dpy-> request)) <= 0)' не удалось.Прервано </p>
Они будут буквально чередоваться, хотя и не идеально.Я мог бы получить три первых, два вторых, один первый, один второй, два первых и т. Д. Всегда разные.
Что здесь происходит, черт?