clean code & bugfixes
This commit is contained in:
parent
0d7b669cf6
commit
3f2d4afc06
9 changed files with 29 additions and 26 deletions
|
|
@ -18,7 +18,7 @@ def video_post_save(sender, instance, created, **kwargs):
|
|||
create_thumbnails(instance, instance.id)
|
||||
|
||||
#Convert video
|
||||
for resolution in ["720", "480", "1080"]:
|
||||
for resolution in ["1280x720", "640x360", "1920x1080"]:
|
||||
queue.enqueue(convert_video_to_hls, instance.video_file.path, resolution, instance.id)
|
||||
|
||||
#Delete the original video file
|
||||
|
|
@ -51,7 +51,7 @@ def delete_converted_files(video_file_path):
|
|||
"""
|
||||
Delete all converted video files related to the original video file.
|
||||
"""
|
||||
resolutions = ["480", "720", "1080"]
|
||||
resolutions = ["360", "720", "1080"]
|
||||
for resolution in resolutions:
|
||||
converted_video_path = video_file_path + f'_{resolution}p.mp4'
|
||||
converted_video_path = remove_first_mp4(converted_video_path)
|
||||
|
|
|
|||
|
|
@ -8,24 +8,26 @@ def convert_video_to_hls(source, resolution, model_id):
|
|||
"""
|
||||
Converts a video to the HLS format
|
||||
"""
|
||||
resolution_after_x = resolution.split('x')[1] if 'x' in resolution else resolution
|
||||
|
||||
target_dir = os.path.join(os.path.dirname(source), str(model_id))
|
||||
os.makedirs(target_dir, exist_ok=True)
|
||||
|
||||
base_filename = os.path.basename(source).split(".")[0]
|
||||
target = os.path.join(target_dir, f'{base_filename}_{resolution}p')
|
||||
target = os.path.join(target_dir, f'{base_filename}_{resolution_after_x}p')
|
||||
|
||||
ffmpeg_path = shutil.which("ffmpeg")
|
||||
cmd = [
|
||||
ffmpeg_path,
|
||||
'-i', source,
|
||||
'-s', f'hd{resolution}',
|
||||
'-s', resolution,
|
||||
'-c:v', 'libx264',
|
||||
'-crf', '23',
|
||||
'-c:a', 'aac',
|
||||
'-strict', '-2',
|
||||
'-hls_time', '10',
|
||||
'-hls_playlist_type', 'vod',
|
||||
'-hls_segment_filename', os.path.join(target_dir, f'{base_filename}_{resolution}p_%03d.ts'),
|
||||
'-hls_segment_filename', os.path.join(target_dir, f'{base_filename}_{resolution_after_x}p_%03d.ts'),
|
||||
f'{target}.m3u8'
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -12,12 +12,12 @@ from rest_framework.parsers import MultiPartParser, FormParser
|
|||
from django.http import JsonResponse
|
||||
import os
|
||||
|
||||
CACHETTL = getattr(settings, 'CACHE_TTL', DEFAULT_TIMEOUT)
|
||||
CACHE_TTL = getattr(settings, 'CACHE_TTL', DEFAULT_TIMEOUT)
|
||||
|
||||
# Create your views here.
|
||||
@api_view(['GET'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
@cache_page(CACHETTL)
|
||||
#@cache_page(CACHE_TTL)
|
||||
def video_list(request):
|
||||
"""
|
||||
List all videos.
|
||||
|
|
@ -28,11 +28,11 @@ def video_list(request):
|
|||
|
||||
@api_view(['GET'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def check_video(request, id):
|
||||
def check_video_resolutions(request, id):
|
||||
"""
|
||||
Check if a specific video exists in different resolutions (480p, 720p, 1080p).
|
||||
Check if a specific video exists in different resolutions (360p, 720p, 1080p).
|
||||
"""
|
||||
resolutions = ['480', '720', '1080']
|
||||
resolutions = ['360', '720', '1080']
|
||||
result = {}
|
||||
|
||||
try:
|
||||
|
|
@ -59,6 +59,7 @@ def video_upload(request):
|
|||
if request.method == 'POST':
|
||||
serializer = VideoSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
creator = request.user
|
||||
serializer.save(creator=creator)
|
||||
return Response(serializer.data, status=201)
|
||||
return Response({"error": "Invalid data", "details": serializer.errors}, status=400)
|
||||
|
|
@ -38,7 +38,7 @@ urlpatterns = [
|
|||
# Content URLs
|
||||
path('content/', content_views.video_list, name='video_list'),
|
||||
path('content/upload/', content_views.video_upload, name='video_upload'),
|
||||
path('content/movie/<int:id>/', content_views.check_video, name='check_video'),
|
||||
path('content/movie/<int:id>/', content_views.check_video_resolutions, name='check_video_resolutions'),
|
||||
|
||||
# Users URLs
|
||||
path('users/', user_views.user_list, name='user_list'),
|
||||
|
|
|
|||
|
|
@ -43,13 +43,13 @@
|
|||
<button
|
||||
[ngClass]="{
|
||||
'resolution-btn': true,
|
||||
active: currentResolution === '480p',
|
||||
'not-available': !movieIsUploaded['480']
|
||||
active: currentResolution === '360p',
|
||||
'not-available': !movieIsUploaded['360']
|
||||
}"
|
||||
[disabled]="!movieIsUploaded['480'] || currentResolution === '480p'"
|
||||
(click)="changeResolution('480p')"
|
||||
[disabled]="!movieIsUploaded['360'] || currentResolution === '360p'"
|
||||
(click)="changeResolution('360p')"
|
||||
>
|
||||
480p
|
||||
360p
|
||||
</button>
|
||||
<button
|
||||
[ngClass]="{
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@ export class BrowseComponent implements OnInit {
|
|||
playMovie: string = '';
|
||||
isWideScreen: boolean = false;
|
||||
uploadMovieOverview: boolean = false;
|
||||
currentResolution: '480p' | '720p' | '1080p' = '720p';
|
||||
currentResolution: '360p' | '720p' | '1080p' = '720p';
|
||||
movieIsUploaded: { [resolution: string]: boolean } = {
|
||||
'480': false,
|
||||
'360': false,
|
||||
'720': false,
|
||||
'1080': false,
|
||||
};
|
||||
|
|
@ -91,7 +91,7 @@ export class BrowseComponent implements OnInit {
|
|||
this.updateLikeMovies();
|
||||
}
|
||||
|
||||
changeResolution(resolution: '480p' | '720p' | '1080p') {
|
||||
changeResolution(resolution: '360p' | '720p' | '1080p') {
|
||||
if (this.videoPlayer && this.movieIsUploaded[resolution.replace('p', '')]) {
|
||||
this.videoPlayer.switchResolution(resolution);
|
||||
this.currentResolution = resolution;
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ export class HeroBannerComponent {
|
|||
|
||||
environmentBaseUrl: string = environment.baseUrl;
|
||||
movieIsUploaded: { [resolution: string]: boolean } = {
|
||||
'480': false,
|
||||
'320': false,
|
||||
'720': false,
|
||||
'1080': false,
|
||||
};
|
||||
|
|
@ -72,7 +72,7 @@ export class HeroBannerComponent {
|
|||
|
||||
isAnyResolutionUploaded(): boolean {
|
||||
return (
|
||||
this.movieIsUploaded['480'] ||
|
||||
this.movieIsUploaded['320'] ||
|
||||
this.movieIsUploaded['720'] ||
|
||||
this.movieIsUploaded['1080']
|
||||
);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ export class VideoPlayerComponent implements OnInit, OnDestroy {
|
|||
|
||||
if (this.playMovie) {
|
||||
this.resolutionUrls = {
|
||||
'480p': `${this.playMovie}_480p.m3u8`,
|
||||
'360p': `${this.playMovie}_360p.m3u8`,
|
||||
'720p': `${this.playMovie}_720p.m3u8`,
|
||||
'1080p': `${this.playMovie}_1080p.m3u8`,
|
||||
};
|
||||
|
|
@ -63,7 +63,7 @@ export class VideoPlayerComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
|
||||
// Method to switch resolution
|
||||
public switchResolution(resolution: '480p' | '720p' | '1080p') {
|
||||
public switchResolution(resolution: '360p' | '720p' | '1080p') {
|
||||
if (this.resolutionUrls[resolution]) {
|
||||
if (this.hls) {
|
||||
this.hls.loadSource(this.resolutionUrls[resolution]);
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ export class MovieService {
|
|||
this.http.get(url, { headers }).subscribe(
|
||||
(response: any) => {
|
||||
const resolutions = {
|
||||
'480': response['480'] || false,
|
||||
'360': response['360'] || false,
|
||||
'720': response['720'] || false,
|
||||
'1080': response['1080'] || false,
|
||||
};
|
||||
|
|
@ -92,7 +92,7 @@ export class MovieService {
|
|||
(error) => {
|
||||
observer.next(
|
||||
this.movieCache[videoID] || {
|
||||
'480': false,
|
||||
'360': false,
|
||||
'720': false,
|
||||
'1080': false,
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue