1. 数据源设置DataSource
对于http progressive download模式的数据源,分为两步完成:
1. 客户端调用setDataSource(const char*uri, …)后,AwesomePlayer保存了uri的值,其实没有做什么实质的事情,也没有发起连接。真正的连接网络并sniff的过程是在prepare的时候才进行的。
2. 客户端调用prepare,AwesomePlayerpost一个onPrepareAsyncEvent事件,在其回调函数中调用finishSetDataSource_l函数,发起连接获取源的文件头,读取文件头的MIMETYPE信息,再根据MIMETYPE信息创建相应的MediaExtractor。最后这个MediaExtractor才是AwesomePlayer的数据源。读取原始数据源的dataSource将委托给MediaExtractor来调用。AwesomePlayer只从MediaExtractor中读取已经extract过的数据。
在finishSetDataSource_l中,用到了几个DataSource
1. NuCachedSource2,带缓存的DataSource,不包含媒体信息,只管理缓存以及调用底层的DataSource读取和缓存数据。可以获取缓存的信息以及操作缓存。
2. HTTPBase,基于http连接的DataSource,具有带宽管理功能,没有实现http连接功能
3. ChromiumHTTPDataSource,HTTPBase的子类,真正操作和管理http连接及状态。ChromiumHTTPDataSource本身也不会直接操作socket,而是采用SfDelegate作为http协议栈来进行http连接的发起和关闭,本身通过注册回调函数(onConnectionEstablished, onDisconnectComplete等)来获取连接信息。ChromiumHTTPDataSource不进行