我需要服务于大wav文件实时创建的ogg文件。我可以发送内容,但我不知道为什么要将数据的可变长度指示给StreamingHttpResponse。
这是我的代码:
class OggAudioStreamer(object):
def __init__(self, archivo):
self.archivo = archivo
def read(self, **kwargs):
command = 'ffmpeg -i "{0}" -ac 1 -ar 22050 -acodec libvorbis -f ogg -'.format(self.archivo)
args = split(command)
response = Popen(args, stdout=PIPE, stderr=PIPE,
bufsize=8192, universal_newlines=False)
response_iterator = iter(response.stdout.readline, b"")
for resp in response_iterator:
yield resp
def ogg_stream_response(request):
data = OggAudioStreamer('SOME WAV FILE')
stream = StreamingHttpResponse(data.read(), content_type='audio/ogg')
return stream发布于 2015-09-23 08:00:51
如果我正确理解了您的问题,您需要在通过Content-Length传输响应时发送StreamingHttpResponse头。如果是这样的话,那么这是不可能的,并在StreamingHttpResponse文档中明确说明了这一点:
只有在绝对要求在将数据传输到客户端之前不迭代整个内容的情况下,才应该使用StreamingHttpResponse。由于内容无法访问,许多中间件无法正常工作。例如,不能为流响应生成、ETag、和ETag头。
在我看来,在请求处理期间转换音频文件不是一个好主意,因为您可以这样用尽所有请求处理程序。相反,我会使用某种背景处理,例如芹菜。
https://stackoverflow.com/questions/32733641
复制相似问题