Advertisement
Guest User

Untitled

a guest
Mar 17th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. import os
  2. import signal
  3. import sys
  4. import json
  5. import requests
  6. import time
  7. import subprocess
  8.  
  9. class Supervisor(object):
  10. def __init__(self):
  11. self.request = requests.Session()
  12. self.settings = self.request.get('http://www.nashvybor2018.ru/api/settings.json').json()
  13.  
  14. self.processes = []
  15.  
  16. with open('targets.json', 'r') as targets_file:
  17. targets = json.loads(targets_file.read())
  18. for item in targets:
  19. self.record(item['region'], item['voting_station'], item['camera'])
  20.  
  21. def cycle(self):
  22. remove = []
  23.  
  24. for process in self.processes:
  25. if process['process'].poll() is not None:
  26. remove.append(process)
  27.  
  28. temp_processes = self.processes
  29. for item in remove:
  30. temp_processes = [f for f in temp_processes if f['id'] != item['id']]
  31. self.processes = temp_processes
  32.  
  33. for item in remove:
  34. self.record(item['region'], item['voting_station'])
  35.  
  36. def get_stream_url(self, region, voting_station, camera):
  37. channel = self.request.get('http://www.nashvybor2018.ru/api/channels/{}/{}.json'.format(region, voting_station)).json()[camera]
  38. return self.settings['hls_playlist_url_template'].replace('<streamer>', channel['streamers_hls'][0]).replace('<sid>', channel['uuid']).replace('<session_id>', channel['session_id'])
  39.  
  40. def record(self, region, voting_station, camera):
  41. source = self.get_stream_url(region, voting_station, camera)
  42. print(source)
  43. destination = '{}/{}/{}'.format(region, voting_station, camera)
  44. os.makedirs(destination, exist_ok=True)
  45.  
  46. arguments = [
  47. ['ffmpeg', '-loglevel', '-8', '-threads', '1'],
  48. ['-r', '10', '-i', source],
  49. ['-r', '10', '-c:v', 'copy'],
  50. [destination + '/{}.mp4'.format(round(time.time()))],
  51. ]
  52.  
  53. arguments = [item for sublist in arguments for item in sublist]
  54. #process = subprocess.Popen(arguments)
  55.  
  56. self.processes.append(
  57. {
  58. 'id': '{}-{}'.format(region, voting_station),
  59. 'region': region,
  60. 'voting_station': voting_station,
  61. 'camera': camera,
  62. 'process': process
  63. })
  64.  
  65. def kill_all(self):
  66. for process in self.processes:
  67. if process['process'].poll() is None:
  68. process['process'].terminate()
  69.  
  70. if __name__ == '__main__':
  71. s = Supervisor()
  72.  
  73. while True:
  74. try:
  75. s.cycle()
  76. time.sleep(5)
  77. except KeyboardInterrupt:
  78. s.kill_all()
  79. sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement