MPD文件本质是XML文件,其说明了DASH服务端流媒体视频切片的相关信息,包含分辨率,大小,帧率等等,因此在DASH客户端实现的第一步便是解析服务端的MPD文件,其常见结构如图所示:
MPD文件来源https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fps.mpd
例如需要解析出的Representation中的id,width和height属性值(图例中MPD文件写法比较复杂,同一<Representation - />标签中包含的子属性较多,因此需要调用xmlPullParser.getAttributeValue()方法遍历子属性)。如果一个标签中仅含有一个属性,如<name> fupenzi </name>这种,层层调用如果语句即可解析,参见《Android第一行代码》。
Android 提供了三种解析XML的方式:SAX(Simple API XML), DOM(Document Object Model), Pull (Android官方推荐)
SAX是一个用于处理XML事件驱动的“推”模型,
优点是一种解析速度快并且占用内存少的xml解析器,它需要哪些数据再加载和解析哪些内容。
缺点是它不会记录标签的关系,而要让你的应用程序自己处理,这样就增加了你程序的负担。
DOM是一种文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。
优点是DOM技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,DOM技术使得页面的交互性大大地增强。
缺点是DOM解析XML文件时,会将XML文件的所有内容以文档树方式存放在内存中。
PULL解析和SAX解析很相似,PULL解析和SAX解析不一样的地方是PULL读取XML文件后触发相应的事件调用方法返回的是数字,还有PULL可以在程序中控制想解析到哪里就可以停止解析。
DOM方式最直观和容易理解,但是只适合XML文档较小的时候使用,而SAX方式更适合在移动终端系统中使用,因为相比DOM占用内存少,适合处理比较大的XML文档,最后的Pull方式使用场合和SAX类似,但是更适合需要提前结束XML文档解析的场合。
具体解析过程可参见Android解析XML的三种方式_d_shadow的博客-CSDN博客_android 读取xml
创建一个应用程序,简单演示一下MPD文件的PULL方法解析过程,创建项目XMLParser。
依赖
dependencies {
implementation fileTree