Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import signal
- import sys
- import json
- import requests
- import time
- import subprocess
- class Supervisor(object):
- def __init__(self):
- self.request = requests.Session()
- self.settings = self.request.get('http://www.nashvybor2018.ru/api/settings.json').json()
- self.processes = []
- with open('targets.json', 'r') as targets_file:
- targets = json.loads(targets_file.read())
- for item in targets:
- self.record(item['region'], item['voting_station'], item['camera'])
- def cycle(self):
- remove = []
- for process in self.processes:
- if process['process'].poll() is not None:
- remove.append(process)
- temp_processes = self.processes
- for item in remove:
- temp_processes = [f for f in temp_processes if f['id'] != item['id']]
- self.processes = temp_processes
- for item in remove:
- self.record(item['region'], item['voting_station'])
- def get_stream_url(self, region, voting_station, camera):
- channel = self.request.get('http://www.nashvybor2018.ru/api/channels/{}/{}.json'.format(region, voting_station)).json()[camera]
- return self.settings['hls_playlist_url_template'].replace('<streamer>', channel['streamers_hls'][0]).replace('<sid>', channel['uuid']).replace('<session_id>', channel['session_id'])
- def record(self, region, voting_station, camera):
- source = self.get_stream_url(region, voting_station, camera)
- print(source)
- destination = '{}/{}/{}'.format(region, voting_station, camera)
- os.makedirs(destination, exist_ok=True)
- arguments = [
- ['ffmpeg', '-loglevel', '-8', '-threads', '1'],
- ['-r', '10', '-i', source],
- ['-r', '10', '-c:v', 'copy'],
- [destination + '/{}.mp4'.format(round(time.time()))],
- ]
- arguments = [item for sublist in arguments for item in sublist]
- #process = subprocess.Popen(arguments)
- self.processes.append(
- {
- 'id': '{}-{}'.format(region, voting_station),
- 'region': region,
- 'voting_station': voting_station,
- 'camera': camera,
- 'process': process
- })
- def kill_all(self):
- for process in self.processes:
- if process['process'].poll() is None:
- process['process'].terminate()
- if __name__ == '__main__':
- s = Supervisor()
- while True:
- try:
- s.cycle()
- time.sleep(5)
- except KeyboardInterrupt:
- s.kill_all()
- sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement