Recherche avancée

Médias (2)

Mot : - Tags -/doc2img

Autres articles (35)

  • 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

  • Configuration spécifique pour PHP5

    4 février 2011, par

    PHP5 est obligatoire, vous pouvez l’installer en suivant ce tutoriel spécifique.
    Il est recommandé dans un premier temps de désactiver le safe_mode, cependant, s’il est correctement configuré et que les binaires nécessaires sont accessibles, MediaSPIP devrait fonctionner correctement avec le safe_mode activé.
    Modules spécifiques
    Il est nécessaire d’installer certains modules PHP spécifiques, via le gestionnaire de paquet de votre distribution ou manuellement : php5-mysql pour la connectivité avec la (...)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

Sur d’autres sites (7207)

  • How to record frames with ffmpeg and finish the recording

    20 février 2024, par Jorge Augusto Wilchen

    In the following code, i trying to create a class to record frames from an IP camera (RTSP), save frames on a .avi file and finish the record, but, when i kill the operation, the video file may be corrupted. Have any other more safely way to stop the ffmpeg recording ?

    


    .cpp file :

    


    #include "videorecorder.h"


VideoRecorder::VideoRecorder(const std::string& rtspUrl) :
    url(rtspUrl),
    recording(false)
{

}

VideoRecorder::~VideoRecorder()
{
    end_record();
}

bool VideoRecorder::start_record(const std::string &fileName)
{
    if (recording) {
        std::cerr << "Already recording." << std::endl;
        return false;
    }

    std::string command = "ffmpeg -rtsp_transport udp -i " + url
                          + " -c:v mjpeg -preset fast -qp 0 " + fileName;

    videoWriter = popen(command.c_str(), "w");
    if (!videoWriter) {
        std::cerr << "Error opening ffmpeg process." << std::endl;
        return false;
    }

    recording = true;
    ffmpegProcessId = getpid();
    std::cout << "Recording started." << std::endl;
    return true;
}

