diff --git a/.coveragerc b/.coveragerc
index b8a5457f69b0560d82b55151e5199c30b213e80c..06cfc7d7471dc7fbe62cab7866bf2ca286fa32ae 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -99,6 +99,7 @@ omit =
     homeassistant/components/media_player/mpd.py
     homeassistant/components/media_player/plex.py
     homeassistant/components/media_player/samsungtv.py
+    homeassistant/components/media_player/snapcast.py
     homeassistant/components/media_player/sonos.py
     homeassistant/components/media_player/squeezebox.py
     homeassistant/components/notify/free_mobile.py
diff --git a/homeassistant/components/media_player/snapcast.py b/homeassistant/components/media_player/snapcast.py
new file mode 100644
index 0000000000000000000000000000000000000000..23ce1515f397c62876828e40110c7228edbc47ea
--- /dev/null
+++ b/homeassistant/components/media_player/snapcast.py
@@ -0,0 +1,85 @@
+"""
+homeassistant.components.media_player.snapcast
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Provides functionality to interact with Snapcast clients.
+
+For more details about this platform, please refer to the documentation at
+https://home-assistant.io/components/media_player.snapcast/
+"""
+
+import logging
+import socket
+
+from homeassistant.const import (
+    STATE_ON, STATE_OFF)
+
+from homeassistant.components.media_player import (
+    MediaPlayerDevice,
+    SUPPORT_VOLUME_SET, SUPPORT_VOLUME_MUTE)
+
+SUPPORT_SNAPCAST = SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE
+DOMAIN = 'snapcast'
+REQUIREMENTS = ['snapcast==1.1.1']
+_LOGGER = logging.getLogger(__name__)
+
+
+# pylint: disable=unused-argument
+def setup_platform(hass, config, add_devices, discovery_info=None):
+    """ Sets up the Snapcast platform. """
+    import snapcast.control
+    host = config.get('host')
+    port = config.get('port', snapcast.control.CONTROL_PORT)
+    if not host:
+        _LOGGER.error('No snapserver host specified')
+        return
+    try:
+        server = snapcast.control.Snapserver(host, port)
+    except socket.gaierror:
+        _LOGGER.error('Could not connect to Snapcast server at %s:%d',
+                      host, port)
+        return
+    add_devices([SnapcastDevice(client) for client in server.clients])
+
+
+class SnapcastDevice(MediaPlayerDevice):
+    """ Represents a Snapcast client device. """
+
+    # pylint: disable=abstract-method
+
+    def __init__(self, client):
+        self._client = client
+
+    @property
+    def name(self):
+        """ Device name. """
+        return self._client.identifier
+
+    @property
+    def volume_level(self):
+        """ Volume level. """
+        return self._client.volume / 100
+
+    @property
+    def is_volume_muted(self):
+        """ Volume muted. """
+        return self._client.muted
+
+    @property
+    def supported_media_commands(self):
+        """ Flags of media commands that are supported. """
+        return SUPPORT_SNAPCAST
+
+    @property
+    def state(self):
+        """ State of the player. """
+        if self._client.connected:
+            return STATE_ON
+        return STATE_OFF
+
+    def mute_volume(self, mute):
+        """ Mute status. """
+        self._client.muted = mute
+
+    def set_volume_level(self, volume):
+        """ Volume level. """
+        self._client.volume = round(volume * 100)
diff --git a/requirements_all.txt b/requirements_all.txt
index 377a06ab21d354d62b85b09dec44f8bcb0527123..1a0994258bd22137184de841ffd7c090bbf0b517 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -227,6 +227,9 @@ slacker==0.6.8
 # homeassistant.components.notify.xmpp
 sleekxmpp==1.3.1
 
+# homeassistant.components.media_player.snapcast
+snapcast==1.1.1
+
 # homeassistant.components.sensor.speedtest
 speedtest-cli==0.3.4