Mplayer работает так: ему шлется либо команда не требующая ответа, либо запрос на получение какой-то инфы. Запросы начинаются на “get_”, ответы приходят с префиксом “ANS_”, а то что приходит без префикса, это его “монолог”.
Я попытался организовать что-то вроде очереди, и написал какой-то монструозный класс (я постарался все прокомментировать для понятности). Это Thread, который постоянно читает stdout процесса запущенного в Popen.
Мой класс нормально работает на компьютере, но на телефоне вся синхронизация сбивается (а я пишу плеер для телефона), либо надо делать очень большое время ожидания ответа. И если процесс пришлет ответ в то время, когда он не ожидается, то со следующим запросом будет ассоциирован неправильный (уже торчащий в очереди) ответ.
Вот простой пример применения моего класса Mplayer в PyQt:
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from Mplayer import Mplayer
class Window(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.mplayer = Mplayer(self.winId())
self.mplayer.startMplayer(QFileDialog.getOpenFileName())
def mousePressEvent(self, event):
# кликнув по виджету получим текущую позицию
timePos = self.mplayer.communicate("get_time_pos")
def closeEvent(self, event):
self.mplayer.communicate("quit")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
app.exec_()