bool VideoRecorder::end_record()
{
    if (recording) {
        if (videoWriter) {
            pid_t ffmpegPID = fileno(videoWriter);

            if (kill(ffmpegPID, SIGTERM) == 0) {
                std::cout << "Recording terminated successfully." << std::endl;
            } else {
                std::cerr << "Error terminating recording." << std::endl;
                return false;
            }

            int status = pclose(videoWriter);

            if (status == 0) {
                std::cout << "Recording ended successfully." << std::endl;
            } else {
                std::cerr << "Error ending recording. pclose status: " << status << std::endl;
                return false;
            }
        } else {
            std::cerr << "Error ending recording. videoWriter is nullptr." << std::endl;
            return false;
        }

        recording = false;
        return true;
    }

    return false;
}


    


    .h file :

    


    #ifndef VIDEORECORDER_H&#xA;#define VIDEORECORDER_H&#xA;&#xA;#include <string>&#xA;#include <iostream>&#xA;#include <fstream>&#xA;#include <cstdlib>&#xA;#include <csignal>&#xA;#include <sys></sys>wait.h>&#xA;&#xA;extern "C" {&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavutil></libavutil>avutil.h>&#xA;#include <libavutil></libavutil>opt.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;#include &#xA;}&#xA;&#xA;#include <linux></linux>videodev2.h>&#xA;&#xA;#include <opencv2></opencv2>opencv.hpp>&#xA;#include <opencv2></opencv2>videoio.hpp>&#xA;#include <opencv2></opencv2>highgui/highgui.hpp>&#xA;&#xA;&#xA;class VideoRecorder&#xA;{&#xA;public:&#xA;    VideoRecorder(const std::string&amp; rtspUrl);&#xA;    ~VideoRecorder();&#xA;    bool start_record(const std::string&amp; fileName);&#xA;    bool end_record();&#xA;&#xA;private:&#xA;    std::string url;&#xA;    AVFormatContext *formatContext;&#xA;    AVStream *videoStream;&#xA;    AVCodecContext *codecContext;&#xA;    AVCodec *codec;&#xA;    SwsContext *swsContext;&#xA;    AVFrame *frame;&#xA;    AVPacket packet;&#xA;    bool recording;&#xA;    pid_t ffmpegProcessId;&#xA;    FILE* videoWriter;&#xA;};&#xA;&#xA;#endif // VIDEORECORDER_H&#xA;</csignal></cstdlib></fstream></iostream></string>

    &#xA;

    I'm using the ffmpeg lib becouse i need max speed on frames recording, and OpenCV and AV Lib is much slowness than ffmpeg.

    &#xA;

    This my terminal output after recording during 10 seconds (generated a file with 23 seconds duration) :

    &#xA;

    Recording started.&#xA;ffmpeg version 4.3.6-0&#x2B;deb11u1&#x2B;rpt5 Copyright (c) 2000-2023 the FFmpeg developers&#xA;  built with gcc 10 (Debian 10.2.1-6)&#xA;  configuration: --prefix=/usr --extra-version=0&#x2B;deb11u1&#x2B;rpt5 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-mmal --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --enable-sand --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared&#xA;  libavutil      56. 51.100 / 56. 51.100&#xA;  libavcodec     58. 91.100 / 58. 91.100&#xA;  libavformat    58. 45.100 / 58. 45.100&#xA;  libavdevice    58. 10.100 / 58. 10.100&#xA;  libavfilter     7. 85.100 /  7. 85.100&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  7.100 /  5.  7.100&#xA;  libswresample   3.  7.100 /  3.  7.100&#xA;  libpostproc    55.  7.100 / 55.  7.100&#xA;Input #0, rtsp, from &#x27;rtsp://admin:[password]@[ip]:[port]/live/0/MAIN&#x27;:&#xA;  Metadata:&#xA;    title           : RTSP Server&#xA;  Duration: N/A, start: 0.280000, bitrate: N/A&#xA;    Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080, 25 fps, 25 tbr, 90k tbn, 50 tbc&#xA;Codec AVOption preset (Configuration preset) specified for output file #0 (/home/guardian-tech/Pictures/output_frame.avi) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.&#xA;Codec AVOption qp (Constant quantization parameter rate control method) specified for output file #0 (/home/guardian-tech/Pictures/output_frame.avi) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))&#xA;Press [q] to stop, [?] for help&#xA;Output #0, avi, to &#x27;/home/guardian-tech/Pictures/output_frame.avi&#x27;:&#xA;  Metadata:&#xA;    INAM            : RTSP Server&#xA;    ISFT            : Lavf58.45.100&#xA;    Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj420p(pc), 1920x1080, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc&#xA;    Metadata:&#xA;      encoder         : Lavc58.91.100 mjpeg&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A&#xA;[rtsp @ 0x5592e7bb00] max delay reached. need to consume packet&#xA;[rtsp @ 0x5592e7bb00] RTP: missed 212 packets&#xA;[h264 @ 0x5592ebb790] concealing 2192 DC, 2192 AC, 2192 MV errors in I frame&#xA;rtsp://admin:[password]@[ip]:[port]/live/0/MAIN: corrupt decoded frame in stream 0&#xA;[rtsp @ 0x5592e7bb00] max delay reached. need to consume packet&#xA;[rtsp @ 0x5592e7bb00] RTP: missed 6 packets&#xA;[rtsp @ 0x5592e7bb00] max delay reached. need to consume packet&#xA;[rtsp @ 0x5592e7bb00] RTP: missed 14 packets&#xA;[h264 @ 0x5592f1bd30] cabac decode of qscale diff failed at 42 29&#xA;[h264 @ 0x5592f1bd30] error while decoding MB 42 29, bytestream 0&#xA;[h264 @ 0x5592f1bd30] concealing 4687 DC, 4687 AC, 4687 MV errors in I frame&#xA;rtsp://admin:[password]@[ip]:[port]/live/0/MAIN: corrupt decoded frame in stream 0&#xA;Error terminating recording.&#xA;

    &#xA;

  • VLC Player shows broken HLS stream with 4k HDR10 mkv

    8 avril 2023, par goodkid38

    I am trying to convert a 4k mkv to an HLS stream but I am not having any luck. I have tried a few ffmpeg commands to try and fix the issue but none have worked. Here are the commands I have tried.

    &#xA;

      &#xA;
    1. Basic copy command :
    2. &#xA;

    &#xA;

    ffmpeg -i "video.mkv" -c copy -f hls "plexTemp/out.m3u8"

    &#xA;

      &#xA;
    1. Command used to see if it was an HDR color issue :
    2. &#xA;

    &#xA;

    ffmpeg -i "video.mkv" -c copy -pix_fmt yuv420p10le -f hls "plexTemp/out.m3u8"&#xA;3. Command used to revert to 8 bit color :

    &#xA;

    ffmpeg -i "video.mkv" -c copy -pix_fmt yuv420p -f hls "plexTemp/out.m3u8"

    &#xA;

      &#xA;
    1. I tried removing extra streams and just focusing on audio and video :
    2. &#xA;

    &#xA;

    ffmpeg -i "out.mkv" -map 0:v:0 -map 0:a:1 -c copy -pix_fmt yuv420p10le -f hls "plexTemp/out.m3u8"

    &#xA;

    I also saw these warnings when running each command.Stream HEVC is not hvc1, you should use tag:v hvc1 to set it.&#xA;And this

    &#xA;

    [matroska,webm @ 000001d7921803c0] Stream #12: not enough frames to estimate rate; consider increasing probesize&#xA;[matroska,webm @ 000001d7921803c0] Could not find codec parameters for stream 6 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size&#xA;Consider increasing the value for the &#x27;analyzeduration&#x27; (0) and &#x27;probesize&#x27; (5000000) options&#xA;[matroska,webm @ 000001d7921803c0] Could not find codec parameters for stream 7 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size&#xA;Consider increasing the value for the &#x27;analyzeduration&#x27; (0) and &#x27;probesize&#x27; (5000000) options&#xA;[matroska,webm @ 000001d7921803c0] Could not find codec parameters for stream 8 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size&#xA;Consider increasing the value for the &#x27;analyzeduration&#x27; (0) and &#x27;probesize&#x27; (5000000) options&#xA;[matroska,webm @ 000001d7921803c0] Could not find codec parameters for stream 9 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size&#xA;Consider increasing the value for the &#x27;analyzeduration&#x27; (0) and &#x27;probesize&#x27; (5000000) options&#xA;[matroska,webm @ 000001d7921803c0] Could not find codec parameters for stream 10 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size&#xA;Consider increasing the value for the &#x27;analyzeduration&#x27; (0) and &#x27;probesize&#x27; (5000000) options&#xA;[matroska,webm @ 000001d7921803c0] Could not find codec parameters for stream 11 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size&#xA;Consider increasing the value for the &#x27;analyzeduration&#x27; (0) and &#x27;probesize&#x27; (5000000) options&#xA;

    &#xA;

    So I tried increasing the analyzeduration and probesize and adding the tag like so :&#xA;ffmpeg -analyzeduration 10000000 -probesize 10000000 -i "out.mkv" -c copy -tag:v hvc1 -f hls "plexTemp/out.m3u8"

    &#xA;

    To no avail. Here is what the output looks like on VLC. It's mostly black with a few lines of color that randomly change.enter image description here

    &#xA;

    On my TV I see this :

    &#xA;

    enter image description here

    &#xA;

    One thing I see that stands out in ffmpegs output is this :

    &#xA;

    [hls @ 00000207239a9ec0] Opening &#x27;plexTemp/out0.ts&#x27; for writing7 bitrate=  -0.0kbits/s speed=N/A&#xA;[hls @ 00000207239a9ec0] Opening &#x27;plexTemp/out.m3u8.tmp&#x27; for writing&#xA;

    &#xA;

    Here is the audio and video info on the mkv :

    &#xA;

    General&#xA;Unique ID                                : 92280908398971492516286250889389584022 (0x456CA80EF29B1357B572719D6EC4AE96)&#xA;Complete name                            : I:\video.mkv&#xA;Format                                   : Matroska&#xA;Format version                           : Version 2&#xA;File size                                : 49.4 GiB&#xA;Duration                                 : 1 h 39 min&#xA;Overall bit rate mode                    : Variable&#xA;Overall bit rate                         : 71.2 Mb/s&#xA;Frame rate                               : 23.976 FPS&#xA;Movie name                               : video&#xA;Encoded date                             : 2023-04-06 22:39:53 UTC&#xA;Writing application                      : MakeMKV v1.16.7 win(x64-release)&#xA;Writing library                          : libmakemkv v1.16.7 (1.3.10/1.5.2) win(x64-release)&#xA;Cover                                    : Yes&#xA;Attachments                              : cover.jpg&#xA;&#xA;Video&#xA;ID                                       : 1&#xA;ID in the original source medium         : 4113 (0x1011)&#xA;Format                                   : HEVC&#xA;Format/Info                              : High Efficiency Video Coding&#xA;Format profile                           : Main 10@L5.1@High&#xA;HDR format                               : SMPTE ST 2086, HDR10 compatible&#xA;Codec ID                                 : V_MPEGH/ISO/HEVC&#xA;Duration                                 : 1 h 39 min&#xA;Bit rate                                 : 63.6 Mb/s&#xA;Width                                    : 3 840 pixels&#xA;Height                                   : 2 160 pixels&#xA;Display aspect ratio                     : 16:9&#xA;Frame rate mode                          : Constant&#xA;Frame rate                               : 23.976 (24000/1001) FPS&#xA;Color space                              : YUV&#xA;Chroma subsampling                       : 4:2:0 (Type 2)&#xA;Bit depth                                : 10 bits&#xA;Bits/(Pixel*Frame)                       : 0.320&#xA;Stream size                              : 44.1 GiB (89%)&#xA;Writing library                          : ATEME Titan File 3.9.6 (4.9.6.2)        &#xA;Language                                 : English&#xA;Default                                  : No&#xA;Forced                                   : No&#xA;Color range                              : Limited&#xA;Color primaries                          : BT.2020&#xA;Transfer characteristics                 : PQ&#xA;Matrix coefficients                      : BT.2020 non-constant&#xA;Mastering display color primaries        : Display P3&#xA;Mastering display luminance              : min: 0.0050 cd/m2, max: 1000 cd/m2&#xA;Maximum Content Light Level              : 1000 cd/m2&#xA;Maximum Frame-Average Light Level        : 140 cd/m2&#xA;Original source medium                   : Blu-ray&#xA;&#xA;Audio #1&#xA;ID                                       : 2&#xA;ID in the original source medium         : 4352 (0x1100)&#xA;Format                                   : DTS XLL X&#xA;Format/Info                              : Digital Theater Systems&#xA;Commercial name                          : DTS:X&#xA;Codec ID                                 : A_DTS&#xA;Duration                                 : 1 h 39 min&#xA;Bit rate mode                            : Variable&#xA;Bit rate                                 : 4 174 kb/s&#xA;Channel(s)                               : 8 channels&#xA;Channel layout                           : C L R LFE Lb Rb Lss Rss&#xA;Sampling rate                            : 48.0 kHz&#xA;Frame rate                               : 93.750 FPS (512 SPF)&#xA;Bit depth                                : 24 bits&#xA;Stream size                              : 2.89 GiB (6%)&#xA;Title                                    : Surround 7.1&#xA;Language                                 : English&#xA;Default                                  : Yes&#xA;Forced                                   : No&#xA;Original source medium                   : Blu-ray&#xA;Here is information on the HLS output:&#xA;General&#xA;Complete name                            : I:\out.m3u8&#xA;Format                                   : HLS&#xA;Format profile                           : Media&#xA;File size                                : 67.4 MiB&#xA;Duration                                 : 8 s 138 ms&#xA;Overall bit rate mode                    : Variable&#xA;Overall bit rate                         : 69.4 Mb/s&#xA;Frame rate                               : 23.976 FPS&#xA;

    &#xA;

    And my&#xA;Here is the output of my HLS stream :

    &#xA;

    Video&#xA;ID                                       : 256 (0x100)&#xA;Menu ID                                  : 1 (0x1)&#xA;Format                                   : HEVC&#xA;Format/Info                              : High Efficiency Video Coding&#xA;Format profile                           : Main 10@L5.1@High&#xA;HDR format                               : SMPTE ST 2086, HDR10 compatible&#xA;Muxing mode                              : MPEG-TS&#xA;Codec ID                                 : 36&#xA;Duration                                 : 8 s 49 ms&#xA;Width                                    : 3 840 pixels&#xA;Height                                   : 2 160 pixels&#xA;Display aspect ratio                     : 16:9&#xA;Frame rate                               : 23.976 (24000/1001) FPS&#xA;Color space                              : YUV&#xA;Chroma subsampling                       : 4:2:0 (Type 2)&#xA;Bit depth                                : 10 bits&#xA;Writing library                          : ATEME Titan File 3.9.6 (4.9.6.2)        &#xA;Color range                              : Limited&#xA;Color primaries                          : BT.2020&#xA;Transfer characteristics                 : PQ&#xA;Matrix coefficients                      : BT.2020 non-constant&#xA;Mastering display color primaries        : Display P3&#xA;Mastering display luminance              : min: 0.0050 cd/m2, max: 1000 cd/m2&#xA;Maximum Content Light Level              : 1000 cd/m2&#xA;Maximum Frame-Average Light Level        : 140 cd/m2&#xA;Source                                   : out92.ts&#xA;&#xA;Audio&#xA;ID                                       : 257 (0x101)&#xA;Menu ID                                  : 1 (0x1)&#xA;Format                                   : DTS XLL X&#xA;Format/Info                              : Digital Theater Systems&#xA;Commercial name                          : DTS:X&#xA;Muxing mode                              : MPEG-TS&#xA;Codec ID                                 : 130&#xA;Duration                                 : 8 s 138 ms&#xA;Bit rate mode                            : Variable&#xA;Channel(s)                               : 8 channels&#xA;Channel layout                           : C L R LFE Lb Rb Lss Rss&#xA;Sampling rate                            : 48.0 kHz&#xA;Frame rate                               : 93.750 FPS (512 SPF)&#xA;Bit depth                                : 24 bits&#xA;Delay relative to video                  : -125 ms&#xA;Language                                 : English&#xA;Source                                   : out92.ts&#xA;

    &#xA;

  • ffmpeg failed to load audio file

    14 avril 2024, par Vaishnav Ghenge
    Failed to load audio: ffmpeg version 5.1.4-0&#x2B;deb12u1 Copyright (c) Failed to load audio: ffmpeg version 5.1.4-0&#x2B;deb12u1 Copyright (c) 2000-2023 the FFmpeg developers&#xA;  built with gcc 12 (Debian 12.2.0-14)&#xA;  configuration: --prefix=/usr --extra-version=0&#x2B;deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared&#xA;  libavutil      57. 28.100 / 57. 28.100&#xA;  libavcodec     59. 37.100 / 59. 37.100&#xA;  libavformat    59. 27.100 / 59. 27.100&#xA;  libavdevice    59.  7.100 / 59.  7.100&#xA;  libavfilter     8. 44.100 /  8. 44.100&#xA;  libswscale      6.  7.100 /  6.  7.100&#xA;  libswresample   4.  7.100 /  4.  7.100&#xA;  libpostproc    56.  6.100 / 56.  6.100&#xA;/tmp/tmpjlchcpdm.wav: Invalid data found when processing input&#xA;

    &#xA;

    backend :

    &#xA;

    &#xA;@app.route("/transcribe", methods=["POST"])&#xA;def transcribe():&#xA;    # Check if audio file is present in the request&#xA;    if &#x27;audio_file&#x27; not in request.files:&#xA;        return jsonify({"error": "No file part"}), 400&#xA;    &#xA;    audio_file = request.files.get(&#x27;audio_file&#x27;)&#xA;&#xA;    # Check if audio_file is sent in files&#xA;    if not audio_file:&#xA;        return jsonify({"error": "`audio_file` is missing in request.files"}), 400&#xA;&#xA;    # Check if the file is present&#xA;    if audio_file.filename == &#x27;&#x27;:&#xA;        return jsonify({"error": "No selected file"}), 400&#xA;&#xA;    # Save the file with a unique name&#xA;    filename = secure_filename(audio_file.filename)&#xA;    unique_filename = os.path.join("uploads", str(uuid.uuid4()) &#x2B; &#x27;_&#x27; &#x2B; filename)&#xA;    # audio_file.save(unique_filename)&#xA;    &#xA;    # Read the contents of the audio file&#xA;    contents = audio_file.read()&#xA;&#xA;    max_file_size = 500 * 1024 * 1024&#xA;    if len(contents) > max_file_size:&#xA;        return jsonify({"error": "File is too large"}), 400&#xA;&#xA;    # Check if the file extension suggests it&#x27;s a WAV file&#xA;    if not filename.lower().endswith(&#x27;.wav&#x27;):&#xA;        # Delete the file if it&#x27;s not a WAV file&#xA;        os.remove(unique_filename)&#xA;        return jsonify({"error": "Only WAV files are supported"}), 400&#xA;&#xA;    print(f"\033[92m{filename}\033[0m")&#xA;&#xA;    # Call Celery task asynchronously&#xA;    result = transcribe_audio.delay(contents)&#xA;&#xA;    return jsonify({&#xA;        "task_id": result.id,&#xA;        "status": "pending"&#xA;    })&#xA;&#xA;&#xA;@celery_app.task&#xA;def transcribe_audio(contents):&#xA;    # Transcribe the audio&#xA;    try:&#xA;        # Create a temporary file to save the audio data&#xA;        with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as temp_audio:&#xA;            temp_path = temp_audio.name&#xA;            temp_audio.write(contents)&#xA;&#xA;            print(f"\033[92mFile temporary path: {temp_path}\033[0m")&#xA;            transcribe_start_time = time.time()&#xA;&#xA;            # Transcribe the audio&#xA;            transcription = transcribe_with_whisper(temp_path)&#xA;            &#xA;            transcribe_end_time = time.time()&#xA;            print(f"\033[92mTranscripted text: {transcription}\033[0m")&#xA;&#xA;            return transcription, transcribe_end_time - transcribe_start_time&#xA;&#xA;    except Exception as e:&#xA;        print(f"\033[92mError: {e}\033[0m")&#xA;        return str(e)&#xA;

    &#xA;

    frontend :

    &#xA;

        useEffect(() => {&#xA;        const init = () => {&#xA;            navigator.mediaDevices.getUserMedia({audio: true})&#xA;                .then((audioStream) => {&#xA;                    const recorder = new MediaRecorder(audioStream);&#xA;&#xA;                    recorder.ondataavailable = e => {&#xA;                        if (e.data.size > 0) {&#xA;                            setChunks(prevChunks => [...prevChunks, e.data]);&#xA;                        }&#xA;                    };&#xA;&#xA;                    recorder.onerror = (e) => {&#xA;                        console.log("error: ", e);&#xA;                    }&#xA;&#xA;                    recorder.onstart = () => {&#xA;                        console.log("started");&#xA;                    }&#xA;&#xA;                    recorder.start();&#xA;&#xA;                    setStream(audioStream);&#xA;                    setRecorder(recorder);&#xA;                });&#xA;        }&#xA;&#xA;        init();&#xA;&#xA;        return () => {&#xA;            if (recorder &amp;&amp; recorder.state === &#x27;recording&#x27;) {&#xA;                recorder.stop();&#xA;            }&#xA;&#xA;            if (stream) {&#xA;                stream.getTracks().forEach(track => track.stop());&#xA;            }&#xA;        }&#xA;    }, []);&#xA;&#xA;    useEffect(() => {&#xA;        // Send chunks of audio data to the backend at regular intervals&#xA;        const intervalId = setInterval(() => {&#xA;            if (recorder &amp;&amp; recorder.state === &#x27;recording&#x27;) {&#xA;                recorder.requestData(); // Trigger data available event&#xA;            }&#xA;        }, 8000); // Adjust the interval as needed&#xA;&#xA;&#xA;        return () => {&#xA;            if (intervalId) {&#xA;                console.log("Interval cleared");&#xA;                clearInterval(intervalId);&#xA;            }&#xA;        };&#xA;    }, [recorder]);&#xA;&#xA;    useEffect(() => {&#xA;        const processAudio = async () => {&#xA;            if (chunks.length > 0) {&#xA;                // Send the latest chunk to the server for transcription&#xA;                const latestChunk = chunks[chunks.length - 1];&#xA;&#xA;                const audioBlob = new Blob([latestChunk]);&#xA;                convertBlobToAudioFile(audioBlob);&#xA;            }&#xA;        };&#xA;&#xA;        void processAudio();&#xA;    }, [chunks]);&#xA;&#xA;    const convertBlobToAudioFile = useCallback((blob: Blob) => {&#xA;        // Convert Blob to audio file (e.g., WAV)&#xA;        // This conversion may require using a third-party library or service&#xA;        // For example, you can use the MediaRecorder API to record audio in WAV format directly&#xA;        // Alternatively, you can use a library like recorderjs to perform the conversion&#xA;        // Here&#x27;s a simplified example using recorderjs:&#xA;&#xA;        const reader = new FileReader();&#xA;        reader.onload = () => {&#xA;            const audioBuffer = reader.result; // ArrayBuffer containing audio data&#xA;&#xA;            // Send audioBuffer to Flask server or perform further processing&#xA;            sendAudioToFlask(audioBuffer as ArrayBuffer);&#xA;        };&#xA;&#xA;        reader.readAsArrayBuffer(blob);&#xA;    }, []);&#xA;&#xA;    const sendAudioToFlask = useCallback((audioBuffer: ArrayBuffer) => {&#xA;        const formData = new FormData();&#xA;        formData.append(&#x27;audio_file&#x27;, new Blob([audioBuffer]), `speech_audio.wav`);&#xA;&#xA;        console.log(formData.get("audio_file"));&#xA;&#xA;        fetch(&#x27;http://34.87.75.138:8000/transcribe&#x27;, {&#xA;            method: &#x27;POST&#x27;,&#xA;            body: formData&#xA;        })&#xA;            .then(response => response.json())&#xA;            .then((data: { task_id: string, status: string }) => {&#xA;                pendingTaskIdsRef.current.push(data.task_id);&#xA;            })&#xA;            .catch(error => {&#xA;                console.error(&#x27;Error sending audio to Flask server:&#x27;, error);&#xA;            });&#xA;    }, []);&#xA;

    &#xA;

    I was trying to pass the audio from frontend to whisper model which is in flask app

    &#xA;