Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Google App Engine上存储之前压缩数据_Python_Google App Engine_Compression_Gzip_Zlib - Fatal编程技术网

Python 在Google App Engine上存储之前压缩数据

Python 在Google App Engine上存储之前压缩数据,python,google-app-engine,compression,gzip,zlib,Python,Google App Engine,Compression,Gzip,Zlib,我正在尝试在我的应用程序引擎数据存储中将30秒的用户mp3录制存储为blob。但是,为了启用此功能(App Engine每次上传都有1MB限制)并降低成本,我希望在上传之前压缩文件,并在每次请求时解压缩文件。您建议我如何实现这一点(可以通过任务队列在后台实现,但高效的解决方案总是好的) 根据我自己的测试和研究,我认为有两种可能的方法可以实现这一点 兹利布 为此,我需要使用While循环一次压缩一定数量的块。但是,应用程序引擎不允许您写入文件系统。我曾想过使用一个临时文件来实现这一点,但在尝试

我正在尝试在我的应用程序引擎数据存储中将30秒的用户mp3录制存储为blob。但是,为了启用此功能(App Engine每次上传都有1MB限制)并降低成本,我希望在上传之前压缩文件,并在每次请求时解压缩文件。您建议我如何实现这一点(可以通过任务队列在后台实现,但高效的解决方案总是好的)

根据我自己的测试和研究,我认为有两种可能的方法可以实现这一点

  • 兹利布
为此,我需要使用While循环一次压缩一定数量的块。但是,应用程序引擎不允许您写入文件系统。我曾想过使用一个临时文件来实现这一点,但在尝试从临时文件中解压内容时,我没有使用这种方法

  • Gzip
从网络上的阅读来看,appengine url fetch函数似乎请求已经压缩的内容,然后对其进行解压缩。有没有一种方法可以阻止函数解压缩内容,这样我就可以将其以gzip格式放入数据存储,然后在需要按需播放给用户时将其解压缩


让我知道您建议如何使用zlib或gzip或其他解决方案来实现这一点。感谢

正如Aneto在评论中提到的,您将无法使用标准压缩库(如gzip或zlib)压缩MP3数据。但是,您可以使用更低的比特率对MP3重新编码。

正如Aneto在评论中提到的,您将无法使用标准压缩库(如gzip或zlib)压缩MP3数据。但是,您可以使用较低的比特率重新编码MP3。

在上传之前压缩“意味着在用户浏览器中执行此操作,但您的问题中没有文本解决此问题!这似乎与GAE应用程序中的压缩有关,当然,只有上传后数据才会。如果您能够开发Firefox扩展并说服用户安装它们,您可以使用Firefox扩展(或其他浏览器的等价物),但这与GAE没有多大关系更不用说,正如@RageZ的评论所提到的,MP3本质上已经被压缩了,因此几乎没有什么可以获得的(尽管也许你可以通过为用户提供浏览器扩展来降低MP3的比特率,从而降低文件的尺寸,这可能会影响音频质量,具体取决于你对这些音频文件的预期用途)

因此,总的来说,我必须支持@jldupont的建议(也在评论中)——使用不同的服务器来存储大文件(S3,亚马逊的产品,当然是一种可能性,尽管不是唯一的一种)。

在上传之前压缩“意味着在用户浏览器中执行此操作——但您的问题中没有文本可以解决这一问题!这似乎与GAE应用程序中的压缩有关,当然,只有上传后数据才会。如果您能够开发Firefox扩展并说服用户安装它们,您可以使用Firefox扩展(或其他浏览器的等价物),但这与GAE没有多大关系更不用说,正如@RageZ的评论所提到的,MP3本质上已经被压缩了,因此几乎没有什么可以获得的(尽管也许你可以通过为用户提供浏览器扩展来降低MP3的比特率,从而降低文件的尺寸,这可能会影响音频质量,具体取决于你对这些音频文件的预期用途)


因此,总的来说,我必须支持@jldupont的建议(也在评论中)——使用不同的服务器存储大文件(S3,Amazon的产品,当然是一种可能性,但不是唯一的一种)。

而技术限制(在其他回答中提到)通过标准压缩或以较低比特率重新编码来压缩MP3文件是正确的,您的目标是存储30秒的MP3编码数据。假设您可以在用户身上强制执行此操作,那么如果MP3比特率为256kbit恒定比特率(CBR)或更低,则无需应用额外的压缩技术就可以了。在256kbit CBR时,30秒的音频需要:

(((256 * 1000) / 8) * 30) / 1048576 = 0.91MB
标准的最大比特率为320kbit,相当于1.14MB,因此您必须使用256或更少的比特率。在野外最常用的比特率是128kbits

还有额外的开销会增加最终文件的大小,如ID3标记和帧,但您应该可以。如果没有,请将最大值降到224KB(30秒=0.80MB)。还有一些其他的复杂性,比如可变比特率编码,其文件大小是不可预测的,我忽略了这些


因此,您的问题不再是如何压缩MP3文件,而是如何确保您的用户知道他们不能上传超过30秒的256kbits CBR编码的文件,以及如何执行该策略。

而技术限制(在其他答案中提到)通过标准压缩或以较低比特率重新编码来压缩MP3文件是正确的,您的目标是存储30秒的MP3编码数据。假设您可以在用户身上强制执行此操作,那么如果MP3比特率为256kbit恒定比特率(CBR)或更低,则无需应用额外的压缩技术就可以了。在256kbit CBR时,30秒的音频需要:

(((256 * 1000) / 8) * 30) / 1048576 = 0.91MB
标准的最大比特率为320kbit,相当于1.14MB,因此您必须使用256或更少的比特率。在野外最常用的比特率是128kbits

还有额外的开销会增加最终文件的大小,如ID3标记和帧,但您应该可以。如果没有,请将最大值降到224KB(30秒=0.80MB)。还有其他的复杂性,比如可变比特率编码,文件