首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django从Popen进程向StreamingHttpResponse发送内容长度。

Django从Popen进程向StreamingHttpResponse发送内容长度。
EN

Stack Overflow用户
提问于 2015-09-23 07:35:34
回答 1查看 1.5K关注 0票数 0

我需要服务于大wav文件实时创建的ogg文件。我可以发送内容,但我不知道为什么要将数据的可变长度指示给StreamingHttpResponse。

这是我的代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-23 08:00:51

如果我正确理解了您的问题,您需要在通过Content-Length传输响应时发送StreamingHttpResponse头。如果是这样的话,那么这是不可能的,并在StreamingHttpResponse文档中明确说明了这一点:

只有在绝对要求在将数据传输到客户端之前不迭代整个内容的情况下,才应该使用StreamingHttpResponse。由于内容无法访问,许多中间件无法正常工作。例如,不能为流响应生成、ETag、和ETag头。

在我看来,在请求处理期间转换音频文件不是一个好主意,因为您可以这样用尽所有请求处理程序。相反,我会使用某种背景处理,例如芹菜

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32733641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档