2017-04-12 12 views
0

私はAndroidアプリを構築する経験はあまりありません。私はExoPlayerを使用して小さなアプリを作ろうとしています。だからうまくいけば、皆さんは私の無知を許すことができます。私は本質的に、バッファされたファイルにアクセスする方法があるかどうかを確認しようとしています。私は周りを検索しましたが、これには答えがないようです。私は人々がcacheDataSourceについて話し合っているのを見ましたが、私は考えていました、それはバッファリングのおかげですでにキャッシュされているデータではありませんか?たとえば、ビデオが開始すると、ビデオがバッファリングを開始します。一時停止が押されてもそれを続けます。これを正しく理解していれば、ビデオは実際にはバッファされたデータから再生されます。私はこのデータをどこかに保存しなければならないと考えています。この場合、このキャッシュデータはありますか?そうでない場合は、キャッシュデータとは何ですか?ここの違いは何ですか?そして最後に、どうすれば実際にこれにアクセスできますか? I'vは、そののように、何(ファイルのいくつかの種類を意味する場合もある)として格納されている場所を確認しようとしてきて、私はこれがDefaultAllocatorであるこのラインバッファリングされたデータexoplayerを取得

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

を持っているようだDefaultAllocatorクラスに達し、 .javaファイル。私が正しい場所を探しているかどうかわからない...

バッファーが何であるか、そしてその記憶方法を理解できません。 Youtubeは.exoファイルを保存します。私はgetCacheDir()を印刷してdata/data/myAppName/cacheにキャッシュフォルダを見ることができますが、それはいくつかjava.io.fileAndSomeRandomCharsを出しているようです。また、プレーヤーが最小化されたり、別のアプリが開かれたりすると、バッファーも削除されます。

ExoPlayerもファイルをチャンクに保存しますか?

これについての洞察は、真剣に非常に役に立つと思われます。 Ivはこれで2,3日間これに固執しました。スーパーデュパーはそれを感謝します!

答えて

1

バッファはファイルではなく、バッファはアプリケーションメモリに格納されています。この例では、バッファはByteBufferクラスのインスタンスです。 ExoPlayerバッファは、processOutputBuffer()メソッドを使用してMediaCodecRendererのインスタンスに渡されます。

バッファは通常、バイトの配列または他の種類のデータです。一方、ByteBufferクラスは、バッファのサイズを追跡するためのいくつかの便利なメソッドをマーカーに追加しています。それは、バッファからのビデオピクセルデータを抽出することができ、それ

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

私はバッファにアクセスする方法の方法は、このようなprocessOutputBuffer()私が使っているレンダラーの実装を拡張することであり、その後、上書き? –

関連する問題