import socket
#from subprocess import call
import sys
from subprocess import *
import os
import glob
import time
from time import gmtime, strftime
import signal
#import errno
omxplayer = None
videoInEsecuzione = ''
flagNuovoVideo = False
inLine = []
homeDir = '/home/pi/servervideo/'
estensioneVideo = '.mp4'
contTimeoutVideo = 0
timeoutVideo = 25
#ogni IP sulla porta 1919
TCP_IP = '0.0.0.0'
TCP_PORT = 1919
BUFFER_SIZE = 1024
def scriviSottotitolo(sottotitolo):
#region scrittura sottotitoli
#imposta la scritta sovraimposta (=sottotitolo)
inFile = open(homeDir + 'video/' + videoInEsecuzione + '.srt', 'r')
i = 0
inLine = []
while 1:
stringa = inFile.readline()
if len(stringa) == 0:
break
#inLine = inLine[:-1]
inLine.append(stringa)
i = i + 1
inFile.close()
inLine[2] = testoRichiesto
outFile = open(homeDir + 'video/' + videoInEsecuzione + '.srt', 'w')
for x in inLine:
outFile.write(x)
outFile.close()
#end scrittura sottotitolo
def scriviLog(daScrivere):
nomeFileLog = strftime("%Y%m%e", gmtime())
orario = strftime("%H:%M:%S", gmtime())
print(orario + ' ' + daScrivere)
logFile = open(homeDir + nomeFileLog + '.log', 'a')
logFile.write(orario + ' ' + daScrivere + '\n')
logFile.close()
scriviLog('avvio...')
#crea socket tcp
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP,TCP_PORT))
#loop
while 1:
#in attesa di connessione
s.listen(5)
#connessione avviata
conn, addr = s.accept()
#conn.setblocking(0)
scriviLog('connessione da: ' + addr[0])
while 1:
try:
#riceve dati
data = conn.recv(BUFFER_SIZE)
scriviLog('recv: ' + data)
if data != '':
conn.send('ACK');
try:
testoRichiesto = ' '
strRicevutaEsplosa = data.split('#')
strRicevuta = strRicevutaEsplosa[0]
videoRichiesto = strRicevuta[4:7]
if strRicevuta[7:-2] != '':
testoRichiesto = strRicevuta[7:-2]
scriviLog('video: ' + videoRichiesto + ' stringa: ' + testoRichiesto)
if videoRichiesto != '':
if videoInEsecuzione != videoRichiesto or contTimeoutVideo > timeoutVideo:
videoInEsecuzione = videoRichiesto
flagNuovoVideo = True
scriviLog('videoRichiesto:' + videoRichiesto + ' ' + str(flagNuovoVideo))
if flagNuovoVideo == True:
flagNuovoVideo = False
if omxplayer is not None:
scriviLog('omxplayer is not None')
omxplayer.communicate('q')[0]
#omxplayer.terminate()
#omxplayer.kill()
scriviLog('sottotitolo:' + testoRichiesto)
scriviSottotitolo(testoRichiesto)
scriviLog('Nuovo video: ' + videoInEsecuzione)
contTimeoutVideo = 0
omxplayer = Popen(['omxplayer', '--genlog', '--no-ghost-box', '--blank', '--no-osd', '--align', 'center', '--font-size', '150', homeDir + 'video/' + videoInEsecuzione + estensioneVideo ], stdin=PIPE, stdout=PIPE, stderr=PIPE)
scriviLog('Fine nuovo video')
#omxplayer.wait()
#inviare = '---' + data
#conn.send(inviare)
#conn.close()
else:
if omxplayer is not None:
if omxplayer.poll() is not None:
scriviSottotitolo(testoRichiesto)
scriviLog('Replay video: ' + videoInEsecuzione)
contTimeoutVideo = 0
omxplayer = Popen(['omxplayer', '--genlog', '--no-ghost-box', '--blank', '--no-osd', '--align', 'center', '--font-size', '150', homeDir + 'video/' + videoInEsecuzione + estensioneVideo ], stdin=PIPE, stdout=PIPE, stderr=PIPE)
scriviLog('Fine replay video')
except IOError:
scriviLog('error gen')
#else:
# break
# conn.close()
except IOError:
scriviLog('error bob')
break
conn.close();
#except conn.error, e:
# err = e.args[0]
# if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
# #print 'no data'
# continue
# else:
# print('error bob')
# conn.close()
# break
s.shutdown()
s.close()