繁体   English   中英

为什么将视频上传到 azure blob 存储这么慢? [江戈]

[英]Why is uploading a video to azure blob storage this slow? [DJANGO]

使用 Django 将视频上传到 Azure blob 存储时遇到问题。 我不确定它是否与 Django 框架缓慢或我的代码有关。

顺便说一句,这是我和我朋友的一个项目,他做了最多的工作。 所以有可能我不知道一切。 :)

上传 1GB 大小的视频时,大约需要 2/3 分钟。

我已经研究但尚未实施的内容:

  1. 复制
  2. 多线程

视频模型:

    def create_file_path_video(instance, name):
    return os.path.join('sources', str(instance.pk), name)


    class Video(models.Model):
        video = models.FileField(upload_to=create_file_path_video, validators=[validate_video_file_extension], null=True)
        name = models.CharField(max_length=255, null=True)
        storage_name = models.CharField(max_length=255, null=True)
        size = models.BigIntegerField(null=True)
        fps = models.FloatField(null=True)
        frames_count = models.FloatField(null=True)
        duration = models.FloatField(null=True)
        type = models.CharField(max_length=10, null=True)
        uploaded_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=False)
        uploaded_at = models.DateTimeField(default=datetime.now, null=True, blank=True)
        deleted_at = models.DateTimeField(null=True, blank=True)

    def __duration(self):
        return int(self.frames_count/self.fps)

形式:

class UploadVideoForm(forms.ModelForm):
    class Meta:
        model = Video
        fields = ['video']
        widgets = {
            'name': forms.HiddenInput(),
            'uploaded_by': forms.HiddenInput(),
            'uploaded_at': forms.HiddenInput(),
            'type': forms.HiddenInput(),
            'size': forms.HiddenInput()
        }

看法:

def video_create_view(request):
    context = {}
    form = UploadVideoForm(request.POST or None, request.FILES or None)

    if request.user.is_superuser or request.user.groups.filter(name="Editor").exists():
        if request.method == 'POST':
            form = UploadVideoForm(request.POST, request.FILES)
            video_obj = Video.objects.create()
            if form.is_valid():
                name = request.FILES['video'].name.split('.')[0]
                date_string = datetime.datetime.now().strftime("%Y-%m-%d")
                video_obj.name = name
                video_obj.storage_name = date_string+"_"+name
                video_obj.size = request.FILES['video'].size
                video_obj.uploaded_by = request.user
                video_obj.type = request.FILES['video'].name.split('.')[1]
                video_obj.video = request.FILES['video']
                video_obj.save()
                video_path = get_file_path(video_obj.video)
                video = cv2.VideoCapture(video_path)
                # Find OpenCV version
                (major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')
                if int(major_ver) < 3:
                    
                    fps = float(video.get(cv2.cv.CV_CAP_PROP_FPS))
                    frames_count = float(video.get(cv2.CAP_PROP_FRAME_COUNT))
                    video_obj.fps = fps
                    video_obj.frames_count = frames_count
                    video_obj.duration = frames_count/fps

                else:
                    fps = video.get(cv2.CAP_PROP_FPS)
                    frames_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
                    video_obj.fps = fps
                    video_obj.frames_count = frames_count
                    video_obj.duration = frames_count/fps
                video_obj.save()
                video.release()
                messages.success(request, "Video uploaded!")
            return redirect('video:video-list')
    context['form'] = form
    return render(request, 'video/upload_form.html', context)

我已经调试过,我注意到video_obj.save()几乎占用了它需要的所有时间。

有人可以帮我解决这个问题吗? 那就太好了! <3

可以使用Shared Access Signatures将媒体资产上传到Azure Blob Storage

SAS Token加速上传下载的解决方案

有关更多详细信息,请查看以下.Net博客。 您可以搜索有关python语言的信息。

1. 使用共享访问签名上传到 Azure Blob 存储

2. 如何使用共享访问签名访问 Blob 容器

Python:

1.如何上传文件到azure blob存储?

2. Azure 存储 - 上传文件 - Python (示例代码)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM