得到缓冲数据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;
}
}
它可以从缓存中提取视频像素数据? –