{{위키데이터 속성 추적}}
'''미디어 전송 프로토콜'''(Media Transfer Protocol, '''MTP''')는 International Imaging Industry Association 고안한 PTP(Picture Transfer Protocol)를 [[마이크로소프트]]가 [[디지털 카메라]] 외의 장치들(디지털 오디오 플레이어, 이동형 미디어 장치/휴대형 비디오 플레이어)로부터 적용되도록 확장한 것이다.

미디어 전송 프로토콜은 [[윈도우 미디어]] [[프레임워크]]의 한 부분으로, [[윈도우 미디어 플레이어]]와 밀접한 관계를 맺고 있다. [[윈도우 비스타]]는 MTP에 대한 지원을 내장하고 있고 [[윈도우 XP]]에 대한 지원은 윈도 미디어 플레이어 10 이후 버전을 설치를 필요로 한다.

[[맥 오에스 텐]]이나 [[리눅스]]같은 다른 운영체제 시스템은 네이티브 수준으로 지원하지 않지만 이를 지원하는 소프트웨어 꾸러미를 가지고 있다.

USB 임플리멘터스 포럼 디바이스 워킹 그룹(Implementers Forum device working group)은 MTP를 2008년 5월에 fully fledged USB 기기 클래스로 표준화하였다. 그 이후로 MTP는 공식적인 PTP(Picture Transfer Protocol, [[사진 전송 프로토콜]])의 확장이고 같은 class code를 공유한다.

== 일반적인 사양 ==
MTP는 USB로 구현된다. MTP 장치에 접속하는 호스트를 MTP Initiator라고 하고, MTP 장치는 MTP Responder라 한다.

MTP가 지향하는 목적은 장치로부터 미디어 파일과 이와 연관된 메타데이터를 전송하는 데에 있고 여기에 부가적으로 장치에 대한 원격제어를 통해 제한된 DRM 관련 장치 매개변수를 읽고 설정하는 것이다. 또한 장치가 MTP를 통해 호스트에 이벤트를 보낼 수도 있다.

USB 대용량 장치 계열 대신 MTP를 사용하는 주 이유는 USB 대용량 장치 계열이 장치(MSC, [https://en.wikipedia.org/wiki/USB_mass-storage_device_class mass-storage device class])를 논리 파일 수준이 아니라 낮은 수준의 블록 인터페이스에서 동작하기 때문이다. 다시 말해, USB 대용량 장치 계열은 호스트 컴퓨터가 대상 장치와 안전하게 공유될 수 있는 파일 시스템에 접근하지 않고 콤팩트 플래시와 같은 대용량 기억 장치를 대상으로 특성 없는 접근을 제공하도록 설계되었다는 것이다.

이를테면, USB 호스트 컴퓨터가 MSC 파티션을 마운트한다면, 해당 기억 장치에 대한 절대적인 제어권을 얻게 된다. 이렇게 되면 호스트 컴퓨터가 연결을 끊을 때까지 데이터 손상의 위험에 노출되게 된다.

MTP와 PTP는 이런 문제를 극복하기 위해 대상 장치를 낮은 수준의 블록 수준이 아니라 장치를 로컬 파일로 다룬다.

여기에 부가적으로 MTP는 MTP Initiator가 장치의 특별한 기능을 파악할 수 있게 하고, 또 접근이 제한된 파일에 대해 접근하기 위해 암호와 같은 정보를 제공할 수도 있다. 참고로 이런 기능은 핵심 표준에서 정해진 것이 아니라 업체의 확장(Vendor extension)을 통해 가능한 기능이다.

== 직접 수정 및 부분 전송 기능 ==
이 기능들은 전체 파일 전송 및 다시 업로드 보다 더 효율적인 대안으로 사용할 수 있다.

MTP 1.1 사양의 경우:<ref name="spec1.1">{{웹 인용 |url=http://www.usb.org/developers/docs/devclass_docs/MTPv1_1.zip# |제목=MTP Specification 1.1 on USB.org |확인날짜=2016-08-31 |보존url=https://web.archive.org/web/20150706181007/http://www.usb.org/developers/docs/devclass_docs/MTPv1_1.zip# |보존날짜=2015-07-06 |url-status=dead }}</ref>
{| class="wikitable"
|-
! Opcode !! 명령 이름 !! 설명
|-
| 0x9805 || GetObjectPropList ||rowspan=2| 메타데이터 전송
|-
| 0x9806 || SetObjectPropList
|-
| 0x1019 || MoveObject || 파일이나 디렉터리의 이름을 변경
|-
| 0x101B || GetPartialObject || 바이트 범위의 파일 요청
|}

=== 안드로이드 확장 ===
go-mtpfs에 따르면:<ref name="hanwen_android.go">{{웹 인용|url=https://github.com/hanwen/go-mtpfs/blob/master/mtp/android.go|title=hanwen/go-mtpfs|publisher=|accessdate=June 1, 2016}}</ref>
{| class="wikitable"
|-
! Opcode !! 명령 이름 !! 설명
|-
|0x95C1 || GetPartialObject64 || ''GetPartialObject''와 동일하지만 64비트 오프셋 포함
|-      || 
|0x95C2 || SendPartialObject ||''GetPartialObject64''과 동일하지만 호스트 대 디바이스 복사
|-      || 
|0x95C3 || TruncateObject || 64비트 길이로 잘라냄
|-      || 
|0x95C4 || BeginEditObject || ''SendPartialObject''와 ''TruncateObject''를 사용하기 전에 호출해야 함
|-      || 
|0x95C5 || EndEditObject || ''SendPartialObject''와 ''TruncateObject''가 취한 변경사항을 커밋하기 위해 호출됨
|}

== 같이 보기 ==
* [[윈도우 미디어]]
* [[USB 대용량 장치 계열]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* [https://web.archive.org/web/20150706181007/http://www.usb.org/developers/docs/devclass_docs/MTPv1_1.zip MTP 1.1 사양]
* {{웹 인용 |url=http://www.windowsfordevices.com/news/NS2933236821.html |제목=Article on Canon's adoption |확인날짜=2016-08-31 |보존url=https://web.archive.org/web/20081120064214/http://www.windowsfordevices.com/news/NS2933236821.html |보존날짜=2008-11-20 |url-status=dead }}

[[분류:마이크로소프트 API]]
[[분류:멀티미디어]]
[[분류:마이크로소프트 윈도우 멀티미디어 기술]]