Не удалось обработать второй файл на производственном сервере - PullRequest
0 голосов
/ 30 января 2020

Это постоянная проблема, которая сводит меня с ума. У меня есть AJAX загрузка видео в моем Django проекте, где пользователи могут загружать видео файлы. Проблема, с которой я сразу столкнулся, заключалась в том, что при отображении видео в формате ListView вы либо получаете *

a.) Запаздывающий сайт из-за обслуживания всех видеофайлов, либо

b.) Нет миниатюр, когда предварительная загрузка отключена.

Таким образом, я решил написать небольшой фрагмент кода, который захватывает первый кадр видео, сохраняет его в виде миниатюры, а затем отображает миниатюры в ListView вместо полных видеофайлов. Это работало некоторое время ..

До ..

По некоторым причинам видеофайлы теперь позволяют обрабатывать только один файл на рабочем сервере. Как только вы попытаетесь загрузить второе видео, OpenCV ret, frame = cap.read() вернет False или None, когда ret должно быть True. Это говорит о том, что видео не читается. Но почему? Почему это всегда при второй загрузке видео и только на рабочем сервере?

video_processing.py :

def create_thumbnail(input_path, output_path):
    """
    Save first frame of video for use as video thumbnail.

    :param input_path: video input path
    :param output_path: image output path
    :return: None
    """
    cap = cv2.VideoCapture(input_path)
    ret, frame = cap.read() # <----------------- ret returns false here
    if ret:
        cv2.imwrite(output_path, frame)
        cap.release()
    else:
        cap.release()
        pass

views.py :

def post(self, request, *args, **kwargs):
    form = self.form_class(request.POST, request.FILES, company=self.request.tenant)
    form.instance.sender = self.request.user
    if form.is_valid():
        form.save()
        groups = form.cleaned_data['receiver']
        if form.instance.thumbnail == 'images/clearpath_logo/Logo.jpg':
            timestr = time.strftime("%d%H%M")
            video_name = form.instance.title.replace(" ", "")
            in_path = str(settings.MEDIA_ROOT) + "/" + str(form.instance.video_file)
            out_path = str(settings.MEDIA_ROOT) + "/" + video_name + timestr + ".png"
            create_thumbnail(in_path, out_path)
            form.instance.thumbnail = video_name + timestr + ".png"
        form.save()
        messages.success(self.request, self.success_message)
        if request.is_ajax():
            return JsonResponse({'success': True, 'url': reverse('videos')})
        else:
            return redirect(self.success_url)
    else:
        if request.is_ajax():
            return JsonResponse({'success': False, 'error': form.errors})
        else:
            return render(request, self.template_name, {'form': form})

Кто-нибудь знает, почему это происходит при второй загрузке файла (если я не перезагружаю apache)?

РЕДАКТИРОВАТЬ: я должен добавить видео файл ДОЛЖЕН быть загружен но функция OpenCV замораживает сайт ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...