メディア転送プロトコル

メディア転送プロトコル（メディアてんそうプロトコル、英: Media Transfer Protocol, MTP）は、画像転送プロトコル (PTP) に拡張を加えたものである。PTPはデジタルカメラから画像をダウンロードする目的で設計されているが、MTPはデジタルオーディオプレーヤーに音楽ファイルを転送したり、デジタルメディアプレーヤーに動画ファイルを転送する目的で設計されている。 MTPは Windows Media フレームワークの一部であり、Windows Media Player と密接に関連している。Windows Vista はMTPサポートが組み込まれている。Windows XP では、Windows Media Player 10（またはそれ以降のバージョン）をインストールする必要がある。macOS と Linux にはMTPサポートのためのソフトウェアパッケージがある。 USBインプリメンターズ・フォーラム のデバイスワーキンググループは2008年5月、MTPを ユニバーサル・シリアル・バス (USB) デバイスクラスの1つとして標準化した。それにより、MTPはPTPの公式な拡張として同じクラスコードを割り当てられている。ただし、2008年6月現在、PTPクラスコードをMTPデバイスに使用した例は知られていない。 このプロトコルはUSB上で使用するよう実装されている。MTPデバイスに接続するホストを「MTPイニシエータ (MTP Initiator)」と呼び、MTPデバイスを「MTPレスポンダ (MTP Responder)」と呼ぶ。 このプロトコルの主な目的はデバイスとの間でメディアファイルを対応するメタデータと共に転送することであり、オプションでデバイスのリモートコントロール、DRM関連のデバイスパラメータなどの読み書きをサポートしている。また、デバイスからホストにイベントを通知できる。 例えばUSBマスストレージクラスではなくMTPを使う利点は、前者が記憶装置のブロック単位（通常、FATのブロックサイズ）でしか操作できないのに対して、MTPは論理ファイルレベルで操作可能である。言い換えればUSBマスストレージクラスはコンパクトフラッシュなど通常のストレージと同様のアクセスを提供している。しかしデバイスが単なるUSBメモリではなく大容量メモリを持った自律的デバイスの場合、デバイス自身がストレージの内容を書き換える可能性がある。そのため、両者の更新がかち合ってファイルが破損する危険性が伴う。 MTPとPTPは、この問題を解決するため、ストレージ全体をブロックレベルで扱うのではなく、ファイル単位で管理する。 さらにMTPでは、MTPイニシエータがデバイスのファイルフォーマットや機能を把握することができる。MTPイニシエータでは、ファイルのアンロックや制限された機能を利用するためにパスワードなどの情報をデバイスに渡す必要がある。このような部分は規格の中核部には含まれず、ベンダーが自由に拡張できる。例えば MTPZ (Zune Extension to MTP) では、認証処理をしないとファイルへのアクセスができない。 設計上、MTPデバイス（およびPTPデバイス）はいわゆる可搬媒体としては扱われない。ファイルシステムはデバイス側で実装されており、コンピュータ側のファイルシステムが使われるわけではない。理論上はOSがこの違いを隠蔽できるが、WindowsやmacOSではそうなっていない。しかも、デバイスのファイルシステムが破損した場合、コンピュータ側の修復ツールでは修復できない。 さらに、MTPのI/Oコマンドは限定的である。コンテンツやキーワードの更新はできない。つまりファイルというオブジェクトを転送するだけであって、通常のファイルシステムのインタフェースとは異なる。[要出典] MP3やWAVといったメディアファイル以外のデータはMTPでは一般に転送できない。これは仕様上の制約というよりも、アプリケーションの実装上の制約である。ただし、Windows ではどういう拡張子のファイルでもMTPデバイスに転送可能である（Linuxにも同様の機能が存在する）。 Windows XPでは、Windows Media Player 10以降のバージョンをインストールすることでMTPに対応する。Windows Vistaには最初からMTPサポートが組み込まれている。MTP互換デバイスの多くはWindows Explorer上でドライブレター付きで表示されず、一種のデバイスとして表示される。さらにAutoSyncという機能があり、Windows Media Player でユーザーが設定することにより、自動的に新規コンテンツをデバイスに転送して同期させることができる。同期させるコンテンツの種類はユーザー設定可能である（4つ星以上に評価した楽曲だけ、など）。デバイス上で楽曲の評価などのプロパティを変更すると、ホストに次回接続したときにホスト側にそれを反映できる。Windows 7のセンサープラットフォームはMTP互換機器に組み込まれているセンサーもサポートする予定である。 旧バージョンのWindows (2000, 98, Me) 向けにはマイクロソフトが MTP Porting Kit をリリースしている。これにはMTPに関する文書やツールが含まれている。 Windows ExplorerはMTPデバイスをファイルシステムのように扱うが、ドライブレターは割り当てない。そのため、他のアプリケーションはMTPデバイス上のデータに直接アクセスできない。例えば、Windows XPでWindows Media Playerが同期しているとき、Windows Explorer経由以外でドラッグ・アンド・ドロップできない。ユーザーからは、ドラッグ・アンド・ドロップが出来るときと出来ないときがあるように見える。また、XPではUser-Mode Driver Framework サービスがバックグランドで動作している必要がある。 このプロトコル自身はファイル同期を実装していないが、SyncMLに類似した同期機構として、AppleのiSyncまたはWindows Media PlayerのAutoSyncを実装できる。 マイクロソフトのパートナーとして、クリエイティブテクノロジー、インテル、アイリバー、サムスンがマイクロソフトのPortable Media Center specificationに基づいて、このプロトコルを実装したデバイスを製造している。それらの機器は2004年のコンシューマー・エレクトロニクス・ショーで初公開された。 当初、市場での反応は薄かったが、各ベンダーはホスト用ドライバの開発が不要になることからMTPの採用を決めるところが増えていった。MTPをサポートした機器を発売している企業（または製品）としては、Archos、BlackBerry 9500シリーズ、キヤノン 400D (XTi) デジタル一眼レフカメラ、クリエイティブテクノロジー Creative Zen シリーズの一部、Cowon、インテルのポータブルメディアセンター、アイリバー、日本ビクター、マイクロソフト Zune（修正版のMTPZを使用）、モトローラ、ニコン、ノキア、パーム、フィリップス、サムスン電子、三洋電機 Xacti CG65、サンディスク、ソニー・エリクソン、ソニー、東芝 Gigabeat などがある。 マイクロソフトは、MTPまたはUSBマスストレージクラス(あるいは両方）をサポートし、Windows Media Audioをサポートする機器を認証するマークとしてPlaysForSureを使っていたが、"Subscription" マークを与えられたのはMTPサポートでDRM (Janus) 対応している機器のみであった。PlaysForSureプログラムは廃止され、現在ではCertified for Windows Vistaという名称が使われている。 MTP Basicは標準規格として提案され、各種プラットフォームで利用可能になっている。上述したWindows以外の状況を以下に述べる。 Xbox 360はMTPデバイスを接続可能 Linuxでは以下のような実装がある。 libgphoto2ライブラリ。これを使ったアプリケーションとしてF-Spotがある。 libmtpライブラリ。これを使ったアプリケーションとして、Amarok、Audacious、Banshee、Rhythmboxがある。 GNOMEのファイルでは、gphoto2:// というURIを付けることでMTPデバイスにアクセスできる。 MTPfsはlibmtpを使い、MTPデバイスをファイルシステムのようにマウントできる。 PCMan File Manager (PCManFM) はGVfsを利用して、MTPデバイスにWindowsのエクスプローラーのようにアクセスできる。 macOSではXNJBを使ってMTPをサポートしている（libmtpライブラリを移植したものを使用）。 Symbian OSはMTPサポート済み。 AmigaOSとMorphOSでは、Poseidon USB Stackを使ってMTPデバイスをサポートしている。 Songbirdでは、実験的にMTPをサポートしているが、今のところWindows XPまたはVistaでしか機能しない。 Androidでは、API Level 12 (Android 3.1) からサポートしている（パッケージ android.mtp）。 画像転送プロトコル (PTP) Windows Media