Added transcoding types
This commit is contained in:
@@ -20,7 +20,7 @@ class TranscodingsForm(forms.ModelForm):
|
|||||||
class TranscodingsInline(admin.StackedInline):
|
class TranscodingsInline(admin.StackedInline):
|
||||||
model = models.Transcoding
|
model = models.Transcoding
|
||||||
form = TranscodingsForm
|
form = TranscodingsForm
|
||||||
fields = ['quality', 'url', 'upload']
|
fields = ['quality', 'type', 'url', 'upload']
|
||||||
extra = 0
|
extra = 0
|
||||||
|
|
||||||
class VideoAdmin(admin.ModelAdmin):
|
class VideoAdmin(admin.ModelAdmin):
|
||||||
|
|||||||
@@ -12,6 +12,13 @@ class Quality(NamedTuple):
|
|||||||
height: int
|
height: int
|
||||||
priority: int
|
priority: int
|
||||||
|
|
||||||
|
class TranscodingType(NamedTuple):
|
||||||
|
name: str
|
||||||
|
short_name: str
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
qualities = (
|
qualities = (
|
||||||
Quality(name='360p', width=640, height=360, priority=1),
|
Quality(name='360p', width=640, height=360, priority=1),
|
||||||
Quality(name='480p', width=853, height=480, priority=2),
|
Quality(name='480p', width=853, height=480, priority=2),
|
||||||
@@ -19,6 +26,13 @@ qualities = (
|
|||||||
Quality(name='1080p', width=1920, height=1080, priority=1),
|
Quality(name='1080p', width=1920, height=1080, priority=1),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
transcoding_types = (
|
||||||
|
TranscodingType(name='video/webm', short_name='vp8'),
|
||||||
|
TranscodingType(name='video/webm; codecs="vp8, vorbis"', short_name='vp8'),
|
||||||
|
TranscodingType(name='video/webm; codecs="vp9, opus"', short_name='vp9'),
|
||||||
|
TranscodingType(name='video/mp4', short_name='h.264'),
|
||||||
|
TranscodingType(name='video/mp4; codecs="avc1.64001f,mp4a.40.2"', short_name='h.264'),
|
||||||
|
)
|
||||||
|
|
||||||
class Video(models.Model):
|
class Video(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
@@ -46,6 +60,7 @@ class Transcoding(models.Model):
|
|||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='transcodings')
|
video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='transcodings')
|
||||||
quality = models.CharField(choices=((quality.name, quality.name) for quality in qualities), max_length=128)
|
quality = models.CharField(choices=((quality.name, quality.name) for quality in qualities), max_length=128)
|
||||||
|
type = models.CharField(choices=((str(type_), str(type_)) for type_ in transcoding_types), max_length=128)
|
||||||
upload = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True)
|
upload = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True)
|
||||||
url = models.CharField(max_length=256, null=True, blank=True, unique=True)
|
url = models.CharField(max_length=256, null=True, blank=True, unique=True)
|
||||||
|
|
||||||
@@ -57,7 +72,7 @@ class Transcoding(models.Model):
|
|||||||
return get_quality_by_name(self.quality)
|
return get_quality_by_name(self.quality)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('video', 'quality')
|
unique_together = ('video', 'quality', 'type')
|
||||||
constraints = [constraints.CheckConstraint(check=Q(upload__isnull=False) | Q(url__isnull=False),
|
constraints = [constraints.CheckConstraint(check=Q(upload__isnull=False) | Q(url__isnull=False),
|
||||||
name='upload_or_url_is_filled'),
|
name='upload_or_url_is_filled'),
|
||||||
constraints.CheckConstraint(check=~(Q(upload__isnull=False) & Q(url__isnull=False)),
|
constraints.CheckConstraint(check=~(Q(upload__isnull=False) & Q(url__isnull=False)),
|
||||||
|
|||||||
Reference in New Issue
Block a user