最近适配摄像头,自然的就要接收、传递音频视频数据。而这些数据是非常频繁的,如果每次都新建缓冲区,一个是影响性能,另外也显得自己水平太低。怎么办?上缓存。
音频、视频当然要分开缓存。代码很类似,自然的吾就新建了一个类,
起名?Manager显然不合适,叫Worker最好。Queue、Cache都不是太适合。
数据队列LinkedBlockingDeque,缓存用ConcurrentLinkedQueue。
派发数据,当然要用线程。否则一阻塞就误事了。
收到数据后,先在缓存中查找,找到合适的就从缓存中删除;没有合适的新建。之后将数据复制后放入数据队列中。
派发线程使用队列取数据时(当然也可以使用休眠办法),有数据就派发,派发结束后加入缓存。
上述步骤显然也是轻车熟路了。然后就发现,过一会就卡死。这是怎么回事?经过检查原因是:
音频每次缓冲区大小一样,所以数量有限即可解决。
视频每次都不一样,于是新建了大量缓冲区。队列中人满为患了。
试的结果,还是不行,会卡死。
又想了其他办法。包括开始就新建好,,使用ThreadLocal,结果都不行。怎么办?暂时没办法