Android http progressive streaming分析(2)

last access与Cache偏移位置之间可以保留一个kGrayArea大小的数据,这部分数据是已经访问过的数据,理论上可以被忽略并释放,但考虑到seek或其它操作(如带Bframe的媒体?)中会再次用到,如果释放的话会引起再次重连网络获取影响性能,因此在保留不释放。force变量用于控制释放cache时,是否保留gray area.

5.读取数据源readAt

readAt(off64_toffset, void *data, size_t size)

NuCachedSource2会首先在cache中查找offset和size是否能被满足(再次注意,cache中的多个page代表的是连续的媒体内容),如果满足,直接从cache中拷贝到目标指针并返回,否则post一个kWhatRead消息,调用线程被阻塞(condition.wait())。

onRead()回调

调用readInternal,返回-EAGAIN时,延迟50ms继续发送kWhatRead消息。直到成功或者返回IO错误时,broadcast解除阻塞中的调用线程。

readInternal

调用restartPrefetcherIfNecessary_l进行数据预取,如果不满足read条件(offset,size)则返回-EAGAIN,成功则拷贝目标数据。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/dd3bb9f58790267d7f449c3072bf4c6f.html