Django StreamingHttpResponse: Как завершить процесс Popen при отключении клиента?
В django я хочу преобразовать плейлист m3u8 в mp4 и передать его клиенту с помощью ffmpeg pipe. Код работает и процесс ffmpeg также завершается, но только когда клиент ждет до конца и получает весь файл.
Я хочу завершить процесс, когда клиент отсоединяется, но процесс продолжает работать вечно.
<import subprocess
from functools import partial
from django.http.response import StreamingHttpResponse
from django.shortcuts import get_object_or_404
from django.utils.text import slugify
def stream(request, uuid):
vod = get_object_or_404(Vod, uuid=uuid)
def iterator(proc):
for data in iter(partial(proc.stdout.read, 4096), b""):
if not data:
proc.kill()
yield data
cmd = ["ffmpeg", "-i", "input.m3u8", "-c", "copy", "-bsf:a", "aac_adtstoasc", "-movflags", "frag_keyframe+empty_moov", "-f", "mp4", "-"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
response = StreamingHttpResponse(iterator(proc), content_type="video/mp4")
response["Content-Disposition"] = f"attachment; filename={slugify(vod.date)}-{slugify(vod.title)}.mp4"
return response
Я видел этот ответ, но я не уверен, могу ли я использовать потоковую передачу для решения моей проблемы.