Last active
October 17, 2019 04:13
-
-
Save blacktwin/14d400a0f442da465389164fa046647a to your computer and use it in GitHub Desktop.
Kill Plex paused video transcoding streams using PlexPy.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Kill Plex paused video transcoding streams. | |
PlexPy > Settings > Notification Agents > Scripts > Bell icon: | |
[X] Notify on playback pause | |
PlexPy > Settings > Notification Agents > Scripts > Gear icon: | |
Playback Pause: new_kill_trans_pause.py | |
""" | |
import requests | |
import platform | |
from uuid import getnode | |
## EDIT THESE SETTINGS ## | |
PLEX_HOST = '' | |
PLEX_PORT = 32400 | |
PLEX_SSL = '' # s or '' | |
PLEX_TOKEN = 'xxxxx' | |
MESSAGE = 'This stream has ended due to being paused and transcoding.' | |
USER_IGNORE = ('') # ('Username','User2') | |
## | |
def fetch(path, t='GET'): | |
url = 'http%s://%s:%s/' % (PLEX_SSL, PLEX_HOST, PLEX_PORT) | |
headers = {'X-Plex-Token': PLEX_TOKEN, | |
'Accept': 'application/json', | |
'X-Plex-Provides': 'controller', | |
'X-Plex-Platform': platform.uname()[0], | |
'X-Plex-Platform-Version': platform.uname()[2], | |
'X-Plex-Product': 'Plexpy script', | |
'X-Plex-Version': '0.9.5', | |
'X-Plex-Device': platform.platform(), | |
'X-Plex-Client-Identifier': str(hex(getnode())) | |
} | |
try: | |
if t == 'GET': | |
r = requests.get(url + path, headers=headers, verify=False) | |
elif t == 'POST': | |
r = requests.post(url + path, headers=headers, verify=False) | |
elif t == 'DELETE': | |
r = requests.delete(url + path, headers=headers, verify=False) | |
if r and len(r.content): # incase it dont return anything | |
return r.json() | |
else: | |
return r.content | |
except Exception as e: | |
print e | |
def kill_stream(sessionId, message): | |
headers = {'X-Plex-Token': PLEX_TOKEN} | |
params = {'sessionId': sessionId, | |
'reason': message} | |
requests.get('http://{}:{}/status/sessions/terminate'.format(PLEX_HOST, PLEX_PORT), | |
headers=headers, params=params) | |
if __name__ == '__main__': | |
response = fetch('status/sessions') | |
for s in response['MediaContainer']['Video']: | |
try: | |
if s['TranscodeSession']['videoDecision'] == 'transcode' and s['User']['title'] not in USER_IGNORE \ | |
and s['Player']['state'] == 'paused': | |
print("Killing {}'s stream for pausing a transcode stream of {}".format(s['User']['title'], s['title'])) | |
kill_stream(s['Session']['id'], MESSAGE) | |
except Exception: | |
pass |
I am trying to get this working, when I run the script I get the following error:
Traceback (most recent call last):
File "new_Kill_Trans_Pause.py", line 69, in
for s in response['MediaContainer']['Video']:
KeyError: 'Video'
Any idea?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ok ive got this script running on my QNAP TS215+ but I'm getting this error.
PlexPy Notifiers :: Script error:
Traceback (most recent call last):
File "/share/CACHEDEV1_DATA/Public/PLEX Script/new_kill_trans_pausenew.py", line 11, in
import requests
ImportError: No module named requests
Please help.....