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