Recherche avancée

Médias (91)

Autres articles (95)

  • List of compatible distributions

    26 avril 2011, par

    The table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
    If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • Organiser par catégorie

    17 mai 2013, par

    Dans MédiaSPIP, une rubrique a 2 noms : catégorie et rubrique.
    Les différents documents stockés dans MédiaSPIP peuvent être rangés dans différentes catégories. On peut créer une catégorie en cliquant sur "publier une catégorie" dans le menu publier en haut à droite ( après authentification ). Une catégorie peut être rangée dans une autre catégorie aussi ce qui fait qu’on peut construire une arborescence de catégories.
    Lors de la publication prochaine d’un document, la nouvelle catégorie créée sera proposée (...)

Sur d’autres sites (4895)

  • Issue in CV_FOURCC('H', '2', '6', '4')

    16 décembre 2014, par Ashwin

    I am trying to use H264 encoding type for compressing the live streaming from Camera (which is supporting the H264 codec) am getting below -
    [I am using OPENCV 3.0 beta version (latest)in windows 7 64 bit system .My camera is also supporting H264 codec (find more details below) ]
    My ffmpeg code got built with h264 lib :
    This build was compiled with the following external libraries :
    x264 20140826-git-dd79a61 http://videolan.org/developers/x264.html

    **error :**

    Frame size = 1280x720
    Could not find encoder for codec id 28: Encoder not foundERROR: Failed to write the video
    Press any key to continue . . .

    Below is my code :

    int main(int argc, char *argv[])
    {
    // QApplication a(argc, argv);

     VideoCapture cap(0); //capture webcam

     if (!cap.isOpened()) //if not successful then exit
     {
       cout << "Cannot open webcam";
       return -1;
     }

     namedWindow("Camera feed", 1); //create window

     cap.set(3, 1280);
     cap.set(4, 720);

     double dWidth  = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get width of frames of video
     double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get height of frames of video    


     Size frameSize(static_cast<int>(dWidth), static_cast<int>(dHeight));

     cout &lt;&lt; "Frame size = " &lt;&lt; dWidth &lt;&lt; "x" &lt;&lt; dHeight &lt;&lt; endl;

     VideoWriter oVideoWriter("video.avi", CV_FOURCC('X', '2', '6', '4'), 30, frameSize);

     if(!oVideoWriter.isOpened())
     {
       cout &lt;&lt; "ERROR: Failed to write the video" &lt;&lt; endl;
       return -1;
     }
     while(1)
     {
       Mat frame;
       bool bSuccess = cap.read(frame); //read a new frame from video

       if(!bSuccess) //if unsuccessful, break loop
       {
           cout &lt;&lt; "Cannot read frame from video file" &lt;&lt; endl;
           break;
       }

       oVideoWriter.write(frame); //write the frame into the file
       imshow("Camera feed", frame); //show the frame in "Live Feed" window

       cout &lt;&lt; "Recording" &lt;&lt; endl;

       if (waitKey(30) == 27)

       {
         cout&lt;&lt; "Esc key is pressed by user" &lt;&lt; endl;
         break;
       }

     }
     return 0;
    }
    </int></int>

    Here is the proof that my camera is supporting the H264 :

    C:\Users>ffmpeg -f dshow -list_options true -i video="Logitech HD Pro Webcam C920"
    ffmpeg version N-66116-g720c21d Copyright (c) 2000-2014 the FFmpeg developers
     built on Sep  4 2014 22:09:48 with gcc 4.8.3 (GCC)
     configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib
     libavutil      54.  7.100 / 54.  7.100
     libavcodec     56.  1.100 / 56.  1.100
     libavformat    56.  4.100 / 56.  4.100
     libavdevice    56.  0.100 / 56.  0.100
     libavfilter     5.  0.103 /  5.  0.103
     libswscale      3.  0.100 /  3.  0.100
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  0.100 / 53.  0.100
    [dshow @ 0000000002faf680] DirectShow video device options
    [dshow @ 0000000002faf680]  Pin "Capture"
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=640x480 fps=5 max s=640x480 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=160x90 fps=5 max s=160x90 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=160x120 fps=5 max s=160x120 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=176x144 fps=5 max s=176x144 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=320x180 fps=5 max s=320x180 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=320x240 fps=5 max s=320x240 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=352x288 fps=5 max s=352x288 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=432x240 fps=5 max s=432x240 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=640x360 fps=5 max s=640x360 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=800x448 fps=5 max s=800x448 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=800x600 fps=5 max s=800x600 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=864x480 fps=5 max s=864x480 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=960x720 fps=5 max s=960x720 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=1024x576 fps=5 max s=1024x576 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=1280x720 fps=5 max s=1280x720 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=1600x896 fps=5 max s=1600x896 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=1920x1080 fps=5 max s=1920x1080 fps=30
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=2304x1296 fps=2 max s=2304x1296 fps=2
    [dshow @ 0000000002faf680]   pixel_format=bgr24  min s=2304x1536 fps=2 max s=2304x1536 fps=2
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=640x480 fps=5 max s=640x480 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=160x90 fps=5 max s=160x90 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=160x120 fps=5 max s=160x120 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=176x144 fps=5 max s=176x144 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=320x180 fps=5 max s=320x180 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=320x240 fps=5 max s=320x240 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=352x288 fps=5 max s=352x288 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=432x240 fps=5 max s=432x240 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=640x360 fps=5 max s=640x360 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=800x448 fps=5 max s=800x448 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=800x600 fps=5 max s=800x600 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=864x480 fps=5 max s=864x480 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=960x720 fps=5 max s=960x720 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=1024x576 fps=5 max s=1024x576 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=1280x720 fps=5 max s=1280x720 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=1600x896 fps=5 max s=1600x896 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=1920x1080 fps=5 max s=1920x1080 fps=30
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=2304x1296 fps=2 max s=2304x1296 fps=2
    [dshow @ 0000000002faf680]   pixel_format=yuv420p  min s=2304x1536 fps=2 max s=2304x1536 fps=2
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=640x480 fps=5 max s=640x480 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=160x90 fps=5 max s=160x90 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=160x120 fps=5 max s=160x120 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=176x144 fps=5 max s=176x144 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=320x180 fps=5 max s=320x180 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=320x240 fps=5 max s=320x240 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=352x288 fps=5 max s=352x288 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=432x240 fps=5 max s=432x240 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=640x360 fps=5 max s=640x360 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=800x448 fps=5 max s=800x448 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=800x600 fps=5 max s=800x600 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=864x480 fps=5 max s=864x480 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=960x720 fps=5 max s=960x720 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=1024x576 fps=5 max s=1024x576 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=1280x720 fps=5 max s=1280x720 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=1600x896 fps=5 max s=1600x896 fps=30
    [dshow @ 0000000002faf680]   vcodec=mjpeg  min s=1920x1080 fps=5 max s=1920x1080 fps=30
    [dshow @ 0000000002faf680]  Pin "Capture"
    [dshow @ 0000000002faf680]   vcodec=h264  min s=640x480 fps=5 max s=640x480 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=160x90 fps=5 max s=160x90 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=160x120 fps=5 max s=160x120 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=176x144 fps=5 max s=176x144 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=320x180 fps=5 max s=320x180 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=320x240 fps=5 max s=320x240 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=352x288 fps=5 max s=352x288 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=432x240 fps=5 max s=432x240 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=640x360 fps=5 max s=640x360 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=800x448 fps=5 max s=800x448 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=800x600 fps=5 max s=800x600 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=864x480 fps=5 max s=864x480 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=960x720 fps=5 max s=960x720 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=1024x576 fps=5 max s=1024x576 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=1280x720 fps=5 max s=1280x720 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=1600x896 fps=5 max s=1600x896 fps=30
    [dshow @ 0000000002faf680]   vcodec=h264  min s=1920x1080 fps=5 max s=1920x1080 fps=30
    video=Logitech HD Pro Webcam C920: Immediate exit requested
  • Evolution #4749 (Nouveau) : [UX] Comportement des labels : quoi par défaut, quoi ponctuel ?

    27 avril 2021, par RastaPopoulos ♥

    Ce ticket sert à réfléchir et possiblement reconcevoir les choix par défaut pour les labels des formulaires.

    État des lieux

    On le sait, l’ergo c’est normalement beaucoup d’objectif : certains placements, certaines tailles, épaisseurs, etc fonctionnent mieux que d’autres, et ceci est prouvable par tests utilisateurs.

    Or cela fait des années que les tests par eye-tracking montrent que les formulaires sont
    1) lu plus rapidement
    2) avec une meilleure compréhension
    lorsque les labels sont au-dessus des champs.

    Ça ne veut pas dire qu’il faut totalement interdire autrement mais : ça veut clairement dire que ça devrait être le comportement par défaut. Et seulement ponctuellement, par choix explicite, pouvoir mettre les labels sur le côté.

    Par ailleurs les pros de l’ergo (sur base des mêmes tests) préconisent tou⋅tes : dans les rares cas où on met les labels sur le côté, ça devrait être calé à droite sur le champ, pour les mêmes raisons de compréhension.

    Les avantages des labels au-dessus :
    - prouvé que c’est bien mieux compris par tout le monde
    - lecture plus rapide
    - fonctionne de base sur tous les écrans, pas d’adaptation à faire
    - polyvalent et générique sur le contenu des labels : marche mieux quelque soit la longueur, et donc à prioriser dans un contexte multilingue
    => cela correspond bien au maximum de notre utilisation : un CMS multi-lingue, allant enfin vers le responsive, se souciant d’accessibilité.

    Le seul désavantage : allonge la hauteur des formulaires, mais ça n’a un impact surtout que pour les formulaires ayant vraiment vraiment beaucoup de champs, ce qui est rare !
    Quand un formulaire est extrêmement long, il y a même plusieurs méthodes qui peuvent être utilisées sans pour autant passer les labels sur le côté :
    1) placer certains champs sur le même ligne (prénom + nom, etc)
    2) découper le formulaire en plusieurs étapes.

    Proposition pour le futur

    - tous les labels doivent être au-dessus comme comportement par défaut
    - pour certains cas, une classe permet de mettre sur le côté : valable uniquement en grand écran, ça reste au-dessus en mobile first
    - si sur le côté : c’est mieux si aligné sur le champ (donc à droite en LTR)
    - ex de rare formulaire candidat : changement des dates

    Quelques sources

    Tests utilisateurs
    https://www.uxmatters.com/mt/archives/2006/07/label-placement-in-forms.php

    Placing a label above an input field works better in most cases
    Placing labels above input fields is preferable
    In most cases, when placing labels to the left of input fields, using left-aligned labels imposes a heavy cognitive workload on users
    if you choose to place them to the left of input fields, at least make them right aligned

    Chez le très connu cabinet d’ergo Nielsen Group
    https://www.nngroup.com/articles/form-design-white-space/

    We recommend placing field labels above the corresponding text fields [en gras chez eux !]
    it makes the form easier to scan, because users can see the text field in the same fixation as the label. Top placement also allows for longer field labels
    If the labels are too far to the left, it can be difficult to associate the correct label with its corresponding field

    Chez Adobe, ils préconisent de suivre les recommandations de la première source
    https://xd.adobe.com/ideas/principles/web-design/best-practices-form-design/

    Matteo Penzo’s 2006 article on label placement suggests that forms are completed faster if labels are on top of the fields. Top-aligned labels are good if you want users to scan the form as quickly as possible.
    The biggest advantage of top-aligned labels is that different-sized labels and localized versions can more easily fit the UI.
    Takeaway : If you want users to scan a form quickly, put labels above the fields. The layout will be easier to scan because the eye will move straight down the page. However, if you want users to read carefully, put labels to the left of the fields. This layout will slow down the reader and make them scan in a Z-shaped motion.

    Chez une appli de conception d’interface
    https://phase.com/magazine/usability-of-forms/

    from a cognitive point of view, the association is powerful
    Also, the eyes move only in one direction since the scanning is top down as compared to Z shape (left-right and top-bottom) for inline labels
    Design is space efficient and hence adaptable to all resolutions ; in short, responsive in nature
    We also get flexibility regarding the length of labels. This proves useful while working with variable label lengths like multilingual support for applications
    One drawback of this approach is the increased height of the form. However, it can be solved with alternate designs like a grouping of fields or stepper forms

  • Video streaming error : Uncaught (in promise) NotSupportedError : Failed to load because no supported source was found

    18 septembre 2024, par Aizen

    Here is my problem : I have one video src 1080p (on the frontend). On the frontend, I send this video-route to the backend :

    &#xA;

    const req = async()=>{try{const res = await axios.get(&#x27;/catalog/item&#x27;,{params:{SeriesName:seriesName}});return {data:res.data};}catch(err){console.log(err);return false;}}const fetchedData = await req();-On the backend i return seriesName.Now i can make a full path,what the video is,and where it is,code:&#xA;

    &#xA;

    const videoUrl = &#x27;C:/Users/arMori/Desktop/RedditClone/reddit/public/videos&#x27;;console.log(&#x27;IT VideoURL&#x27;,videoUrl);&#xA;

    &#xA;

    const selectedFile = `${videoUrl}/${fetchedData.data.VideoSource}/${seriesName}-1080p.mp4`&#xA;console.log(`ITS&#x27;S SELECTED FILE: ${selectedFile}`);&#xA;

    &#xA;

    Ok, I have my src 1080p, now is the time to send it to the backend :

    &#xA;

    const response = await axios.post(&#x27;/videoFormat&#x27;, {videoUrl:selectedFile})console.log(&#x27;Это консоль лог путей: &#x27;,response.data);const videoPaths = response.data;&#xA;

    &#xA;

    Backend takes it and FFMpqg makes two types of resolution,720p and 480p,save it to the temp storage on backend, and then returns two routes where these videos stores

    &#xA;

    async videoUpload(videoUrl:string){try{const tempDir = C:/Users/arMori/Desktop/RedditClone/reddit_back/src/video/temp;const inputFile = videoUrl;console.log(&#x27;VIDEOURL: &#x27;,videoUrl);&#xA;

    &#xA;

            const outputFiles = [];&#xA;        &#xA;        await this.createDirectories(tempDir);        &#xA;        outputFiles.push(await this.convertVideo(inputFile, &#x27;1280x720&#x27;, &#x27;720p.mp4&#x27;));&#xA;        outputFiles.push(await this.convertVideo(inputFile, &#x27;854x480&#x27;, &#x27;480p.mp4&#x27;));&#xA;        console.log(&#x27;OUTUPT FILES SERVICE: &#x27;,outputFiles);&#xA;        &#xA;        return outputFiles;&#xA;&#xA;    }catch(err){&#xA;        console.error(&#x27;VideoFormatterService Error: &#x27;,err);&#xA;        &#xA;    }&#xA;}&#xA;&#xA;private convertVideo(inputPath:string,resolution:string,outputFileName:string):Promise<string>{&#xA;    const temp = `C:/Users/arMori/Desktop/RedditClone/reddit_back/src/video/temp`;&#xA;    return new Promise(async(resolve,reject)=>{&#xA;        const height = resolution.split(&#x27;x&#x27;)[1];&#xA;        console.log(&#x27;HIEGHT: &#x27;,height);&#xA;        &#xA;        const outputDir = `C:/Users/arMori/Desktop/RedditClone/reddit_back/src/video/temp/${height}p`;&#xA;        const outputPath = join(outputDir, outputFileName);&#xA;        const isExists = await fs.access(outputPath).then(() => true).catch(() => false);&#xA;        if(isExists){ &#xA;            console.log(`File already exists: ${outputPath}`);&#xA;            return resolve(outputPath)&#xA;        };&#xA;        ffmpeg(inputPath)&#xA;        .size(`${resolution}`)&#xA;        .videoCodec(&#x27;libx264&#x27;) // Кодек H.264&#xA;        .audioCodec(&#x27;aac&#x27;) &#xA;        .output(outputPath)&#xA;        .on(&#x27;end&#x27;,()=>resolve(outputPath))&#xA;        .on(&#x27;error&#x27;,(err)=>reject(err))&#xA;        .run()&#xA;            &#xA;    })&#xA;}&#xA;&#xA;private async createDirectories(temp:string){&#xA;    try{&#xA;        const dir720p = `${temp}/720p`;&#xA;        const dir480p = `${temp}/480p`;&#xA;        const dir720pExists = await fs.access(dir720p).then(() => true).catch(() => false);&#xA;        const dir480pExists = await fs.access(dir480p).then(() => true).catch(() => false);&#xA;        if(dir720pExists &amp;&amp; dir480pExists){&#xA;            console.log(&#x27;FILES ALIVE&#x27;);&#xA;            return;&#xA;        }&#xA;        if (!dir720pExists) {&#xA;            await fs.mkdir(dir720p, { recursive: true });&#xA;            console.log(&#x27;Папка 720p создана&#x27;);&#xA;        }&#xA;        &#xA;        if (!dir480pExists) {&#xA;            await fs.mkdir(dir480p, { recursive: true });&#xA;            console.log(&#x27;Папка 480p создана&#x27;);&#xA;        }&#xA;    } catch (err) {&#xA;        console.error(&#x27;Ошибка при создании директорий:&#x27;, err);&#xA;    }&#xA;}&#xA;</string>

    &#xA;

    Continue frontentd code :

    &#xA;

    let videoPath;&#xA;&#xA;if (quality === &#x27;720p&#x27;) {&#xA;        videoPath = videoPaths[0];&#xA;} else if (quality === &#x27;480p&#x27;) {&#xA;        videoPath = videoPaths[1];&#xA;}&#xA;&#xA;if (!videoPath) {&#xA;        console.error(&#x27;Video path not found!&#x27;);&#xA;        return;&#xA;}&#xA;&#xA;// Получаем видео по его пути&#xA;console.log(&#x27;VIDEOPATH LOG: &#x27;,videoPath);&#xA;    &#xA;const videoRes = await axios.get(&#x27;/videoFormat/getVideo&#x27;, { &#xA;        params: { path: videoPath } ,&#xA;        headers: { Range: &#x27;bytes=0-&#x27; },&#xA;        responseType: &#x27;blob&#x27;&#xA;    });&#xA;    console.log(&#x27;Video fetched: &#x27;, videoRes);&#xA;    const videoBlob = new Blob([videoRes.data], { type: &#x27;video/mp4&#x27; });&#xA;    const videoURL = URL.createObjectURL(videoBlob);&#xA;    return videoURL;&#xA;    /* console.log(&#x27;Видео успешно загружено:&#x27;, response.data); */&#xA;    } catch (error) {&#xA;    console.error(&#x27;Ошибка при загрузке видео:&#x27;, error);&#xA;    }&#xA;}&#xA;

    &#xA;

    Here I just choose one of the route and make a new GET request (VideoRes), now in the controller in the backend, I'm trying to do a video streaming :

    &#xA;

    @Public()&#xA;    @Get(&#x27;/getVideo&#x27;)&#xA;    async getVideo(@Query(&#x27;path&#x27;) videoPath:string,@Req() req:Request,@Res() res:Response){&#xA;        try {&#xA;            console.log(&#x27;PATH ARGUMENT: &#x27;,videoPath);&#xA;            console.log(&#x27;VIDEOPATH IN SERVICE: &#x27;,videoPath);&#xA;        const videoSize = (await fs.stat(videoPath)).size;&#xA;        const CHUNK_SIZE = 10 ** 6;&#xA;        const range = req.headers[&#x27;range&#x27;] as string | undefined;&#xA;        if (!range) {&#xA;            return new ForbiddenException(&#x27;Range не найденно&#x27;);&#xA;        }&#xA;        const start = Number(range.replace(/\D/g,""));&#xA;        const end = Math.min(start &#x2B; CHUNK_SIZE,videoSize - 1);&#xA;&#xA;        const contentLength = end - start &#x2B; 1;&#xA;        const videoStream = fsSync.createReadStream(videoPath, { start, end });&#xA;        const headers = {&#xA;            &#x27;Content-Range&#x27;:`bytes ${start}-${end}/${videoSize}`,&#xA;            &#x27;Accept-Ranges&#x27;:&#x27;bytes&#x27;,&#xA;            &#x27;Content-Length&#x27;:contentLength,&#xA;            &#x27;Content-Type&#x27;:&#x27;video/mp4&#x27;&#xA;        }&#xA;        &#xA;        res.writeHead(206,headers);&#xA;&#xA;        // Передаем поток в ответ&#xA;        videoStream.pipe(res);&#xA;        &#xA;&#xA;        // Если возникнет ошибка при стриминге, логируем ошибку&#xA;        videoStream.on(&#x27;error&#x27;, (error) => {&#xA;            console.error(&#x27;Ошибка при чтении видео:&#x27;, error);&#xA;            res.status(500).send(&#x27;Ошибка при чтении видео&#x27;);&#xA;        });&#xA;        } catch (error) {&#xA;            console.error(&#x27;Ошибка при обработке запросов:&#x27;, error);&#xA;            return res.status(400).json({ message: &#x27;Ошибка при обработке getVideo запросов&#x27; });&#xA;        }&#xA;    }&#xA;

    &#xA;

    Send to the frontend

    &#xA;

    res.writeHead(206,headers);&#xA;

    &#xA;

    In the frontend, I make blob url for video src and return it

    &#xA;

    const videoBlob = new Blob([videoRes.data], { type: &#x27;video/mp4&#x27; });const videoURL = URL.createObjectURL(videoBlob);return videoURL;&#xA;

    &#xA;

    And assign src to the video :

    &#xA;

    useVideo(seriesName,quality).then(src => {&#xA;                if (src) {&#xA;                    console.log(&#x27;ITS VIDEOLOGISC GOIDA!&#x27;);&#xA;                    if(!playRef.current) return;&#xA;                    &#xA;                    const oldURL = playRef.current.src;&#xA;                    if (oldURL &amp;&amp; oldURL.startsWith(&#x27;blob:&#x27;)) {&#xA;                        URL.revokeObjectURL(oldURL);&#xA;                    }&#xA;                    playRef.current.pause();&#xA;                    playRef.current.src = &#x27;&#x27;;&#xA;                    setQuality(quality);&#xA;                    console.log(&#x27;SRC: &#x27;,src);&#xA;                    &#xA;                    playRef.current.src = src;&#xA;                    playRef.current.load();&#xA;                    console.log(&#x27;ITS VIDEOURL GOIDA!&#x27;);&#xA;                    togglePlayPause();&#xA;                }&#xA;            })&#xA;            .catch(err => console.error(&#x27;Failed to fetch video&#x27;, err));&#xA;

    &#xA;

    But the problem is :

    &#xA;

    &#xA;

    Vinland-Saga:1 Uncaught (in promise) NotSupportedError : Failed to load because no supported source was found

    &#xA;

    &#xA;

    And I don't know why...

    &#xA;

    I tried everything, but I don't understand why src is incorrect..

    &#xA;