Recherche avancée

Médias (3)

Mot : - Tags -/spip

Autres articles (82)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire de création d’une catégorie
    Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
    Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
    On peut modifier ce formulaire dans la partie :
    Administration > Configuration des masques de formulaire.
    Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
    Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

Sur d’autres sites (10147)

  • Issues with adding the current timestamp of a video when using FFPLAY

    28 janvier 2023, par lalelarsen1

    Hi i am trying to add to display the current time of the video as an overlay. i have tried to do follow the answer of this previous post : https://superuser.com/questions/968685/how-to-display-current-time-with-the-ffplay-exe but with no luck.

    


    This is my line of code :

    


    "./ffmpeg-2023-01-25-git-2c3107c3e9-full_build/bin/ffplay.exe" -vf "drawtext=fontfile=./consola.ttf:text='%{pts:hms}':fontsize=48:fontcolor=white:box=1:boxborderw=6:boxcolor=black@0.75:x=(w-text_w)/2:y=h-text_h-20" -i "%shadowplays_folder%\%NEWEST_FOLDER%\%NEWEST_FILE%" -autoexit -x "1000" -alwaysontop


    


    This will display the text "hms}" not the time.

    


    the above code works fine if i replace it with a simple string :

    


    "./ffmpeg-2023-01-25-git-2c3107c3e9-full_build/bin/ffplay.exe" -vf "drawtext=fontfile=./consola.ttf:text='test':fontsize=48:fontcolor=white:box=1:boxborderw=6:boxcolor=black@0.75:x=(w-text_w)/2:y=h-text_h-20" -i "%shadowplays_folder%\%NEWEST_FOLDER%\%NEWEST_FILE%" -autoexit -x "1000" -alwaysontop


    


    This will display the text "test"

    


    what am i missing ?

    


  • Parse dynamic mpd file with Media Source Extensions

    17 février 2023, par FrankC

    I just started learning about adaptive streaming, and currently I'm working on a project that needs showing a live video. In order to control some of the elements in mpd file, I determined to use MSE instead of dash.js. I refer to the code at the following URL :https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/samples/dn551368(v=vs.85)
