得到缓冲数据exoplayer

问题描述:

我不是很有经验的建设Android应用程序,我正在尝试使用ExoPlayer制作一个小应用程序。所以希望你们可以原谅我的无知。我基本上试图看看是否有办法访问缓冲文件。我四处搜寻,但似乎没有答案。我看到有人在讨论cacheDataSource,但后来我想,是不是因为缓冲而已经缓存了数据?例如,当视频开始时,它开始缓冲。即使按暂停,我也会继续这样做。如果我正确理解这一点,视频实际上是从缓冲数据播放的。我假设这些数据必须存储在某个地方。这种情况下的缓存数据是?如果没有,那么什么是缓存数据?这里有什么区别?最后,我怎样才能真正获得这些是什么?我心中已经在试图看到它被存储为和什么(指某些类型的文件可能),我到达了DefaultAllocator类,它似乎有这条线得到缓冲数据exoplayer

availableAllocations[i] = new Allocation(initialAllocationBlock,allocationOffset);//is this it?? 

这是在DefaultAllocator .java文件。不知道如果我看在正确的地方...

我无法理解什么是缓冲区甚至是如何存储。 Youtube存储.exo文件。通过打印getCacheDir(),我可以在data/data/myAppName/cache中看到一个缓存文件夹,但似乎是给出了一些java.io.fileAndSomeRandomChars。当玩家最小化或打开另一个应用程序时,缓冲区也会被删除。

ExoPlayer是否也以块存储文件?

任何有关这方面的见解将严重超级有用!我现在已经坚持了几天。超级骗子感激它!

缓冲区不是文件,缓冲区存储在应用程序内存中,在本例中它们是ByteBuffer类的实例。 ExoPlayer缓冲区使用processOutputBuffer()方法传递给MediaCodecRenderer的实例。

缓冲区通常是字节数组或者其他类型的数据,而ByteBuffer类在其周围增加了一些有用的方法,用于跟踪缓冲区的大小以及使用标记等最后访问的位置。

我如何访问缓存的方法是通过扩展,我使用渲染器的执行,然后覆盖processOutputBuffer()这样的:

public class CustomMediaCodecAudioRenderer extends MediaCodecAudioRenderer 
{ 
    @Override 
    protected boolean processOutputBuffer(long positionUs, long elapsedRealtimeUs, MediaCodec codec, ByteBuffer buffer, int bufferIndex, int bufferFlags, long bufferPresentationTimeUs, boolean shouldSkip) throws ExoPlaybackException 
    { 

     boolean fullyProcessed; 

     //Here you use the buffer 
     doSomethingWithBuffer(buffer); 


     //Here we allow renderer to do its normal stuff 
     fullyProcessed = super.processOutputBuffer(positionUs, 
      elapsedRealtimeUs, 
      codec, 
      buffer, 
      bufferIndex, 
      bufferFlags, 
      bufferPresentationTimeUs, 
      shouldSkip); 





     return fullyProcessed; 
    } 

} 
+0

它可以从缓存中提取视频像素数据? –