미디어 전송 프로토콜

위키백과, 우리 모두의 백과사전.

미디어 전송 프로토콜(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, mass-storage device class)를 논리 파일 수준이 아니라 낮은 수준의 블록 인터페이스에서 동작하기 때문이다. 다시 말해, USB 대용량 장치 계열은 호스트 컴퓨터가 대상 장치와 안전하게 공유될 수 있는 파일 시스템에 접근하지 않고 콤팩트 플래시와 같은 대용량 기억 장치를 대상으로 특성 없는 접근을 제공하도록 설계되었다는 것이다.

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

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

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

직접 수정 및 부분 전송 기능[편집]

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

MTP 1.1 사양의 경우:[1]

Opcode 명령 이름 설명
0x9805 GetObjectPropList 메타데이터 전송
0x9806 SetObjectPropList
0x1019 MoveObject 파일이나 디렉터리의 이름을 변경
0x101B GetPartialObject 바이트 범위의 파일 요청

안드로이드 확장[편집]

go-mtpfs에 따르면:[2]

Opcode 명령 이름 설명
0x95C1 GetPartialObject64 GetPartialObject와 동일하지만 64비트 오프셋 포함
0x95C2 SendPartialObject GetPartialObject64과 동일하지만 호스트 대 디바이스 복사
0x95C3 TruncateObject 64비트 길이로 잘라냄
0x95C4 BeginEditObject SendPartialObjectTruncateObject를 사용하기 전에 호출해야 함
0x95C5 EndEditObject SendPartialObjectTruncateObject가 취한 변경사항을 커밋하기 위해 호출됨

같이 보기[편집]

각주[편집]

  1. “MTP Specification 1.1 on USB.org”. 2015년 7월 6일에 원본 문서에서 보존된 문서. 2016년 8월 31일에 확인함. 
  2. “hanwen/go-mtpfs”. 2016년 6월 1일에 확인함. 

외부 링크[편집]