But I found out that there is no "Initialization" tag or "range" attribute in my mpd file. I don't find any relative attribute as well. By the way I'm use nginx-rtmp + ffmpeg to generate dash file.
So here is my dash file looks like

    


    &lt;?xml version="1.0"?>&#xA; &#xA;  <period start="PT0S">&#xA;    &#xA;      &#xA;        &#xA;          <segmenttimeline>&#xA;             <s t="0" d="10000"></s>&#xA;             <s t="10000" d="10000"></s>&#xA;             <s t="20000" d="5000"></s>&#xA;             <s t="25000" d="10000"></s>&#xA;          </segmenttimeline>&#xA;        &#xA;      &#xA;    &#xA;  </period>&#xA;&#xA;

    &#xA;

    My question is :&#xA;1.Did I have any missing parameters in using ffmpeg or nginx-rtmp resulting in losting tag in mpd file ?&#xA;2.Or there is other way to setup "Initialization"/"range" attribute and let my program work ?&#xA;3.I also curious about why my mpd file doesn't have a baseURL element ?

    &#xA;

    ※My mpd file works fine with dash.js, I can see the video properly

    &#xA;

    THANKS A LOT

    &#xA;

  • Flask app using OpenCv crash when i start recording

    17 mai 2023, par Mulham Darwish

    I build this flask app to live stream security cameras and the live stream works with the screenshot function but when start recording it crash but few times same code it worked and saved the video here the code. with the html file using js.

    &#xA;

    from flask import Flask, render_template, Response, request&#xA;import cv2&#xA;import os&#xA;import time&#xA;import threading&#xA;import requests&#xA;&#xA;app = Flask(__name__)&#xA;&#xA;# Define the IP cameras&#xA;cameras = [&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 1&#x27;},&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 2&#x27;},&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 3&#x27;},&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 4&#x27;}&#xA;]&#xA;&#xA;# Create a VideoCapture object for each camera&#xA;capture_objs = [cv2.VideoCapture(cam[&#x27;url&#x27;]) for cam in cameras]&#xA;stop_events = {i: threading.Event() for i in range(len(cameras))}&#xA;# Define the directory to save the recorded videos&#xA;recording_dir = os.path.join(os.getcwd(), &#x27;recordings&#x27;)&#xA;&#xA;# Ensure the recording directory exists&#xA;if not os.path.exists(recording_dir):&#xA;    os.makedirs(recording_dir)&#xA;&#xA;# Define the function to capture and save a video&#xA;def record_video(camera_index, stop_recording):&#xA;    # Define the codec and file extension&#xA;    fourcc = cv2.VideoWriter_fourcc(*&#x27;mp4v&#x27;)&#xA;    file_extension = &#x27;.mp4&#x27;&#xA;&#xA;    # Get the current timestamp for the filename&#xA;    timestamp = time.strftime("%Y%m%d-%H%M%S")&#xA;&#xA;    # Define the filename and path&#xA;    filename = f&#x27;{cameras[camera_index]["name"]}_{timestamp}{file_extension}&#x27;&#xA;    filepath = os.path.join(recording_dir, filename)&#xA;&#xA;    # Create a VideoWriter object to save the video&#xA;    width = int(capture_objs[camera_index].get(cv2.CAP_PROP_FRAME_WIDTH))&#xA;    height = int(capture_objs[camera_index].get(cv2.CAP_PROP_FRAME_HEIGHT))&#xA;    fps = int(capture_objs[camera_index].get(cv2.CAP_PROP_FPS))&#xA;    video_writer = cv2.VideoWriter(filepath, fourcc, fps, (width, height))&#xA;&#xA;    # Capture frames and write them to the file&#xA;    while True:&#xA;        if stop_recording.is_set():&#xA;            break  # stop recording if stop_recording is set&#xA;        ret, frame = capture_objs[camera_index].read()&#xA;        if ret:&#xA;            video_writer.write(frame)&#xA;        else:&#xA;            break&#xA;&#xA;    # Release the VideoWriter object and the VideoCapture object&#xA;    video_writer.release()&#xA;    capture_objs[camera_index].release()&#xA;&#xA;@app.route(&#x27;/&#x27;)&#xA;def index():&#xA;    # Render the index page with the list of cameras&#xA;    return render_template(&#x27;index.html&#x27;, cameras=cameras)&#xA;&#xA;def generate(camera_index):&#xA;    # Generate frames from the video feed&#xA;    while True:&#xA;        ret, frame = capture_objs[camera_index].read()&#xA;        if not ret:&#xA;            break&#xA;&#xA;        # Encode the frame as JPEG&#xA;        _, jpeg = cv2.imencode(&#x27;.jpg&#x27;, frame)&#xA;&#xA;        # Yield the frame as a Flask response&#xA;        yield (b&#x27;--frame\r\n&#x27;&#xA;               b&#x27;Content-Type: image/jpeg\r\n\r\n&#x27; &#x2B; jpeg.tobytes() &#x2B; b&#x27;\r\n&#x27;)&#xA;&#xA;@app.route(&#x27;/video_feed&#x27;)&#xA;def video_feed():&#xA;    # Get the camera index from the request arguments&#xA;    camera_index = int(request.args.get(&#x27;camera_index&#x27;))&#xA;&#xA;    # Generate the video feed&#xA;    return Response(generate(camera_index),&#xA;                    mimetype=&#x27;multipart/x-mixed-replace; boundary=frame&#x27;)&#xA;&#xA;@app.route(&#x27;/record&#x27;, methods=[&#x27;POST&#x27;])&#xA;def record():&#xA;    # Get the camera index from the request form&#xA;    camera_index = int(request.form[&#x27;camera_index&#x27;])&#xA;&#xA;    stop_recording = stop_events[camera_index]  # get the stop_recording event for the camera&#xA;    thread = threading.Thread(target=record_video, args=(camera_index, stop_recording))&#xA;    thread.start()  # start a thread to record video&#xA;&#xA;    # Return a response indicating that the recording has started&#xA;    return &#x27;Recording started.&#x27;&#xA;&#xA;@app.route(&#x27;/stop_record&#x27;, methods=[&#x27;POST&#x27;])&#xA;def stop_record():&#xA;    # Get the camera index from the request form&#xA;    camera_index = int(request.form[&#x27;camera_index&#x27;])&#xA;&#xA;    # Set the stop_recording event for the corresponding camera thread&#xA;    stop_events[camera_index].set()&#xA;&#xA;    # Return a response indicating that recording has been stopped&#xA;    return &#x27;Recording stopped.&#x27;&#xA;&#xA;@app.route(&#x27;/screenshot&#x27;, methods=[&#x27;POST&#x27;])&#xA;def take_screenshot():&#xA;    # Take a screenshot of the video stream and save it as a file&#xA;    camera = capture_objs[int(request.form[&#x27;camera_id&#x27;])]&#xA;    success, frame = camera.read()&#xA;    if success:&#xA;        timestamp = time.strftime("%Y%m%d-%H%M%S")&#xA;        filename = f&#x27;screenshot_{timestamp}.jpg&#x27;&#xA;        cv2.imwrite(filename, frame)&#xA;        return &#x27;Screenshot taken and saved&#x27;&#xA;    else:&#xA;        return &#x27;Failed to take screenshot&#x27;&#xA;&#xA;if __name__ == &#x27;__main__&#x27;:&#xA;    app.run()&#xA;

    &#xA;

    I tried to update ffmpeg to the latest version and installed pip install opencv-python-headless and installed pip install opencv-python but most of the time i come to this crash code

    &#xA;

    * Serving Flask app &#x27;run&#x27;&#xA;* Debug mode: off&#xA;WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.&#xA; * Running on http://127.0.0.1:5000&#xA;Press CTRL&#x2B;C to quit&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET / HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=0 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=1 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=2 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=3 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:44] "GET / HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=3 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=0 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=1 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=2 HTTP/1.1" 200 -&#xA;[h264 @ 0x5605285fc5c0] error while decoding MB 28 29, bytestream -9&#xA;[h264 @ 0x560529110040] error while decoding MB 15 37, bytestream -6&#xA;[h264 @ 0x560528624980] error while decoding MB 45 45, bytestream -23&#xA;[h264 @ 0x5605286f1900] error while decoding MB 50 34, bytestream -7&#xA;[h264 @ 0x5605285fc5c0] error while decoding MB 25 9, bytestream -17&#xA;[h264 @ 0x5605292b0080] error while decoding MB 28 41, bytestream -5&#xA;[h264 @ 0x560528660040] error while decoding MB 101 45, bytestream -17&#xA;[h264 @ 0x5605285fc5c0] error while decoding MB 42 44, bytestream -5&#xA;[h264 @ 0x5605286f1900] error while decoding MB 118 42, bytestream -9&#xA;[h264 @ 0x560529110040] error while decoding MB 92 43, bytestream -5&#xA;[h264 @ 0x560528660040] error while decoding MB 99 34, bytestream -11&#xA;[h264 @ 0x56052932b0c0] error while decoding MB 92 36, bytestream -13&#xA;[h264 @ 0x560528667ac0] error while decoding MB 44 54, bytestream -5&#xA;[h264 @ 0x560529110040] error while decoding MB 93 33, bytestream -7&#xA;[h264 @ 0x5605286dd880] error while decoding MB 27 37, bytestream -19&#xA;[h264 @ 0x560528660040] error while decoding MB 66 56, bytestream -9&#xA;127.0.0.1 - - [17/May/2023 13:36:45] "POST /record HTTP/1.1" 200 -&#xA;Assertion fctx->async_lock failed at libavcodec/pthread_frame.c:175&#xA;Aborted (core dumped)&#xA;

    &#xA;