ijk缓存

作者: 一川烟草i蓑衣 | 来源:发表于2019-06-19 10:51 被阅读0次

ijk是在ijkiocache.c中开启缓存的:

ijkio_cache_read()函数是读取视频数据的方法,包括网络读取和文件读取;下面是ijkio_cache_read函数的主要内容:

 if (c->cache_file_close) {  //是缓存读关闭了还是写关闭了?应该是写

        return wrapped_url_read(h, dest, to_read); //如果缓存关闭了,就从网络读取

    }

 if (!c->cache_file_forwards_capacity) { 

        ret =ijkio_cache_sync_read(h, buf, size); //如果没有设置cache_file_forwards_capacity就开启同步读,否则从本地文件读取

        if(ret >=0) {

            c->read_logical_pos+= ret;

        }

        call_inject_statistic(h);

        return (int)ret;

    }

ijkio_cache_sync_read():

先判读能不能从文件读;如果不能就从网络加载,如果从网络加载会调用wrapped_url_read读取并且会调用sync_add_entry往本地写入,sync_add_entry会调用write(c->fd, buf, size)方法;

cache_file_forwards_capacity:向前缓存的大小,比如1M,如果cache_file_forwards_capacity大于0那么ijkio_cache_task也会开启写缓存操作,那么上面的缓存写就不生效了

IjkIOCacheContext和IjkCacheEntry详解:

IjkIOCacheContext:

logical_size-文件大小,read_logical_pos已读缓存大小,read_inner_pos-读的网络的位置,io_eof_reached读到缓存末尾,cache_physical_pos-已经缓存到的位置,last_physical_pos-上一次缓存的位置,only_read_file-初始化时设置、只读不写模式

IjkCacheEntry:

描述了进入时开始进入缓存的位置,logical_pos-进入时的逻辑位置,physical_pos-进入时的实际位置,size-已经缓存的大小

 ijkio_cache_sync_read是进行读操作的函数: int64_t physical_target = entry->physical_pos+ in_block_pos; //计算缓存开始读取的位置

IjkCacheEntry,IjkCacheTreeInfo,IjkAVTreeNode:

IjkCacheTreeInfo包含一个根root IjkAVTreeNode,IjkAVTreeNode中的elem是IjkCacheEntry类型;

IjkCacheTreeInfo中的值分别是hyu文件中tree_开头的的,IjkCacheEntry中的值是hyu中entry_开头的

相关文章

网友评论

      本文标题:ijk缓存

      本文链接:https://www.haomeiwen.com/subject/kbfcqctx.html