Atitit mtp ptp rndis midi協議的不同區別
6. rndis既是RemoteNDIS,既是遠程網絡驅動接口規范。8
1. PTP:
圖片傳輸協議的 縮寫,全稱為:picture transfer protocol;
PTP是最早由柯達與微軟協商制定的一種標准,符合這種標准的圖像設備在接入Windows XP系統之后可以更好地被系統和應用程序所共享,尤其在網絡傳輸方面,系統可以直接訪問這些設備用於建立網絡相冊時圖片的上傳、網上聊天時圖片的傳送等
2. MTP:
MTP in Android
MTP的全稱是Media Transfer Protocol(媒體傳輸協議),它是微軟公司提出的一套媒體文件傳輸協議。Android從3.0開始支持MTP。不過,在今天的智能手機領域內,Google和微軟是一對冤家
媒體傳輸協議,是基於PTP(Picture Transfer Protocol)協議的擴展,主要用於傳輸媒體文件,其中有價值的應用就是同步DRM文件的license。目前支持MTP協議的只有 WMP10(Windows Media Player 10)和WMP11(Windows Media Player 11)兩個版本,WMP11加入了對Playlist和Album art的支持,在獲取媒體文件信息的時候GetObjectPropList代替了WMP10的GetObjectInfo命令。
MTP支持對數字音頻播放器的音樂文件和移動媒體播放器上的電影文件的傳輸,它是 Windows Media框架的一部分,因此與Windows Media Player緊密相關。Windows Vista內建了對MTP的支持,在Windows XP中支持MTP需要安裝Window Media Player 10或以上的版本。Mac和Linux有支持MTP的軟件包。
MTP的應用分兩種角色,一個是作為Initiator,另一個作為Responder。例如:WMP(Windows Media Player)就是Initiator,而portable media player設備就是作為Responder。Responder都是被動的回復Initiator的命令,不會主動發命令。主要的用途是傳輸媒體文件(Media File),並從(向)設備關聯元數據,對設備的遠程控制有可選的額外支持,讀取和設置設備參數,如特別的DRM相關的受限內容設備參數。設備也可向主機發送事件(event)。
MTP既可以實現在USB協議上,也可以實現在TCP/IP協議上,它屬於上層的應用協議,而不關心底層傳輸協議。目前大部分設備的應用都是基於USB協議。市場上支持MTP的設備有Motorola的Z6, U9, E8等,還有索尼NWZ-A81X系列。總之有越
3. Mtp 與usb區別
背景知識介紹
筆者相信《程序員》雜志的絕大多數讀者或多或少都使用過MTP。因為早在智能手機普及前,數碼相機和MP3播放器等都使用了MTP的前身PTP(Picture Transfer Protocol)進行媒體文件傳輸。那時,只要通過USB數據線把它們連接上Windows操作系統,就能在“我的電腦“中見到這些設備了。此后,用戶可以把它們當做U盤一樣使用,例如對其進行目錄、文件的瀏覽和拷貝等操作。
既然可以通過MTP把智能設備當作U盤使用,那么它和我們常用的USB大容量存儲(USB Mass Storage,簡稱UMS)有何不同呢?
· UMS模式下,PC操作存儲設備的粒度是設備塊(FAT block),而非文件系統。什么意思?此處舉一個簡單例子。當Android手機通過UMS將sdcard掛載到PC后,PC就擁有對sdcard的絕對控制權。這樣,手機就無法同時訪問sdcard了。這種做法帶來的后果就是Camera或Music程序將因沒有外部存儲空間而提示無法進行操作(注意,有些廠商的手機對此進行過修改,使得Camera能短時間錄制一部分視頻到內部存儲空間)。這也是Android早期版本中一個很明顯的特點。另外,由於PC在操作sdcard時可能弄壞其文件系統,這將導致sdcard重新掛載到手機后不能被識別。
如果Android手機的sdcard以MTP模式掛載到PC機上,sdcard的控制權其實還是屬於手機。只不過智能手機通過MTP協議向PC機構建了一個虛擬文件系統。PC機操作其中的文件時,都會通過標准MTP協議向智能手機發起請求。另外,Android把MTP功能集成在MediaProvider[1]中,其好處是PC機操作(例如拷貝或刪除等)媒體文件時,媒體數據都會及時更新到媒體數據庫中。而UMS模式下,當sdcard掛載回手機后,Android還得花較長時間重新掃描媒體文件以更新媒體數據庫。
4. 不過和UMS相比,MTP也有不足之處:
· 傳輸大文件的速度較慢。
· MTP不能直接修改文件本身。只能先拷貝到本地修改,完畢后再拷貝回去。
· 除了Windows外,Linux和MacOS對MTP支持還不是很完善。
5. MTP協議介紹
根據協議,MTP的使用者包括兩個部分,分別是Initiator和Responder。如圖1-1所示:
圖1-1 Initiator和Responder圖示
由圖1-1可知:
· Initiator:主要是指USB Host,例如PC機,筆記本等。協議規定所有MTP操作只能由Initator發起。
· Responder:一般是諸如數碼相機、智能手機等存儲媒體文件的設備。Responder在MTP中的作用就是處理Initator發起的請求。同時,它還會根據自身狀態的變化發送Event以通知Initiator。
注意:后文我們將統一以PC代表Initiator,Android手機代表Responder。
與很多協議一樣,MTP也有自己的協議棧,如圖1-2所示:
圖1-2 MTP協議棧
由圖1-2可知,MTP協議棧由下到上分別是:
· Pyshical Layer(物理層):物理層在MTP協議中用來傳輸數據。目前有三種物理層可供MTP使用。它們分別是USB:其主要特點是傳輸文件,同步媒體文件時速度快,而且可以邊工作邊充電,這是目前用的最多的一種方式;IP:基於IP的MTP(簡稱MTP/IP)將通過UPnP來匹配和發現設備。它是家庭網絡中是最理想的傳輸方式;Bluetooth:MTP/BT是最省電,同時也是速度最慢的一種傳輸方式,用處較少。
· 傳輸層:MTP中,數據傳輸格式遵循PTP協議
· 命令層:實現了MTP協議中的各種命令。
如上文所述,MTP采用命令-應答方式來工作(Initator發送命令給Responder處理,Responser反饋處理結果),這種方式的主要特點有:
· 所有MTP命令均以Package(數據包)的方式在設備兩端進行傳遞。
· Initiator必須接收到前一條消息的處理結果(不論是成功還是超時)后,才能發送下一條消息。
下面我們將以PC通過MTP打開一個文件為例,按順序介紹其中涉及到幾個主要MTP命令:
· 當設備第一次連接上PC后,Initiator(即PC)首先會發送一個名為GetDeviceInfo的請求以獲取設備的信息,這些信息包括設備所支持PTP版本的程度,以百分號表示(默認是100)、所支持的MTP命令(Operation Supported)、所支持的Event類型等。
· 接着PC端會發送OpenSession命令以創建一個會話,該會話一直保持到設備從PC上斷開為止。此后所有命令(除GetDeviceInfo命令外)必須在此會話存活期間才能發送。會話在MTP協議中由SessionID來標識,它是一個32位的無符號整型,由PC選擇並傳給手機。
· PC端如果要進行文件操作的話,必須從根目錄開始定位目標文件。由於Windows的特殊性,手機內部存儲卡在windows系統中顯示為盤符。注意,如果手機內部有兩塊存儲卡的話(如內部存儲卡和外部sd卡),Windows中會顯示為兩個盤符。PC端需要通過GetStorageIDs命令返回某個盤符對應的StorageID。在MTP中,StorageID是一個32位無符號整型,每一個StorageID代表了一個邏輯盤符。
· PC端可以根據上一步的StorageID號,利用GetStorageInfo操作去獲取存儲設備的信息,例如剩余存儲空間、文件系統類型、訪問權限等。
· 接着,PC就會通過GetObjectHandles命令來獲取此盤符下的文件和子目錄的Object Handles(一個Object Handle代表一個文件或目錄。該值由Responder生成並保證唯一性)。有了Object Handle,PC就可以操作這些文件或目錄了,例如繼續通過GetObjectHandles獲取某個目錄中子文件和子目錄的信息。
· 假設現在需拷貝一個文件到手機上,那么PC會通過SendObjectInfo命令將文件信息(如文件名、文件大小)等傳遞給手機。而手機需要檢查目標目錄是否有足夠的空間和對應權限。
· 如果一切正常,PC將通過SendObject把數據傳遞給手機。真正寫文件到設備存儲空間的則是手機中的Responder。Android實現的MTP還會在媒體文件傳輸完畢后,將信息更新到媒體數據庫中。
· 除此之外,PC還可利用SetObjectPropValue 命令來設置文件的各種屬性值,如Audio BitRate(比特率),Sample Rate(采樣率),Number Of Channels(聲道)等。
以上為讀者描述了MTP使用的一個簡單案例。至於其中的各種MTP命令,讀者不妨閱讀參考文獻1,即《MTP Specification v1.0.pdf》。協
6. rndis既是RemoteNDIS,既是遠程網絡驅動接口規范。
Remote Network Driver Interface Specification,既是RemoteNDIS,既是遠程網絡驅動接口規范。基於USB實現RNDIS實際上就是TCP/IP over USB,就是在USB設備上跑TCP/IP,讓USB設備看上去像一塊網卡。[1]
NDIS是Network Driver Interface Specification,即網絡驅動接口規范。NDIS的主要目的就 是為NIC(網絡接口卡,Network Interface Cards)制定出標准的API接口。MAC(介質訪問控制,Media Access Controller)設備驅動封裝了所有的NIC硬件 實現,這樣一來所有的使用相同介質的NIC就可以通過通用的編程接口被訪問。 NDIS同時也提供一個函數庫(有時也稱作wrapper),這個庫中的函數可以被MAC驅動調用,也可以被高層的協議(例如TCP/IP)驅動調用。這些wrapper函數使得MAC驅動和協議驅動的開發變得更加容易。
參考資料
論MTP模式與USB存儲模式(MTP in Android)!-魅族手機-魅族社區.html
作者:: 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 )
漢字名:艾提拉(艾龍), EMAIL:1466519819@qq.com
轉載請注明來源: http://www.cnblogs.com/attilax/
Atiend