【问题标题】:Django build video website similar to YouTubeDjango搭建类似YouTube的视频网站
【发布时间】:2018-06-06 02:48:24
【问题描述】:

我正在尝试使用

建立一个视频上传、查看、分享网站

软件:

Django 1.11.8

Django Rest Framework 3.7.3

Python 3.6.3

后端数据库MySQL 5.7.19

HTTP 服务器:Apache 2.4.27

mod_wsgi 4.5.22

WAMP server 3.1.0

HTML5

CSS3

Bootstrap 3.3.7

Javascript ECMAScript 5

服务器硬件信息:

Window 2012 server 至强处理器 32 GB RAM

240 GB Intel 730 Series SSD

4 SAMSUNG 850 PRO 2.5" SSD 1TB(总共 4TB)

用于缓存的 Memcached 1.45

BACKEND': 'django.core.cache.backends.memcached.MemcachedCache

我担心性能和可扩展性。

我想分享我的方法,如果我错了,请纠正我,或者你可以建议我更好的方法。

我已经在 Django.contrib.auth.model>>User 上有了默认用户数据库 并将使用相同的用户信息上传、点赞、观看和其他与视频的互动

01.创建 Model.py(这是示例)

    from django.db import models

    from django.contrib.auth.models import User


    class Channel(models.Model):
        name = models.CharField(max_length=100)
        subscribers = models.ManyToManyField(User, related_name='+', blank=True)
        creation_time = models.DateTimeField(auto_now_add=True)
        modified_time = models.DateTimeField(auto_now=True)


    class Subscription(models.Model):
        user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='+')
        channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
        notifications = models.BooleanField(default=True)


    class Playlist(models.Model):
        name = models.CharField(max_length=100)
        video = models.ManyToManyField('Video')
        user = models.ForeignKey(User, on_delete=models.CASCADE)


    class Category(models.Model):
        name = models.CharField(max_length=100)


    class ChannelSettings(models.Model):
        channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
        verified = models.BooleanField(default=False)

02 创建 View.py

渲染 Html 模板框架。 如视频观看页面、频道页面、播放列表页面、历史页面、搜索页面 我不会使用 Django 模板标签来填充任何信息。

03 创建api.py

使用 django rest 框架创建 Rest API 有了这个,我将获取并放置视频信息、元数据、喜欢、观看次数和其他更新。

04 JavaScript

通过 Ajax 读取信息并动态呈现页面。 例如获取观看历史列表并使用缩略图进行渲染。等在html页面中。

请建议我构建具有视频上传进度、自动缩略图创建和重要视频压缩的视频上传页面的最佳方法。

关于我的视频上传网站的一般信息:

截至目前的大约视频:5000+(平均时间 30 分钟)

用户:400 +

原始视频大小 - 4K、2K 和最小 1280*720

这种方法在性能和规模方面是否足够好?

【问题讨论】:

  • 不是播放列表有很多视频吗?它可能是视频的 M2M 领域
  • 可扩展性是一个单独的主题,可能是针对 Server Fault SE 的,但总的来说,问题是您希望在不久的将来扩展多远以及(2)可靠如何你需要服务。对于任何一种体面的可靠性,单个服务器都不会这样做。如果可能,建议通常使用亚马逊、微软等提供的云 SaaS 服务。

标签: python mysql django django-models django-rest-framework


【解决方案1】:

以下是一些建议:

  • 我宁愿使用像 Ubuntu 这样的 Linux 服务器。

  • 播放列表包含多个视频,所以我认为您错过了那里。 (您使用的是 ForeignKey 而不是 ManyToMany)

  • 在流式传输 4K 等高质量视频时,您应该关注用于提供文件的服务器。我的意思是让网站只显示一些包含视频播放器的内容不会有太大挑战,而文件服务器可能是因为它是文件服务器来完成繁重的工作。

  • 我建议你做一些后台任务来处理文件。就像将它们移动到另一台服务器(或直接将视频上传到另一台服务器),如果您需要像 youtube 那样从视频文件中创建多个分辨率,您需要另一台服务器来执行此操作以及一大堆代码来处理它你。

  • 我建议您编写 2 个不同的项目连接到一个数据库(或者您可以在您的主项目上创建一个 API),其中一个处理用户内容并为您呈现网站,另一个为处理静态文件。

  • 我认为 Nginx 非常适合您的文件服务器。

  • 进行一些限制,以便用户/机器人无法同时上传太多视频。这可能会导致当时的繁重工作。

  • 创建一个队列来处理作业,不要一次完成所有作业,也不要在上传后立即处理,等待合适的时间处理文件,这样您就不会在偷看时间崩溃您的服务器.

  • 如果有预算,可以选择JW播放器。

  • 我会选择 PostgreSQL 而不是 MySQL。 Django 也提出了建议,并且您有一些 MySQL 上不可用的功能。

如果您正在考虑扩展,请考虑这些建议。但是你提到的数字可以用更少的东西来实现。这些数字并没有那么大,所以处理起来并不难。

以后有什么想的我会再写的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 2020-11-11
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2015-08-03
    • 2020-07-24
    • 2011-08-15
    相关资源
    最近更新 更多