normandie 是一套播放框架及其实现,并且 90% 的接口与 android mediaplayer 一致,包括生命周期状态机的实现等等。方便原来 android 框架的开发者迁移。
在 android 上做音视频开发的同学应该比较清楚,除了 mediaplayer,android 还提供了其它播放音视频的类,比如视频播放的还有 videoview。normandie 在设计之初,就没有打算实现类似 videoview 这样的类。videoview 的优点是接口更简单,但它的缺点也是接口太简单,这里简单的意思是不够灵活。
音视频播放尤其是在线音视频播放的情况更为复杂,mediaplayer 可以为开发者提供更为灵活的接口,更贴近底层框架的能力,让开发者去发挥,videoview 大大的限制了开发者可以利用底层框架的能力。
下图是 mediaplayer 的状态机,设计的比较灵活 https://developer.android.com…
android mediaplayerhttps://developer.android.com…
android videoviewhttps://developer.android.com…
1. 开发者可以基于 normandie 的 mediaplayer api 自己根据需要定制,videoview,baseplayerview 都可以。2. 有开发者这么做了,并且将这个定制提供给其它业务使用,扩大了 normandie 的覆盖范围。但是之后随着一些业务的发展,这个定制就出现了之前提到的类似 videoview 不能满足业务需求的问题。举两个例子:(1). 类似 videoview 的定制不容易实现预加载,因为它提供的接口不能让开发者知道更多状态信息。预加载:同时多个 palyer 进行加载,但只有一个在前台播放。(2). 开发者想关心,拉取的内容的一些信息,比如分辨率等,类似 videoview 定制没有接口可以做。
有时候少即是多。