文中的技术出处Python GStreamer Tutorial。
最简单的播放视频方法:
gst-launch-0.10 playbin uri=file:///path/to/视频文件
在Python里播放
self.player = gst.element_factory_make("playbin", "player")
bus = self.player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect('message', self.on_message)
bus.connect('sync-message::element', self.on_sync_message)
self.player.set_property('uri', "file://" + filepath)
self.player.set_state(gst.STATE_PLAYING)def on_message(self, bus, message):
t = message.type
if t == gst.MESSAGE_EOS:
self.player.set_state(gst.STATE_NULL)
self.button.set_label("Start")
else if t == gst.MESSAGE_ERROR:
self.player.set_state(gst.STATE_NULL)
self.button.set_label("Start")def on_sync_message(self, bus, message):
if message.structure is None:
return
message_name = message.structure.get_name()
if message_name == 'prepare-xwindow-id':
imagesink = message.src
imagesink.set_property('force-aspect-ratio', True)
imagesink.set_xwindow_id(self.movie_window.window.xid)
本想翻译一下那篇教程,但是发现文字其实很少,大家应该是没问题的。而且WP的代码缩进都给我去了,不大适合贴代码。我的播放器其实视频部分用playbin就可以了,可能会加上拖放,加字幕,在影片上显示状态等等功能吧,那些都和视频音频混合无关了。然后就是加上自动下载BT文件和影片介绍,还有在douban改喜好的部分了。唉,我的效率好低。可是原来想的P2P电视离PPstream越来越远,离Miro越来越近了倒是。