-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstreamserver.py
151 lines (119 loc) · 4.12 KB
/
streamserver.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
'''
STREAM EXPRESS SERVER
AUTHOR: GEORGIA BLANCO-LITCHFIELD GBL06
'''
from flask import Flask, request, jsonify
import traceback, os
from autosmart_v2.utils.utils import createFileLogger
from autosmart_v2.streamplayer import StreamPlayer
from autosmart_v2.config.config import Config
VERSION = 1.5
LOG_FILE = Config['streamserverLog']
STREAMS_LOC = Config['streamsLocation']
# DEBUG = os.getenviron("FLASK_DEBUG")
logger = createFileLogger(LOG_FILE)
app = Flask(__name__)
class Controller():
def __init__(self):
logger.info("creating")
self.player = StreamPlayer(
name="player1",
status="Created",
stream="No stream selected",
logger=logger,
counter = 0
)
controller = Controller()
@app.route('/status', methods=['GET'])
def status():
print("status")
response = {}
try:
controller.player.status()
response["data"] = {
"name": controller.player.name,
"status": controller.player.status,
"stream": controller.player.stream,
"clients": controller.player.counter
}
except Exception as exc:
response["error"] = [
str(exc),
traceback.format_exc()
]
return jsonify(response)
@app.route('/startstream', methods=['GET'])
def startstream():
clients = request.args['clients']
stream_name = request.args['stream'] + '.ts'
# controller.counter += 1
logger.info("Starting Stream")
response = {}
try:
for path, dirs, files in os.walk(STREAMS_LOC):
check_stream = 0
if stream_name in files:
check_stream += 1
stream_path = os.path.join(path, stream_name)
logger.info('Stream path found:' + stream_name)
controller.player.counter += 1
if controller.player.status != "Playing" and controller.player.counter == int(clients):
controller.player.start_run(stream_path, int(clients))
else:
logger.info("Stream player is already playing. Attempting to stop the stream and restart")
controller.player.stop_run()
logger.info("we are here")
controller.player.start_run(stream_path, controller.player.counter)
response["data"] = {
"name": controller.player.name,
"status": controller.player.status,
"stream path": stream_path,
"stream": controller.player.stream,
"clients": controller.player.counter
}
elif check_stream == 0:
logger.info('No stream found in stream directory.')
except Exception as exc:
response["error"] = [
str(exc),
traceback.format_exc()
]
# if DEBUG:
# raise exc
return jsonify(response)
@app.route('/stopstream', methods=['GET'])
def stopstream():
response = {}
try:
controller.player.stop_run()
controller.counter = 0
response["data"] = {
"name": controller.player.name,
"status": controller.player.status,
"stream": controller.player.stream,
"clients": controller.player.counter
}
except Exception as exc:
response["error"] = [
str(exc),
traceback.format_exc()
]
# if DEBUG:
# raise exc
return jsonify(response)
@app.route('/streams', methods=['GET'])
def streams():
response = {"data": controller.player.streams}
return jsonify(response)
@app.route('/system_information')
def server_information():
response = {
"System": "StreamXpress Server",
"Version": VERSION,
"Uptime": " "
}
return jsonify(response)
if __name__ == '__main__':
# socket_io.run(app, debug=True, port=5000)
app.run(debug=True, host='0.0.0.0', port=5000)
# http://localhost:5000/streamexp?folder=L2&stream=V2-AdSmart-Multiple-TPT