1

アプリ エンジン データ ストアに 30 秒のユーザー mp3 レコーディングを BLOB として保存しようとしています。ただし、この機能を有効にし (App Engine にはアップロードごとに 1 MB の制限があります)、コストを抑えるために、アップロード前にファイルを圧縮し、要求されるたびにファイルを解凍したいと考えています。これをどのように達成することをお勧めしますか (タスクキューを介してバックグラウンドで発生する可能性がありますが、効率的なソリューションは常に優れています)

私自身のテストと調査に基づいて、これを達成するための 2 つのアプローチが考えられます。

  • ズリブ

そのためには、While ループを使用して、一度に特定の数のブロックを圧縮する必要があります。ただし、App Engine ではファイル システムへの書き込みが許可されていません。これを達成するために一時ファイルを使用することを考えましたが、一時ファイルからコンテンツを解凍しようとしたときに、このアプローチではうまくいきませんでした

  • Gzip

Web の周りを読むと、アプリ エンジンの URL フェッチ関数は、既に gzip されたコンテンツを要求し、それを解凍しているようです。関数がコンテンツを圧縮解除するのを停止して、gzip 形式でデータストアに配置し、オンデマンドでユーザーに再生する必要があるときに圧縮解除できるようにする方法はありますか?

これを達成するためにzlibやgzip、またはその他のソリューションを使用することを提案する方法を教えてください。ありがとう

4

5 に答える 5

2

標準圧縮またはより低いビットレートでの再エンコードによる MP3 ファイルの圧縮の技術的な制限 (他の回答で言及) は正しいですが、目的は30 秒の MP3 エンコード データを保存することです。ユーザーに強制できると仮定すると、MP3 ビットレートが 256kbit 固定ビットレート (CBR) 以下の場合、追加の圧縮技術を適用しなくても問題ありません。256kbit CBR で、30 秒のオーディオには次のものが必要です。

(((256 * 1000) / 8) * 30) / 1048576 = 0.91MB

最大標準ビットレートは 320kbit で、これは 1.14MB に相当するため、256 以下を使用する必要があります。実際に最も一般的に使用されているビットレートは 128kbits です。

ID3 タグやフレーミングなど、最終的なファイル サイズを増加させる追加のオーバーヘッドがありますが、問題はありません。そうでない場合は、最大値として 224kbits (30 秒 = 0.80MB) まで下げてください。ファイル サイズがあまり予測できない可変ビット レート エンコーディングなどの他の複雑さがありますが、これらは無視しています。

したがって、問題は MP3 ファイルを圧縮する方法ではなく、256kbits CBR でエンコードされた 30 秒を超えてアップロードできないことをユーザーに認識させる方法と、そのポリシーを適用する方法です。

于 2009-11-16T03:55:14.960 に答える
2

最大 50 MB のファイルの保存と提供を可能にする新しい Blobstore API を試すことができます

http://www.cloudave.com/link/the-new-google-app-engine-blobstore-api-first-thoughts

http://code.google.com/appengine/docs/python/blobstore/

http://code.google.com/appengine/docs/java/blobstore/

于 2010-01-03T23:20:23.117 に答える
0

Blob のリストで最大 10Mb を保存できます。を検索しgoogle file serviceます。昨日BlobStore Apiを使い始めたばかりなので、私の意見では、BlobStoreよりもはるかに用途が広い.

1Mb * 10 = 10Mb の Blob を保存できます (最大エンティティ サイズだと思います)。または、BlobStore API を使用して同じ 10Mb を取得するか、課金を有効にすると 50Mb を取得できます (有効にすることはできますが、支払わない無料割り当て)。

于 2010-01-24T01:37:48.713 に答える