mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-07-31 20:59:44 +00:00
aw
This commit is contained in:
@ -426,7 +426,6 @@ def kill_ffmpeg_process(filepath):
|
||||
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
|
||||
pid = result.stdout.decode("utf-8").strip()
|
||||
if pid:
|
||||
logger.info("Killing ffmpeg process with PID: %s", pid)
|
||||
cmd = "kill -9 %s" % pid
|
||||
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
|
||||
return result
|
||||
|
@ -649,9 +649,11 @@ class Media(models.Model):
|
||||
from . import tasks
|
||||
tasks.create_hls.delay(self.friendly_token)
|
||||
|
||||
need_to_run_post_trim_action = False
|
||||
if need_to_run_post_trim_action:
|
||||
vt_request = VideoTrimRequest.objects.filter(media=self, status="running").first()
|
||||
if vt_request:
|
||||
tasks.post_trim_action.delay(self.friendly_token)
|
||||
vt_request.status = "success"
|
||||
vt_request.save(update_fields=["status"])
|
||||
return True
|
||||
|
||||
def set_encoding_status(self):
|
||||
@ -1831,4 +1833,3 @@ def encoding_file_delete(sender, instance, **kwargs):
|
||||
instance.media.post_encode_actions(encoding=instance, action="delete")
|
||||
# delete local chunks, and remote chunks + media file. Only when the
|
||||
# last encoding of a media is complete
|
||||
|
||||
|
@ -72,7 +72,7 @@ def handle_pending_running_encodings(media):
|
||||
Returns:
|
||||
bool: True if any encodings were deleted, False otherwise
|
||||
"""
|
||||
encodings = media.encodings.filter(status__in=["pending", "running"])
|
||||
encodings = media.encodings.exclude(status="success")
|
||||
deleted = False
|
||||
for encoding in encodings:
|
||||
if encoding.temp_file:
|
||||
@ -210,7 +210,10 @@ def encode_media(
|
||||
):
|
||||
"""Encode a media to given profile, using ffmpeg, storing progress"""
|
||||
|
||||
logger.info("Encode Media started, friendly token {0}, profile id {1}, force {2}".format(friendly_token, profile_id, force))
|
||||
logger.info(f"encode_media for {friendly_token}/{profile_id}/{encoding_id}/{force}/{chunk}")
|
||||
if not Encoding.objects.filter(id=encoding_id).exists():
|
||||
logger.info(f"Exiting for {friendly_token}/{profile_id}/{encoding_id}/{force} since encoding id not found")
|
||||
return False
|
||||
|
||||
if self.request.id:
|
||||
task_id = self.request.id
|
||||
@ -353,8 +356,7 @@ def encode_media(
|
||||
encoding.save(update_fields=["progress", "update_date"])
|
||||
logger.info("Saved {0}".format(round(percent, 2)))
|
||||
n_times += 1
|
||||
except DatabaseError as e:
|
||||
print(e, 'XA'*100)
|
||||
except DatabaseError:
|
||||
kill_ffmpeg_process(encoding.temp_file)
|
||||
kill_ffmpeg_process(encoding.chunk_file_path)
|
||||
return False
|
||||
@ -366,11 +368,6 @@ def encode_media(
|
||||
raise
|
||||
|
||||
except Exception as e:
|
||||
if isinstance(e, DatabaseError):
|
||||
print(e, 'BA'*100)
|
||||
kill_ffmpeg_process(encoding.temp_file)
|
||||
kill_ffmpeg_process(encoding.chunk_file_path)
|
||||
return False
|
||||
|
||||
try:
|
||||
# output is empty, fail message is on the exception
|
||||
@ -381,7 +378,10 @@ def encode_media(
|
||||
kill_ffmpeg_process(encoding.chunk_file_path)
|
||||
encoding.logs = output
|
||||
encoding.status = "fail"
|
||||
encoding.save(update_fields=["status", "logs"])
|
||||
try:
|
||||
encoding.save(update_fields=["status", "logs"])
|
||||
except DatabaseError:
|
||||
return False
|
||||
raise_exception = True
|
||||
# if this is an ffmpeg's valid error
|
||||
# no need for the task to be re-run
|
||||
@ -507,7 +507,6 @@ def create_hls(friendly_token):
|
||||
if media.hls_file != pp:
|
||||
Media.objects.filter(pk=media.pk).update(hls_file=pp)
|
||||
hlsfile = Media.objects.filter(pk=media.pk).first().hls_file
|
||||
logger.info(f"HLS file created: {hlsfile} size {os.path.getsize(hlsfile)}")
|
||||
return True
|
||||
|
||||
|
||||
@ -966,6 +965,7 @@ def video_trim_task(self, trim_request_id):
|
||||
if not original_trim_result:
|
||||
logger.info(f"Failed to trim original file for media {target_media.friendly_token}")
|
||||
|
||||
deleted_encodings = handle_pending_running_encodings(target_media)
|
||||
encodings = target_media.encodings.filter(status="success", profile__extension='mp4', chunk=False)
|
||||
for encoding in encodings:
|
||||
trim_result = trim_video_method(encoding.media_file.path, timestamps_encodings)
|
||||
@ -973,7 +973,6 @@ def video_trim_task(self, trim_request_id):
|
||||
logger.info(f"Failed to trim encoding {encoding.id} for media {target_media.friendly_token}")
|
||||
encoding.delete()
|
||||
|
||||
deleted_encodings = handle_pending_running_encodings(target_media)
|
||||
# give the chance to run encodings for encodings that didnt make it
|
||||
target_media.encode(force=False)
|
||||
trim_request_status = "running"
|
||||
@ -990,6 +989,7 @@ def video_trim_task(self, trim_request_id):
|
||||
target_media = copy_video(original_media, title_suffix=f"(Trimmed) {i}", copy_encodings=True)
|
||||
|
||||
original_trim_result = trim_video_method(target_media.media_file.path, [timestamp])
|
||||
deleted_encodings = handle_pending_running_encodings(target_media)
|
||||
encodings = target_media.encodings.filter(status="success", profile__extension='mp4', chunk=False)
|
||||
for encoding in encodings:
|
||||
trim_result = trim_video_method(encoding.media_file.path, [timestamp])
|
||||
@ -997,7 +997,6 @@ def video_trim_task(self, trim_request_id):
|
||||
logger.info(f"Failed to trim encoding {encoding.id} for media {target_media.friendly_token}")
|
||||
encoding.delete()
|
||||
|
||||
deleted_encodings = handle_pending_running_encodings(target_media)
|
||||
# give the chance to run encodings for encodings that didnt make it
|
||||
target_media.encode(force=False)
|
||||
trim_request_status = "running"
|
||||
|
Reference in New Issue
Block a user