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 would love to be able to use this script but have a clue what I change and where I get the information from to fill the blanks in. Any help would be much appreciated thank everyone
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.....
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
@TheFreshPrinceOfBel-Air checkout my repo for plex related scripts. I've added all my gists there for easier searching and so people can create issues for errors or requests.