我需要提供从大型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

最佳答案

如果我正确理解了您的问题,则需要在通过Content-Length流式传输响应时发送StreamingHttpResponse header 。如果是这种情况,则不可能,并且在StreamingHttpResponse文档中明确指出:



我认为在请求处理期间对音频文件进行代码转换不是一个好主意,因为您可以用这种方式耗尽所有请求处理程序。相反,我将使用某种类型的后台处理,例如Celery

关于django - Django从Popen进程将内容长度发送到StreamingHttpResponse,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32733641/

10-10 03:52