-
-
Save thefkboss/f470c5617a48c91110a309188a276547 to your computer and use it in GitHub Desktop.
Kill Plex video transcoding streams only. All audio streams are left alone. Kill message based on platform.
This file contains hidden or 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 video transcoding streams only. All audio streams are left alone. | |
PlexPy > Settings > Notification Agents > Scripts > Bell icon: | |
[X] Notify on playback start | |
PlexPy > Settings > Notification Agents > Scripts > Gear icon: | |
Playback Start: kill_trans_exp_audio.py | |
""" | |
import requests | |
import platform | |
from uuid import getnode | |
## EDIT THESE SETTINGS ## | |
PLEX_HOST = '' | |
PLEX_PORT = 32400 | |
PLEX_SSL = '' # s or '' | |
PLEX_TOKEN = 'xxxxx' | |
DEFAULT_REASON = 'This stream has ended due to requiring video transcoding. ' \ | |
'Please raise your Remote Quality to Original to play this content.' | |
# Find platforms that have history in PlexPy in Play count by platform and stream type Graph | |
DEVICES = {'Android': 'Andriod message', | |
'Chrome': 'Chrome message', | |
'Plex Media Player': 'PMP message', | |
'Chromecast': 'Chromecast message'} | |
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') | |
if 'Video' in response['MediaContainer']: | |
for s in response['MediaContainer']['Video']: | |
if s['TranscodeSession']['videoDecision'] == 'transcode' and s['User']['title'] not in USER_IGNORE: | |
MESSAGE = DEVICES.get(s['Player']['platform'], DEFAULT_REASON) | |
print("Killing {}'s stream for transcoding video".format(s['User']['title'])) | |
kill_stream(s['Session']['id'], MESSAGE) | |
elif 'Track' in response['MediaContainer']: | |
for s in response['MediaContainer']['Track']: | |
print("{} is streaming audio, let them pass!".format(s['User']['title'])) | |
exit() | |
else: | |
exit() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment