Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import boto3
- import subprocess
- import os
- from django.db.models.signals import post_save
- from django.dispatch import receiver
- from django.core.files import File
- from pathlib import Path
- from decouple import config
- from .models import Lecture
- AWS_STORAGE_BUCKET_NAME = config("AWS_STORAGE_BUCKET_NAME")
- s3 = boto3.resource("s3")
- bucket = s3.Bucket(AWS_STORAGE_BUCKET_NAME)
- @receiver(post_save, sender=Lecture)
- def handle_video_upload(sender, instance, created, **kwargs):
- """
- TODO:
- - remover o arquivo .mkv do bucket
- - upar os arquivos .ts pro bucket
- Variaveis:
- - file_relative_path:
- path relativo ao diretório do projeto
- ex: media/lectures/first_video_2/2020-04-04_16-11-20.mkv
- - file_suffix:
- sufixo|extensão do arquivo
- ex: .mkv
- - file_relative_dir:
- diretório relativo ao projeto, sem o nome do arquivo incluso
- ex: media/lectures/first_video_2
- - file_name_m3u8:
- nome do arquivo contendo a extensão|sufixo .m3u8
- ex: 2020-04-04_16-11-20.m3u8
- - file_tmp_local_dir:
- diretório temporário para armazenar os arquivos
- ex: /tmp/media/lectures/first_video_2
- - file_tmp_local_output:
- path temporário do arquivo .m3u8, onde também
- terá os arquivos .ts
- ex: /tmp/media/lectures/first_video_2/2020-04-04_16-11-20.m3u8
- - file_cloudfront_url:
- url do arquivo upado no cloudfront
- ex: https://d4fmj82j2soe4.cloudfront.net/media/lectures/first_video_2/2020-04-04_16-11-20.mkv
- """
- file_relative_path = Path(instance.file.name)
- file_suffix = file_relative_path.suffix
- if not file_suffix == '.m3u8' and instance.file_type == "V":
- file_relative_dir = os.path.dirname(instance.file.name)
- file_relative_path_m3u8 = file_relative_path.with_suffix(".m3u8")
- file_name_m3u8 = file_relative_path_m3u8.name
- file_tmp_local_dir = f"/tmp/{file_relative_dir}"
- file_tmp_local_output = f"{file_tmp_local_dir}/{file_name_m3u8}"
- file_cloudfront_url = instance.file.url
- # cria o diretório para conter os arquivos
- subprocess.run(['mkdir', '-p', file_tmp_local_dir])
- # cria o arquivo .m3u8 e os arquivos .ts
- # file_tmp_local_output será o path do arquivo
- # contendo o nome dele
- subprocess.run([
- "ffmpeg",
- "-i",
- file_cloudfront_url,
- "-f",
- "hls",
- file_tmp_local_output
- ])
- # update the file with the new .m3u8 file
- with open(file_tmp_local_output, "r") as file_object:
- file_m3u8 = File(
- name=str(file_relative_path_m3u8),
- file=file_object)
- instance.file.save(file_name_m3u8, file_m3u8)
- subprocess.run(["rm", "-r", file_tmp_local_dir])
- print("file_relative_path: ", file_relative_path)
- print("file_suffix: ", file_suffix)
- print("file_relative_dir: ", file_relative_dir)
- print("file_name_m3u8: ", file_name_m3u8)
- print("file_relative_path_m3u8: ", file_relative_path_m3u8)
- print("file_tmp_local_dir:", file_tmp_local_dir)
- print("file_tmp_local_output", file_tmp_local_output)
- print("file_cloudfront_url: ", file_cloudfront_url)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement