Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.43 KB | None | 0 0
  1. import boto3
  2. import subprocess
  3. import os
  4. from django.db.models.signals import post_save
  5. from django.dispatch import receiver
  6. from django.core.files import File
  7. from pathlib import Path
  8. from decouple import config
  9. from .models import Lecture
  10.  
  11. AWS_STORAGE_BUCKET_NAME = config("AWS_STORAGE_BUCKET_NAME")
  12.  
  13. s3 = boto3.resource("s3")
  14. bucket = s3.Bucket(AWS_STORAGE_BUCKET_NAME)
  15.  
  16.  
  17. @receiver(post_save, sender=Lecture)
  18. def handle_video_upload(sender, instance, created, **kwargs):
  19.     """
  20.    TODO:
  21.        - remover o arquivo .mkv do bucket
  22.        - upar os arquivos .ts pro bucket
  23.  
  24.    Variaveis:
  25.        - file_relative_path:
  26.            path relativo ao diretório do projeto
  27.            ex: media/lectures/first_video_2/2020-04-04_16-11-20.mkv
  28.  
  29.        - file_suffix:
  30.            sufixo|extensão do arquivo
  31.            ex: .mkv
  32.  
  33.        - file_relative_dir:
  34.            diretório relativo ao projeto, sem o nome do arquivo incluso
  35.            ex: media/lectures/first_video_2
  36.  
  37.        - file_name_m3u8:
  38.            nome do arquivo contendo a extensão|sufixo .m3u8
  39.            ex: 2020-04-04_16-11-20.m3u8
  40.  
  41.        - file_tmp_local_dir:
  42.            diretório temporário para armazenar os arquivos
  43.            ex: /tmp/media/lectures/first_video_2
  44.  
  45.        - file_tmp_local_output:
  46.            path temporário do arquivo .m3u8, onde também
  47.            terá os arquivos .ts
  48.            ex: /tmp/media/lectures/first_video_2/2020-04-04_16-11-20.m3u8
  49.  
  50.        - file_cloudfront_url:
  51.            url do arquivo upado no cloudfront
  52.            ex: https://d4fmj82j2soe4.cloudfront.net/media/lectures/first_video_2/2020-04-04_16-11-20.mkv
  53.    """
  54.  
  55.     file_relative_path = Path(instance.file.name)
  56.     file_suffix = file_relative_path.suffix
  57.  
  58.     if not file_suffix == '.m3u8' and instance.file_type == "V":
  59.         file_relative_dir = os.path.dirname(instance.file.name)
  60.  
  61.         file_relative_path_m3u8 = file_relative_path.with_suffix(".m3u8")
  62.         file_name_m3u8 = file_relative_path_m3u8.name
  63.  
  64.         file_tmp_local_dir = f"/tmp/{file_relative_dir}"
  65.         file_tmp_local_output = f"{file_tmp_local_dir}/{file_name_m3u8}"
  66.         file_cloudfront_url = instance.file.url
  67.  
  68.         # cria o diretório para conter os arquivos
  69.         subprocess.run(['mkdir', '-p', file_tmp_local_dir])
  70.  
  71.         # cria o arquivo .m3u8 e os arquivos .ts
  72.         # file_tmp_local_output será o path do arquivo
  73.         # contendo o nome dele
  74.         subprocess.run([
  75.             "ffmpeg",
  76.             "-i",
  77.             file_cloudfront_url,
  78.             "-f",
  79.             "hls",
  80.             file_tmp_local_output
  81.         ])
  82.  
  83.         # update the file with the new .m3u8 file
  84.         with open(file_tmp_local_output, "r") as file_object:
  85.             file_m3u8 = File(
  86.                 name=str(file_relative_path_m3u8),
  87.                 file=file_object)
  88.             instance.file.save(file_name_m3u8, file_m3u8)
  89.             subprocess.run(["rm", "-r", file_tmp_local_dir])
  90.  
  91.         print("file_relative_path: ", file_relative_path)
  92.  
  93.         print("file_suffix: ", file_suffix)
  94.         print("file_relative_dir: ", file_relative_dir)
  95.         print("file_name_m3u8: ", file_name_m3u8)
  96.         print("file_relative_path_m3u8: ", file_relative_path_m3u8)
  97.  
  98.         print("file_tmp_local_dir:", file_tmp_local_dir)
  99.         print("file_tmp_local_output", file_tmp_local_output)
  100.  
  101.         print("file_cloudfront_url: ", file_cloudfront_url)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement