Это постоянная проблема, которая сводит меня с ума. У меня есть 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 замораживает сайт ..