Update: PlexConnect Running On Apple TV 6.2 Update
Update: OpenPlex App Installs And Manages PlexConnect on Mac OS X
Update: PlexConnect Running on Apple TV 7.0 Beta 1 And Mac OS X 10.10 Yosemite
Update: PlexConnect Running On Apple TV 6.1.1 Update
Update: Plex On Apple TV Without PlexConnect Or Jailbreak via AirPlay
Update: PlexConnect Running On Apple TV 6.1 Update
Update: PlexConnect Running On Apple TV 6.0 Update
Update: PlexConnect Still Works On Apple TV Software 6.0 Beta (5.4 Seed 3, iOS 7) After Update
As you may know, I’m not really a fan of jailbreaking my iPhone 4S or my iPad 4th generation with retina display. Therefore, I’m always looking for some hacks without the need of a jailbrake. For example, I reported about getting Whatsapp running on an iPad without jailbreaking it. Recently, three Plex enthusiasts (Baa, roidy and f00b4r) were able to bring the media center solution Plex to the Apple TV, and their clever hack doesn’t even require users to jailbreak their device! PlexConnect is running on Mac OS X 10.8.4 Mountain Lion and on Windows 8 Pro on an Apple TV 2 or Apple TV 3 with the Apple TV software 5.2.
The hack, called PlexConnect, uses Apple’s own movie trailers app as a kind of trojan horse to bring Plex to the Apple TV. Users simply have to fiddle with their Apple TV’s network settings to route traffic through a computer running a python script that swaps Apple’s movie trailer data with data from a Plex media server. A detailed ‘How-To’ for Mac OS X, Windows (XP, Vista, 7 and 8) and Ubuntu is already on github. Installing PlexConnect on Mac OS X 10.8.4 on my MacBook Pro Mid 2012 works as described on github. However, you should take care on the following important hints to get PlexConnect running on Windows 8 (Pro):
- Download Plex for Windows, named ‘Windows XP SP3 or later. Version 0.9.7.28.33′ from the Get Plex! site. This is the free version. There is a Windows 8 store one for $2.99, too (but I was not willing to spend the money… ;-)). It is very important to download it first, save it on your windows 8 PC and run the installation as administrator!
- Download Python from here and take care to install the 2.7.5 version because PlexConnect will not run with a 3.X version.
- Download PlexConnect: For Windows only, you have to edit ‘Settings.py‘ with a text editor (e.g. Notepad) as follows: Look for ‘ip_dnsmaster‘ and substitute the following ‘8.8.8.8‘ by the fixed (!) IP-address of your Windows PC. Safe it, start Plex Media Server, then PlexConnect and then it should work. For Mac: Do not change anything as it is describe for OS X!
- If you start PlexConnect.py via double click, no AirPlay apps like AirServer should be running.
- Restart your windows 8 PC.
The result is a working version of Plex that serves up all kinds of local content through the Apple TV. I tested it on my Acer Aspire 1810T running on Windows 8 Pro with Windows Media Center installed, MacBook Pro Mid 2012 running with Mac OS X 10.8.4 and a Apple TV 3 and it works perfectly!
Stay tuned! 😉
112 Comments
Pingback: Plex, PlexConnect And OpenPlex Running On Apple TV 7.0 Beta 4 And Mac OS X 10.10 Yosemite Beta 5 - miApple.me
Pingback: Plex, PlexConnect And OpenPlex Running On Apple TV 7.0 Beta 3 And Mac OS X 10.10 Yosemite Beta 4 - miApple.me
Pingback: Plex And PlexConnect Running On Apple TV 7.0 Beta 2 And Mac OS X 10.10 Yosemite Beta 3 - miApple.me
Pingback: PlexConnect Running On Apple TV 6.2 Update - miApple.me
Pingback: PlexConnect Running On Apple TV 6.0.2 Update | miApple.me
Pingback: PlexConnect Running On Apple TV 6.0.1 And Mac OS X 10.9 Mavericks | miApple.me
no luck…going to call it a night and try again tomorrow…thx again
Try instead of 192.168.178.10 in settings.py the IP-address 192.168.1.10 because it seems that your router is on 192.168.1.1
I set up PlexConnect on my Windows 8 Pro PC again, following exactly https://miapple.me/2013/09/01/plexconnect-still-works-on-apple-tv-software-6-0-beta-5-4-seed-3-ios-7-after-update/ without changing any IP-address.
For Windows it is important to use this: “certfile = C:\PlexConnect-master\assets\certificates\trailers.pem” instead of “certfile = ./assets/certificates/trailers.pem” in the settings.cfg (not in the settings.py!)
Here is my settings.cfg on Windows 8:
[PlexConnect]
logpath = .
enable_dnsserver = True
ip_webserver = 0.0.0.0
prevent_atv_update = True
port_dnsserver = 53
enable_plexconnect_autodetect = True
port_pms = 32400
port_webserver = 80
ip_plexconnect = 0.0.0.0
certfile = C:\PlexConnect-master\assets\certificates\trailers.pem
ip_dnsmaster = 8.8.8.8
loglevel = Normal
ip_pms = 192.168.178.10
enable_plexgdm = True
port_ssl = 443
Some reported issue with the trailers.pem. Try to recreate the profile for the Apple TV and take care of correct spelling!
Hi Gee,
Restarted the whole process following the steps at https://miapple.me/2013/09/01/plexconnect-still-works-on-apple-tv-software-6-0-beta-5-4-seed-3-ios-7-after-update/
No problems creating trailers.pem + trailers.cer + trailers.key
Installed on ATV with certificate.
Changed Settings.cfg with original and yours.
Still does not work 🙁 unfortunately
ATV ip 192.168.1.101
Server running Plex 192.168.1.107
Apple have really done a great job of making this difficult!
Rebooted my system and repeated process.
Managed see PlexConnect via Trailers but can’t see any artwork and when I select a movie it hangs on Accessing Trailers…at least its half working ;P
Hi Paul,
sounds good! Half way done at least. Could you post your settings.py and settings.cfg, please? I will have a look on it.
Cheers,
Gee Are
Settings.py
#!/usr/bin/env python
import sys
from os import sep
import ConfigParser
from Debug import * # dprint()
“””
Global Settings…
PMS: plexgdm, ip_pms, port_pms
DNS: ip_dnsmaster – IP of Router, ISP’s DNS, … [dflt: google public DNS]
IP_self: enable_plexconnect_autodetect, ip_plexconnect – manual override for VPN usage
HTTP: ip_webserver, port_webserver – override when using webserver + forwarding to PlexConnect
HTTPS: port_ssl, certfile –
“””
g_settings = { \
‘enable_plexgdm’ :(‘True’, ‘False’), \
‘ip_pms’ :(‘192.168.178.10’,), \
‘port_pms’ :(‘32400’,), \
\
‘enable_dnsserver’:(‘True’, ‘False’), \
‘port_dnsserver’ :(’53’,), \
‘ip_dnsmaster’ :(‘8.8.8.8’,), \
‘prevent_atv_update’ :(‘True’, ‘False’), \
\
‘enable_plexconnect_autodetect’:(‘True’, ‘False’), \
‘ip_plexconnect’ :(‘0.0.0.0’,), \
\
‘ip_webserver’ :(‘0.0.0.0’,), \
‘port_webserver’ :(’80’,), \
‘port_ssl’ :(‘443’,), \
‘certfile’ :(‘./assets/certificates/trailers.pem’,), \
\
‘loglevel’ :(‘Normal’, ‘High’), \
‘logpath’ :(‘.’,), \
}
class CSettings():
def __init__(self):
dprint(__name__, 1, “init class CSettings”)
self.cfg = None
self.section = ‘PlexConnect’
self.loadSettings()
self.checkSection()
# load/save config
def loadSettings(self):
dprint(__name__, 1, “load settings”)
# options -> default
dflt = {}
for opt in g_settings:
dflt[opt] = g_settings[opt][0]
# load settings
self.cfg = ConfigParser.SafeConfigParser()
self.cfg.read(self.getSettingsFile())
def saveSettings(self):
dprint(__name__, 1, “save settings”)
f = open(self.getSettingsFile(), ‘wb’)
self.cfg.write(f)
f.close()
def getSettingsFile(self):
return sys.path[0] + sep + “Settings.cfg”
def checkSection(self):
modify = False
# check for existing section
if not self.cfg.has_section(self.section):
modify = True
self.cfg.add_section(self.section)
dprint(__name__, 0, “add section {0}”, self.section)
for opt in g_settings:
if not self.cfg.has_option(self.section, opt):
modify = True
self.cfg.set(self.section, opt, g_settings[opt][0])
dprint(__name__, 0, “add option {0}={1}”, opt, g_settings[opt][0])
# save if changed
if modify:
self.saveSettings()
# access/modify PlexConnect settings
def getSetting(self, option):
dprint(__name__, 1, “getsetting {0}={1}”, option, self.cfg.get(self.section, option))
return self.cfg.get(self.section, option)
if __name__==”__main__”:
Settings = CSettings()
option = ‘enable_plexgdm’
print Settings.getSetting(option)
option = ‘enable_dnsserver’
print Settings.getSetting(option)
Settings.saveSettings()
del Settings
Having trouble posting Settings.py in this forum
#!/usr/bin/env python
import sys
from os import sep
import ConfigParser
from Debug import * # dprint()
“””
Global Settings…
PMS: plexgdm, ip_pms, port_pms
DNS: ip_dnsmaster – IP of Router, ISP’s DNS, … [dflt: google public DNS]
IP_self: enable_plexconnect_autodetect, ip_plexconnect – manual override for VPN usage
HTTP: ip_webserver, port_webserver – override when using webserver + forwarding to PlexConnect
HTTPS: port_ssl, certfile –
“””
g_settings = { \
‘enable_plexgdm’ :(‘True’, ‘False’), \
‘ip_pms’ :(‘192.168.178.10’,), \
‘port_pms’ :(‘32400’,), \
\
‘enable_dnsserver’:(‘True’, ‘False’), \
‘port_dnsserver’ :(’53’,), \
‘ip_dnsmaster’ :(‘8.8.8.8’,), \
‘prevent_atv_update’ :(‘True’, ‘False’), \
\
‘enable_plexconnect_autodetect’:(‘True’, ‘False’), \
‘ip_plexconnect’ :(‘0.0.0.0’,), \
\
‘ip_webserver’ :(‘0.0.0.0’,), \
‘port_webserver’ :(’80’,), \
‘port_ssl’ :(‘443’,), \
‘certfile’ :(‘./assets/certificates/trailers.pem’,), \
\
‘loglevel’ :(‘Normal’, ‘High’), \
‘logpath’ :(‘.’,), \
}
class CSettings():
def __init__(self):
dprint(__name__, 1, “init class CSettings”)
self.cfg = None
self.section = ‘PlexConnect’
self.loadSettings()
self.checkSection()
# load/save config
def loadSettings(self):
dprint(__name__, 1, “load settings”)
# options -> default
dflt = {}
for opt in g_settings:
dflt[opt] = g_settings[opt][0]
# load settings
self.cfg = ConfigParser.SafeConfigParser()
self.cfg.read(self.getSettingsFile())
def saveSettings(self):
dprint(__name__, 1, “save settings”)
f = open(self.getSettingsFile(), ‘wb’)
self.cfg.write(f)
f.close()
def getSettingsFile(self):
return sys.path[0] + sep + “Settings.cfg”
def checkSection(self):
modify = False
# check for existing section
if not self.cfg.has_section(self.section):
modify = True
self.cfg.add_section(self.section)
dprint(__name__, 0, “add section {0}”, self.section)
for opt in g_settings:
if not self.cfg.has_option(self.section, opt):
modify = True
self.cfg.set(self.section, opt, g_settings[opt][0])
dprint(__name__, 0, “add option {0}={1}”, opt, g_settings[opt][0])
# save if changed
if modify:
self.saveSettings()
# access/modify PlexConnect settings
def getSetting(self, option):
dprint(__name__, 1, “getsetting {0}={1}”, option, self.cfg.get(self.section, option))
return self.cfg.get(self.section, option)
if __name__==”__main__”:
Settings = CSettings()
option = ‘enable_plexgdm’
print Settings.getSetting(option)
option = ‘enable_dnsserver’
print Settings.getSetting(option)
Settings.saveSettings()
del Settings
Settings.cfg
[PlexConnect]
logpath = .
enable_dnsserver = True
ip_webserver = 0.0.0.0
prevent_atv_update = True
port_dnsserver = 53
enable_plexconnect_autodetect = True
port_pms = 32400
port_webserver = 80
ip_plexconnect = 0.0.0.0
certfile = C:/PlexConnect-master/assets/certificates/trailers.pem
ip_dnsmaster = 8.8.8.8
loglevel = Normal
ip_pms = 192.168.178.10
enable_plexgdm = True
port_ssl = 443
Hi Paul,
thanks. I posted a detailed workaround:
https://miapple.me/2013/09/09/installing-plexconnect-on-windows-7-8-and-8-1-after-apple-tv-update/
Check it out!
Cheers,
Gee Are
Hi Paul,
check these alternate instructions to get PlexConnect running on Windows:
https://miapple.me/2013/09/09/installing-plexconnect-on-windows-7-8-and-8-1-after-apple-tv-update/
Cheers,
Gee Are
Hi Gee,
Thank you, I will have another try tonight with the new link you posted 🙂
Hi Gee, no luck with the alternative link.
Going to call it a day, go back to using XMBC via HDMI
Thank you for your help.
I’m sorry for you! Sometimes it is better to sleep one night over that…
Hi,
I have followed your instructions up until the Install Plexconnect on windows 8.
All I get is a ZIP folder containing system files, not exe for install.
What do I do next?
Hi Paul,
downloading from https://github.com/iBaa/PlexConnect will deliver you a ZIP-file named ‘PlexConnect-master.zip’. Safe this file on your computer and unzip it. You will get a folder named ‘PlexConnect-master’ with a subfolder named ‘assets’ and a bunch of files in both folders.
Go to C:\Program Files (x86) and create an subfolder named ‘PlexConnect-XML_templates’ and copy all files and folders of the folder ‘PlexConnect-master’ in this folder (only the content!).
After that you have to follow this guide because of the latest Apple TV software update: https://miapple.me/2013/09/01/plexconnect-still-works-on-apple-tv-software-6-0-beta-5-4-seed-3-ios-7-after-update/
Cheers,
Gee Are
Hi Gee,
Had a feeling I would have to do something more.
Is your link the same as http://langui.sh./ ?
Hi Paul,
It is nearly the same because it is based an Paul Kehrer’s tweak, but with some small improvements and a clearer description….
Cheers,
Gee Are
Followed all these steps but still having issues, thinking it might have something to do with
I extracted the ZIP-file and copied all files in my PlexConnect folder …/PlexConnect-XML_templates (I removed all older files before).
What is the full path name you copied Plex Connect Folder too?
Also because Im based in Australia, will this make a difference?
Appreciate your help so far.
First, it makes no difference where you are based.
Second, ‘…/PlexConnect-XML_templates’ is ‘PlexConnect’! Maybe you are meaning the Plex Media Server folder: It is on …\Program Files (x86)\Plex\Plex Media Server. But this shouldn’t matter. It is important to start the Plex Media Server before you start PlexConnect!
Third, maybe I stated it not clearly in this post (I will correct it): You have to edit ‘Settings.py’ with a text editor (e.g. Notepad) as follows (Windows only!): Look for ‘ip_dnsmaster’ and substitute the following ‘8.8.8.8’ by the fixed (!) IP-address of your Windows PC. Safe it, start Plex Media Server, then PlexConnect and then it should work.
1) good to know, wasn’t sure
2) have plex media server running via Firefox at 127.0.0.1/32400/web/index.html#!/dashboard
3) run plexconnet.py and get the following
https://www.dropbox.com/s/iyrgej9s1ku4d37/Cmd_shot1.png
Another screenshot of Plexconnect activity
https://www.dropbox.com/s/qveowdeslgaaasd/Cmd_shot2.png?m
My settings file
#!/usr/bin/env python
import sys
from os import sep
import ConfigParser
from Debug import * # dprint()
“””
Global Settings…
PMS: plexgdm, ip_pms, port_pms
DNS: ip_dnsmaster – IP of Router, ISP’s DNS, … [dflt: google public DNS]
IP_self: enable_plexconnect_autodetect, ip_plexconnect – manual override for VPN usage
HTTP: ip_webserver, port_webserver – override when using webserver + forwarding to PlexConnect
HTTPS: port_ssl, certfile –
“””
g_settings = { \
‘enable_plexgdm’ :(‘True’, ‘False’), \
‘ip_pms’ :(‘192.168.178.10’,), \
‘port_pms’ :(‘32400’,), \
\
‘enable_dnsserver’:(‘True’, ‘False’), \
‘port_dnsserver’ :(’53’,), \
‘ip_dnsmaster’ :(‘192.168.1.107’,), \
‘prevent_atv_update’ :(‘True’, ‘False’), \
\
‘enable_plexconnect_autodetect’:(‘True’, ‘False’), \
‘ip_plexconnect’ :(‘0.0.0.0’,), \
\
‘ip_webserver’ :(‘0.0.0.0’,), \
‘port_webserver’ :(’80’,), \
‘port_ssl’ :(‘443’,), \
‘certfile’ :(‘./assets/certificates/trailers.pem’,), \
\
‘loglevel’ :(‘Normal’, ‘High’), \
‘logpath’ :(‘.’,), \
}
class CSettings():
def __init__(self):
dprint(__name__, 1, “init class CSettings”)
self.cfg = None
self.section = ‘PlexConnect’
self.loadSettings()
self.checkSection()
# load/save config
def loadSettings(self):
dprint(__name__, 1, “load settings”)
# options -> default
dflt = {}
for opt in g_settings:
dflt[opt] = g_settings[opt][0]
# load settings
self.cfg = ConfigParser.SafeConfigParser()
self.cfg.read(self.getSettingsFile())
def saveSettings(self):
dprint(__name__, 1, “save settings”)
f = open(self.getSettingsFile(), ‘wb’)
self.cfg.write(f)
f.close()
def getSettingsFile(self):
return sys.path[0] + sep + “Settings.cfg”
def checkSection(self):
modify = False
# check for existing section
if not self.cfg.has_section(self.section):
modify = True
self.cfg.add_section(self.section)
dprint(__name__, 0, “add section {0}”, self.section)
for opt in g_settings:
if not self.cfg.has_option(self.section, opt):
modify = True
self.cfg.set(self.section, opt, g_settings[opt][0])
dprint(__name__, 0, “add option {0}={1}”, opt, g_settings[opt][0])
# save if changed
if modify:
self.saveSettings()
# access/modify PlexConnect settings
def getSetting(self, option):
dprint(__name__, 1, “getsetting {0}={1}”, option, self.cfg.get(self.section, option))
return self.cfg.get(self.section, option)
if __name__==”__main__”:
Settings = CSettings()
option = ‘enable_plexgdm’
print Settings.getSetting(option)
option = ‘enable_dnsserver’
print Settings.getSetting(option)
Settings.saveSettings()
del Settings
Looks good…
Did you reboot your PC? If not, do it. Unplug your Apple TV, too.
‘ip_pms’ is ‘192.168.178.10’. Do you have any device occupying this IP-address in your home network? If so, switch this device to another IP-address.
Or try this and switch ‘ip_pms’ to ‘8.8.8.8’
Cool, have not tried reboot device and apple tv yet.
Will give that a try
Dont have a device occupying 192.168.178.10
Fingers crossed…
Pingback: PlexConnect Running On Apple TV Software 6.0 Beta (5.4 Seed 3) | miApple.me
Pingback: PlexConnect Running on Apple TV Software 5.3 And 5.4 Beta (iOS 7 Beta) | miApple.me