PlexConnect On Windows 8 And OS X 10.8.4: Plex Media Server On Apple TV 2 And 3 Without Jailbreak

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

Apple TV LogoAs 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 (Baaroidy 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.

Source: plexapp.com

Source: plexapp.com

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):

  1. 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!
  2. Download Python from here and take care to install the 2.7.5 version because PlexConnect will not run with a 3.X version.
  3. 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!
  4. If you start PlexConnect.py via double click, no AirPlay apps like AirServer should be running.
  5. 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! ;-)

Last updated by at .

29 replies
  1. Paul
    Paul says:

    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?

    Reply
    • Gee Are Pabst
      Gee Are Pabst says:

      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: http://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

      Reply
          • Paul
            Paul says:

            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.

            Reply
            • Gee Are Pabst
              Gee Are Pabst says:

              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.

              Reply
                  • Paul
                    Paul says:

                    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

                    Reply
                    • Gee Are Pabst
                      Gee Are Pabst says:

                      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′

                    • Paul
                      Paul says:

                      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…

      • Gee Are Pabst
        Gee Are Pabst says:

        I set up PlexConnect on my Windows 8 Pro PC again, following exactly http://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!

        Reply
        • Paul
          Paul says:

          Hi Gee,

          Restarted the whole process following the steps at http://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!

          Reply
        • Paul
          Paul says:

          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

          Reply
            • Paul
              Paul says:

              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

              Reply
            • PaulD
              PaulD says:

              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

              Reply

Trackbacks & Pingbacks

  1. […] November 14, 2013, Apple released the Apple TV 6.0.2 software update. PlexConnect is still running on Apple TV 6.0.2 (2nd and 3rd generation). I can confirm it for my Acer Aspire […]

  2. […] For Mac OS X: PlexConnect On Windows 8 And OS X 10.8.4: Plex Media Server On Apple TV 2 And 3 Without Jailbreak […]

  3. [...] new features, I was keen on knowing if PlexConnect will still run on Apple TV software 6.0 beta. PlexConnect, a brilliant solution to get Plex running on an Apple TV 2 or 3 without jailbreaking the [...]

  4. [...] PlexConnect is a brilliant solution to get Plex running on an Apple TV 2 or 3 without jailbreaking the device. Apple released some days ago Apple TV OS 5.3 with the following new services: In addition to HBO GO and WatchESPN, three new content providers are also available today on Apple TV including Sky News, Crunchyroll and Qello offering live news, sports and current TV programming. Beside this, Apple TV OS 5.4 beta (iOS 7) is available for developers, too. Apple TV software 5.4 beta now offers iTunes Radio, which Apple announced at WWDC would be coming to Apple TV in the fall, and a new feature called Conference Room Display. [...]

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>