BlueZ D-Bus Media API description
*********************************

Media hierarchy
===============

Service		org.bluez
Interface	org.bluez.Media
Object path	[variable prefix]/{hci0,hci1,...}

Methods		void RegisterEndpoint(object endpoint, dict properties)

			Register a local end point to sender, the sender can
			register as many end points as it likes.

			Note: If the sender disconnects the end points are
			automatically unregistered.

			possible properties:

				string UUID:

					UUID of the profile which the endpoint
					is for.

				byte Codec:

					Assigned mumber of codec that the
					endpoint implements. The values should
					match the profile specification which
					is indicated by the UUID.

				array{byte} Capabilities:

					Capabilities blob, it is used as it is
					so the size and byte order must match.

			Possible Errors: org.bluez.Error.InvalidArguments
					 org.bluez.Error.NotSupported - emitted
					 when interface for the end-point is
					 disabled.

		void UnregisterEndpoint(object endpoint)

			Unregister sender end point.

		void RegisterPlayer(object player, dict properties,
								dict metadata)

			Register a media player object to sender, the sender
			can register as many objets as it likes.

			Note: If the sender disconnects its objects are
			automatically unregistered.

			Properties:

				string Equalizer:

					Possible values: "off" or "on"

				string Repeat:

					Possible values: "off", "singletrack",
							"alltracks" or "group"

				string Shuffle:

					Possible values: "off", "alltracks" or
							"group"

				string Scan:

					Possible values: "off", "alltracks" or
							"group"

				string Status:

					Possible values: "playing", "stopped",
							"paused",
							"forward-seek",
							"reverse-seek" or
							"error"

				uint32 Position

					Playback position in milliseconds

			Metadata:

				string Title:

					Track title name

				string Artist:

					Track artist name

				string Album:

					Track album name

				string Genre:

					Track genre name

				uint32 NumberOfTracks:

					Number of tracks in total

				uint32 Number:

					Track number

				uint32 Duration:

					Track duration in milliseconds

			Possible Errors: org.bluez.Error.InvalidArguments
					 org.bluez.Error.NotSupported

		void UnregisterPlayer(object player)

			Unregister sender media player.

MediaPlayer hierarchy
=====================

Service		unique name
Interface	org.bluez.MediaPlayer
Object path	freely definable

Methods		void SetProperty(string property, variant value)

			Changes the value of the specified property. Only
			properties that are listed as read-write can be changed.

			On success this will emit a PropertyChanged signal.

		void Release()

			This method gets called when the service daemon
			unregisters the player which can then perform
			cleanup tasks. There is no need to unregister the
			player, because when this method gets called it has
			already been unregistered.

Signals		PropertyChanged(string setting, variant value)

			This signal indicates a changed value of the given
			property.

		TrackChanged(dict metadata)

			This signal indicates that current track has changed.
			All available metadata for the new track shall be set
			at once in the metadata argument. Metadata cannot be
			updated in parts, otherwise it will be interpreted as
			multiple track changes.

			Possible values:

				string Title:

					Track title name

				string Artist:

					Track artist name

				string Album:

					Track album name

				string Genre:

					Track genre name

				uint32 NumberOfTracks:

					Number of tracks in total

				uint32 Number:

					Track number

				uint32 Duration:

					Track duration in milliseconds

Properties	string Equalizer [readwrite]

			Possible values: "off" or "on"

		string Repeat [readwrite]

			Possible values: "off", "singletrack", "alltracks" or
					"group"

		string Shuffle [readwrite]

			Possible values: "off", "alltracks" or "group"

		string Scan [readwrite]

			Possible values: "off", "alltracks" or "group"

		string Status [readonly]

			Possible status: "playing", "stopped", "paused",
					"forward-seek", "reverse-seek" or
					"error"

		uint32 Position [readonly]

			Playback position in milliseconds. Changing the
			position may generate additional events that will be
			sent to the remote device. When position is 0 it means
			the track is starting and when it's greater than or
			equal to track's duration the track has ended. Note
			that even if duration is not available in metadata it's
			possible to signal its end by setting position to the
			maximum uint32 value.

MediaEndpoint hierarchy
=======================

Service		unique name
Interface	org.bluez.MediaEndpoint
Object path	freely definable

Methods		void SetConfiguration(object transport, dict properties)

			Set configuration for the transport.

		array{byte} SelectConfiguration(array{byte} capabilities)

			Select preferable configuration from the supported
			capabilities.

			Returns a configuration which can be used to setup
			a transport.

			Note: There is no need to cache the selected
			configuration since on success the configuration is
			send back as parameter of SetConfiguration.

		void ClearConfiguration(object transport)

			Clear transport configuration.

		void Release()

			This method gets called when the service daemon
			unregisters the endpoint. An endpoint can use it to do
			cleanup tasks. There is no need to unregister the
			endpoint, because when this method gets called it has
			already been unregistered.

MediaTransport hierarchy
========================

Service		org.bluez
Interface	org.bluez.MediaTransport
Object path	[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/fdX

Methods		dict GetProperties()

			Returns all properties for the interface. See the
			properties section for available properties.

		fd, uint16, uint16 Acquire(string accesstype)

			Acquire transport file descriptor and the MTU for read
			and write respectively.

			possible accesstype:

				"r" : Read only access

				"w" : Write only access

				"rw": Read and write access

		void Release(string accesstype)

			Releases file descriptor.

		void SetProperty(string name, variant value)

			Changes the value of the specified property. Only
			properties that are listed a read-write can be changed.

			On success this will emit a PropertyChanged signal.

Signals		void PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

Properties	object Device [readonly]

			Device object which the transport is connected to.

		string UUID [readonly]

			UUID of the profile which the transport is for.

		byte Codec [readonly]

			Assigned mumber of codec that the transport support.
			The values should match the profile specification which
			is indicated by the UUID.

		array{byte} Configuration [readonly]

			Configuration blob, it is used as it is so the size and
			byte order must match.

		uint16 Delay [readwrite]

			Optional. Transport delay in 1/10 of milisecond, this
			property is only writeable when the transport was
			acquired by the sender.

		boolean NREC [readwrite]

			Optional. Indicates if echo cancelling and noise
			reduction functions are active in the transport, this
			property is only writeable when the transport was
			acquired by the sender.

		boolean InbandRingtone [readwrite]

			Optional. Indicates if the transport support sending
			ringtones, this property is only writeable when the
			transport was acquired by the sender.

		string Routing [readonly]

			Optional. Indicates where is the transport being routed

			Possible Values: "HCI" or "PCM"
