Wie wendet man dynamische Wasserzeichen für Benutzer an, die Videos in Echtzeit ansehen? [geschlossen]Python

Python-Programme
Guest
 Wie wendet man dynamische Wasserzeichen für Benutzer an, die Videos in Echtzeit ansehen? [geschlossen]

Post by Guest »

Ich arbeite an einem Video-Streaming-Projekt, bei dem ich aus Sicherheitsgründen in Echtzeit ein dynamisches Wasserzeichen (z. B. Benutzername und E-Mail) anwenden muss. Das Video wird im DASH-Format gestreamt und die Segmentdateien liegen im .m4s-Format vor und werden über FFmpeg generiert.
Herausforderungen:
Ist das möglich? Dynamisches Wasserzeichen direkt auf .m4s-Segmentdateien anwenden?
Videosegmente werden mit FFmpeg mit dem folgenden Befehl generiert:

Code: Select all

ffmpeg
.input(video_path)
.output(mpd_path,
format='dash',
map='0',
video_bitrate='2400k',
video_size='1920x1080',
vcodec='libx264',
seg_duration='4',  # Sets segment duration to 4 seconds
acodec='copy')
.run()

Was ich versucht habe:
Ich habe versucht, FFmpeg zu verwenden, um mithilfe des Drawtext-Filters dynamisch ein Wasserzeichen auf die .m4s-Dateien anzuwenden, aber auf .m4s-Dateien werden nicht immer als gültige Eingabe für FFmpeg-Vorgänge erkannt.

Code: Select all

# FFmpeg command to add watermark to m4s file
try:
# FFmpeg processing
out, err = (
ffmpeg
.input(m4s_file_path)  # Input the segment file
.filter(
"drawtext",
text=user_info,
fontfile="font/dejavu-sans/DejaVuSans-Bold.ttf",
fontsize=24,
fontcolor="white",
x=10,
y=10
)
.output(
"pipe:",  # Stream output as a byte stream
format="mp4",  # Output format as MP4 (compatible with MPEG-DASH)
vcodec="libx264",
acodec="copy",
movflags="frag_keyframe+empty_moov"
)
.run(capture_stdout=True, capture_stderr=True)
)

logger.info(f"FFmpeg process completed. stdout length: {len(out)}, stderr: {err.decode('utf-8')}")
logger.error(f"FFmpeg stderr: {err.decode('utf-8')}")
return out  # Return the processed video stream data

except ffmpeg.Error as e:
stderr_output = e.stderr.decode('utf-8') if e.stderr else "No stderr available"
logger.error(f"FFmpeg error: {stderr_output}")

raise RuntimeError(f"Error processing video: {stderr_output}")

Fehler, mit dem ich konfrontiert war:

Code: Select all

video-streaming-backend  | [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f1bf99cc640] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1012): unspecified pixel format
video-streaming-backend  | Consider increasing the value for the 'analyzeduration' (10000000) and 'probesize' (5000000) options
video-streaming-backend  | Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'http://web:8000/media/stream_video/chunks/ec1db006-b488-47ad-8220-79a05bcaae39/segments/init-stream0.m4s':
video-streaming-backend  |   Metadata:
video-streaming-backend  |     major_brand     : iso5
video-streaming-backend  |     minor_version   : 512
video-streaming-backend  |     compatible_brands: iso5iso6mp41
video-streaming-backend  |     encoder         : Lavf60.16.100
video-streaming-backend  |   Duration: N/A, bitrate: N/A
video-streaming-backend  |   Stream #0:0[0x1](und): Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1012, SAR 1:1 DAR 480:253, 12288 tbr, 12288 tbn (default)
video-streaming-backend  |     Metadata:
video-streaming-backend  |       handler_name    : VideoHandler
video-streaming-backend  |       vendor_id       : [0][0][0][0]
video-streaming-backend  | Stream mapping:
video-streaming-backend  |   Stream #0:0 (h264) -> drawtext:default
video-streaming-backend  |   drawtext:default -> Stream #0:0 (libx264)
video-streaming-backend  | Press [q] to stop, [?] for help
video-streaming-backend  | Cannot determine format of input stream 0:0 after EOF
video-streaming-backend  | Error marking filters as finished
video-streaming-backend  | Error while filtering: Invalid data found when processing input
video-streaming-backend  | [out#0/mp4 @ 0x7f1bf8e73100] Nothing was written into output file, because at least one of its streams received no packets.
video-streaming-backend  | frame=    0 fps=0.0 q=0.0 Lsize=       0kB time=N/A bitrate=N/A speed=N/A
video-streaming-backend  | Conversion failed!

Aufgrund dieser Fehler habe ich mich gefragt, ob .m4s ein brauchbares Format für dynamische Wasserzeichen ist. Wenn nicht, was wäre der richtige Ansatz?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post