![]() |
![]() |
![]() |
![]() |
This chapter describes how to use the MME to synchronize and play media on PFS-enabled devices:
See also iofs-pfs.so in the MME Utilities Reference, and User-specified MTP commands to PFS devices in the MME Technotes.
If you want use an external media player, such as an iPod or a PlaysForSure-enabled device, you need to:
For more detailed instructions, see the QNX® Aviage Multimedia Suite Installation Note.
The PFS driver used by the MME can be started with one program instance per PFS device, rather than with a single program instance servicing multiple PFS devices. You have the option of starting iofs-pfs to service multiple PFS devices or to support one PFS device per instance of iofs-pfs.
To start iofs-pfs to support one PFS device per instance of iofs-pfs, use the device option and specify the paths for the bus, device and interface for each. For example, to handle two PFS devices (device=bus_no:device_no:interface_no):
# io-fs-media -dpfs,device=1:3:3 # io-fs-media -dpfs,device=2:4:6
![]() |
Bus, device and interface numbers are hexadecimal values. |
Zune devices are PFS devices, and require the PFS device driver iofs-pfs. In addition to the other PFS startup options, Zune devices require special key files that give them permission to access protected content. Please contact Microsoft to obtain these files.
Once you have placed the key files on your system, for example at /etc/pfs/, you can use the io-fs-media zune option to pass the paths to these files to your PFS driver. For example:
io-fs-media -dpfs,zune=/etc/pfs/p7b.der:/etc/pfs/priv_key.der
For information about the PFS driver, see iofs-pfs.so in the MME Utilities Reference.
When the MME detects a PFS device, it updates the mediastores table just as it does with other types of mediastores, and sets the storage_type column for the mediastore to MME_STORAGETYPE_MEDIAFS. To check if the mediastore you are working with is a PFS device, simply check the value of this column for the mediastore's entry in the mediastores table.
PFS device “Abstract Audio Aalbum” (or .alb) objects contain references to tracks in a specific album on a PFS device. The io-fs PFS driver offers an albdir option that lets you instruct the driver to treat these objects as directories or as files (default). This option should be used when a directed synchronization of, for example, the “Albums” directory on a PFS device is more efficient that synchronizing the entire mediastore.
If the default driver behavior is used: treat .alb objects as files, MME synchronization operations will not find media files via .alb objects files, preventing duplicate entries in the database when the entire mediastore is synchronized. However, because .alb objects are treated as files, their contents can not be browsed with the directed synchronization API.
If the optional driver behavior is used: treat .alb objects as directories is used, MME synchronization operations may synchronize the contents of .alb objects via multiple directories (such as the “Albums” and “Music” directories), and therefore make multiple entries in the MME database for each track listed in .alb objects. However, because .alb objects are treated as directories, their contents can be browsed with the MME directed synchronization or explorer APIs.
For more information about iofs-pfs.so, see iofs-pfs.so in the MME Utilities Reference.
If you do not want .alb objects synchronized, you can use the <SyncFileMask> in the MME configuration file mme.conf to instruct the MME to skip files with the extension .alb, :
<Configuration> ... <Database> ... <Synchronization> ... <SyncFileMask>\.alb$</SyncFileMask> ... <Synchronization> <Database> <Configuration>
![]() |
The <SyncFileMask> element can define multiple character strings identifying files to be ignored by the MME synchronization. For more information, see “Configurable file skipping: <SyncFileMask>” in the MME Configuration Guide. |
This section describes considerations specific to playing media on PFS devices, and to getting artwork from these devices. In includes:
The MME supports PlaysForSure (PFS) devices that play DRM-protected media. To play DRM-protected media on PFS devices, you must obtain the required key files from Microsoft, and use the MME's PFS module (iofs-pfs).
The library table's protected field is used to record that a file is known to be DRM-protected (1). If the file is known to not be DRM-protected, or if the MME does not know if the file is DRM-protected, this field is set to 0 (zero).
If you will use DRM-enabled devices on your system, you should start the PFS module with the drm option, so that it checks for the required files and exits if it does not find them. This strategy ensures that the MME does not fail when it attempts to playback DRM-protected media. For more information about configuring the MME to support PFS devices playing DRM-protected media, see “Configuring Digital Rights Management (DRM)” in the MME Configuration Guide.
![]() |
When you have finished playing media from a PFS device, you do not need to disconnect it from the MME. Just physically remove it from the system. |
DRM content decryption uses an AES block cipher with a 128-bit key. The AES key is unique to each playback session; it is different every time a song is played.
When the PFS module registers itself with the PlaysForSure device, it sends a certificate. This certificate contains the 1024-bit RSA public key that the device will use to encrypt the seed used to determine the AES key.
When the user selects DRM-protected content:
Zune devices are currently the only PFS devices for which the MME supports artwork retrieval.
To retrieve the artwork from a Zune device, use the MME's Load-on-Demand metadata extraction API as you would to retrieve metadata from any other device. That is:
For more information about metadata sessions for the Load-on-Demand metadata extraction API, see “Getting artwork” in the chapter Metadata and Artwork.
The default configuration for io-fs-media is to support only PFS devices that implement the GetPartialObject MTP command, as specified by the PFS 2.01 specification. Unless io-fs-media is configured to support PFS devices that don't support the GetPartialObject MTP command, attempting to access such a devices produces an info.xml file with the following: <NotSupported>101b</NotSupported>.
If your environment requires that you use devices that don't support the GetPartialObject MTP command, you must specify the getsize option and the buffer size when you start io-fs-media. For example, to specify a 3 megabyte buffer:
# io-fs-media -dpfs,getsize=3M
Devices that support only the GetObject MTP command require that the MME have enough memory allocated by the getsize option for it to read in the entire file. If the file exceeds the memory allocated, the read fails. Note, however, that you can have the MME allocate memory dynamically by setting getsize to 0 (getsize=0). This configuration allows the MME to use as much memory as is available to read a file, allowing it to read in bigger files — with the danger that all available dynamic memory may be allocated for a file read, leaving no dynamic memory available for other uses.
For more information about how to configure io-fs-media to work with legacy devices that don't fully support the PFS 2.01 specification, see iofs-pfs.so.
![]() |
![]() |
![]() |
![]() |