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

Я видел этот ответ, но я не уверен, могу ли я использовать потоковую передачу для решения моей проблемы.

Вернуться на верх