Android http progressive streaming分析

本文详细介绍了Android中HTTP渐进式下载的工作原理,包括数据源设置DataSource、PageCache缓存数据结构、NuCachedSource2如何从网络读取数据、数据获取过程,以及缓存管理和预取策略。分析了NuCachedSource2的内部机制,如keepAlive和预取数据的逻辑,揭示了Android如何高效管理网络数据和本地缓存。
摘要由CSDN通过智能技术生成

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不进行

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值