博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Atitit mtp ptp rndis midi协议的不同区别
阅读量:4947 次
发布时间:2019-06-11

本文共 4670 字,大约阅读时间需要 15 分钟。

Atitit mtp ptp rndis midi协议的不同区别

 

 

 

1. PTP

 图片传输协议的 缩写,全称为:picture transfer protocol
PTP是最早由柯达与微软协商制定的一种标准,符合这种标准的图像设备在接入 之后可以更好地被系统和应用程序所共享,尤其在方面,系统可以直接访问这些设备用于建立时图片的上传、时图片的传送等

2. MTP

MTP in Android

MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议。Android3.0开始支持MTP。不过,在今天的智能手机领域内,Google和微软是一对冤家

 媒体传输协议,是基于PTP(Picture Transfer Protocol)协议的扩展,主要用于传输媒体文件,其中有价值的应用就是同步DRM文件的license。目前支持MTP协议的只有 WMP10( Media Player 10)WMP11( Media Player 11)两个版本,WMP11加入了对PlaylistAlbum art的支持,在获取媒体文件信息的时候GetObjectPropList代替了WMP10GetObjectInfo命令。
MTP支持对的音乐文件和移动上的电影文件的传输,它是 Windows Media框架的一部分,因此与Windows Media Player紧密相关。Windows Vista内建了对MTP的支持,在Windows XP中支持MTP需要安装Window Media Player 10或以上的版本。MacLinux有支持MTP的软件包。
MTP的应用分两种角色,一个是作为Initiator,另一个作为Responder。例如:WMP(Windows Media Player)就是Initiator,而portable media player设备就是作为ResponderResponder都是被动的回复Initiator的命令,不会主动发命令。主要的用途是传输媒体文件(Media File),并从(向)设备关联元数据,对设备的远程控制有可选的额外支持,读取和设置设备参数,如特别的DRM相关的受限内容设备参数。设备也可向主机发送事件(event)。
MTP既可以实现在USB协议上,也可以实现在上,它属于上层的应用协议,而不关心底层传输协议。目前大部分设备的应用都是基于USB协议。市场上支持MTP的设备有MotorolaZ6, U9, E8等,还有NWZ-A81X系列。总之有越

3. Mtp usb区别

 

 背景知识介绍

笔者相信《程序员》杂志的绝大多数读者或多或少都使用过MTP。因为早在智能手机普及前,数码相机和MP3播放器等都使用了MTP的前身PTPPicture 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的使用者包括两个部分,分别是InitiatorResponder。如图1-1所示:

1-1 InitiatorResponder图示

由图1-1可知:

· Initiator:主要是指USB Host,例如PC机,笔记本等。协议规定所有MTP操作只能由Initator发起。

· Responder:一般是诸如数码相机、智能手机等存储媒体文件的设备。Responder在MTP中的作用就是处理Initator发起的请求。同时,它还会根据自身状态的变化发送Event以通知Initiator。

注意:后文我们将统一以PC代表InitiatorAndroid手机代表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既是Remote,既是远程

Remote Network Driver Interface Specification,既是Remote,既是远程。基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。[1] 

 

NDISNetwork Driver Interface Specification,即NDIS的主要目的就 是为NICNetwork Interface Cards)制定出标准的API接口。MACMedia 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://blog.csdn.net/attilax

Atiend

 

 

转载于:https://www.cnblogs.com/attilax/p/5963212.html

你可能感兴趣的文章
C#jbox小节
查看>>
结构体指针释放的问题
查看>>
C#枚举Enum[轉]
查看>>
第三百五十七天 how can I 坚持
查看>>
【动态规划】流水作业调度问题与Johnson法则
查看>>
startActivityForResult不起作用
查看>>
Python&Selenium&Unittest&BeautifuReport 自动化测试并生成HTML自动化测试报告
查看>>
活现被翻转生命
查看>>
POJ 1228
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>
springmvc怎么在启动时自己执行一个线程
查看>>
流操作的规律
查看>>
Python基础学习15--异常的分类与处理
查看>>
javascript运算符的优先级
查看>>
React + Redux 入门(一):抛开 React 学 Redux
查看>>
13位时间戳和时间格式化转换,工具类
查看>>
vue router-link子级返回父级页面
查看>>
C# 通知机制 IObserver<T> 和 IObservable<T>
查看>>
Code of Conduct by jsFoundation
查看>>
div 只显示两行超出部分隐藏
查看>>