Skip to content

Instantly share code, notes, and snippets.

@blacktwin
Last active October 17, 2019 04:13
Show Gist options
  • Save blacktwin/14d400a0f442da465389164fa046647a to your computer and use it in GitHub Desktop.
Save blacktwin/14d400a0f442da465389164fa046647a to your computer and use it in GitHub Desktop.
Kill Plex paused video transcoding streams using PlexPy.
"""
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
@GuzzyUK
Copy link

GuzzyUK commented Jan 16, 2018

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.....

@benplace
Copy link

benplace commented Aug 1, 2018

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?

@blacktwin
Copy link
Author

@benplace use the repo instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment