Отображение индикатора прогресса в Django Просмотр при загрузке видео (youtube-dl) - PullRequest
0 голосов
/ 16 апреля 2020

Я звоню 'search /', когда кнопка нажимается через ajax call. Теперь мой вопрос: я хочу показать эти детали {"имя_файла": d ['имя_файла'], "процент": d ['_cent_str'], "скорость": d ['_ eta_str']} в индикатор выполнения при загрузке на веб-странице.

Как мне получить ответ json от video_progress_hook каждый раз, когда он вызывается параметром progress_hook в ydl_opts?

Я хочу получить ответ в javascriprt.

Пожалуйста, помогите.

def search(request):

    file_name=""+str(uuid.uuid1()).split('-')[0]+".mp3"
    query=request.GET.get("query")
    ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{'key': 'FFmpegExtractAudio',
                       'preferredcodec': 'mp3',
                       'preferredquality': '192'}],
    'outtmpl': 'media/'+file_name,
    'progress_hooks':[video_progress_hook],
    'quiet': False,
    }
    ydl = youtube_dl.YoutubeDL(ydl_opts)
    ydl.download([query])
    args={'url_link':file_name}
    return JsonResponse(args)

def video_progress_hook(d):
    args={}
    if d['status'] == 'downloading':
        args={"file_name":d['filename'],"percentage":d['_percent_str'],"speed":d['_eta_str']}
    return JsonResponse(args)

1 Ответ

0 голосов
/ 16 апреля 2020

В общем случае простого решения не существует.

Вам необходимо сохранить запрос в БД и вернуть этот идентификатор клиенту. После этого вам нужно создать специальную конечную точку, которая возвращает прогресс, используя идентификатор запроса. В вашем коде вы должны обновлять этот запрос каждые n секунд.

Я думаю, что хорошим решением может быть https://github.com/czue/celery-progress

...