Recherche avancée

Médias (1)

Mot : - Tags -/Christian Nold

Autres articles (111)

  • 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.

  • Changer son thème graphique

    22 février 2011, par

    Le thème graphique ne touche pas à la disposition à proprement dite des éléments dans la page. Il ne fait que modifier l’apparence des éléments.
    Le placement peut être modifié effectivement, mais cette modification n’est que visuelle et non pas au niveau de la représentation sémantique de la page.
    Modifier le thème graphique utilisé
    Pour modifier le thème graphique utilisé, il est nécessaire que le plugin zen-garden soit activé sur le site.
    Il suffit ensuite de se rendre dans l’espace de configuration du (...)

  • Possibilité de déploiement en ferme

    12 avril 2011, par

    MediaSPIP peut être installé comme une ferme, avec un seul "noyau" hébergé sur un serveur dédié et utilisé par une multitude de sites différents.
    Cela permet, par exemple : de pouvoir partager les frais de mise en œuvre entre plusieurs projets / individus ; de pouvoir déployer rapidement une multitude de sites uniques ; d’éviter d’avoir à mettre l’ensemble des créations dans un fourre-tout numérique comme c’est le cas pour les grandes plate-formes tout public disséminées sur le (...)

Sur d’autres sites (12830)

  • webrtc to rtmp send video from camera to rtmp link

    14 avril 2024, par Leo-Mahendra

    i cant send the video from webrtc which is converted to bufferd data for every 10seconds and send to server.js where it takes it via websockets and convert it to flv format using ffmpeg.

    


    i am trying to send it to rtmp server named restreamer for start, here i tried to convert the buffer data and send it to rtmp link using ffmpeg commands, where i initially started to suceesfully save the file from webrtc to mp4 format for a duration of 2-3 minute.

    


    after i tried to use webrtc to send video data for every 10 seconds and in server i tried to send it to rtmp but i cant send it, but i can see the connection of rtmp url and server is been taken place but i cant see the video i can see the logs in rtmp server as

    


    2024-04-14 12:35:45 ts=2024-04-14T07:05:45Z level=INFO component="RTMP" msg="no streams available" action="INVALID" address=":1935" client="172.17.0.1:37700" path="/3d30c5a9-2059-4843-8957-da963c7bc19b.stream" who="PUBLISH"
2024-04-14 12:35:45 ts=2024-04-14T07:05:45Z level=INFO component="RTMP" msg="no streams available" action="INVALID" address=":1935" client="172.17.0.1:37716" path="/3d30c5a9-2059-4843-8957-da963c7bc19b.stream" who="PUBLISH"
2024-04-14 12:35:45 ts=2024-04-14T07:05:45Z level=INFO component="RTMP" msg="no streams available" action="INVALID" address=":1935" client="172.17.0.1:37728" path="/3d30c5a9-2059-4843-8957-da963c7bc19b.stream" who="PUBLISH"   


    


    my frontend code

    


         const handleSendVideo = async () => {
        console.log("start");
    
        if (!ws) {
            console.error('WebSocket connection not established.');
            return;
        }
    
        try {
            const videoStream = await navigator.mediaDevices.getUserMedia({ video: true });
            const mediaRecorder = new MediaRecorder(videoStream);
    
            const requiredFrameSize = 460800;
            const frameDuration = 10 * 1000; // 10 seconds in milliseconds
    
            mediaRecorder.ondataavailable = async (event) => {
                if (ws.readyState !== WebSocket.OPEN) {
                    console.error('WebSocket connection is not open.');
                    return;
                }
    
                if (event.data.size > 0) {
                    const arrayBuffer = await event.data.arrayBuffer();
                    const uint8Array = new Uint8Array(arrayBuffer);
    
                    const width = videoStream.getVideoTracks()[0].getSettings().width;
                    const height = videoStream.getVideoTracks()[0].getSettings().height;
    
                    const numFrames = Math.ceil(uint8Array.length / requiredFrameSize);
    
                    for (let i = 0; i < numFrames; i++) {
                        const start = i * requiredFrameSize;
                        const end = Math.min((i + 1) * requiredFrameSize, uint8Array.length);
                        let frameData = uint8Array.subarray(start, end);
    
                        // Pad or trim the frameData to match the required size
                        if (frameData.length < requiredFrameSize) {
                            // Pad with zeros to reach the required size
                            const paddedData = new Uint8Array(requiredFrameSize);
                            paddedData.set(frameData, 0);
                            frameData = paddedData;
                        } else if (frameData.length > requiredFrameSize) {
                            // Trim to match the required size
                            frameData = frameData.subarray(0, requiredFrameSize);
                        }
    
                        const dataToSend = {
                            buffer: Array.from(frameData), // Convert Uint8Array to array of numbers
                            width: width,
                            height: height,
                            pixelFormat: 'yuv420p',
                            mode: 'SendRtmp'
                        };
    
                        console.log("Sending frame:", i);
                        ws.send(JSON.stringify(dataToSend));
                    }
                }
            };
    
            // Start recording and send data every 10 seconds
            mediaRecorder.start(frameDuration);
    
            console.log("MediaRecorder started.");
        } catch (error) {
            console.error('Error accessing media devices or starting recorder:', error);
        }
      };


    


    and my backend

    


        wss.on('connection', (ws) => {
    console.log('WebSocket connection established.');

    ws.on('message', async (data) => {
        try {
            const parsedData = JSON.parse(data);

            if (parsedData.mode === 'SendRtmp' && Array.isArray(parsedData.buffer)) {
                const { buffer, pixelFormat, width, height } = parsedData;
                const bufferArray = Buffer.from(buffer);

                await sendRtmpVideo(bufferArray, pixelFormat, width, height);
            } else {
                console.log('Received unknown or invalid mode or buffer data');
            }
        } catch (error) {
            console.error('Error parsing WebSocket message:', error);
        }
    });

    ws.on('close', () => {
        console.log('WebSocket connection closed.');
    });
    });
    const sendRtmpVideo = async (frameBuffer, pixelFormat, width, height) => {
    console.log("ffmpeg data",frameBuffer)
    try {
        const ratio = `${width}x${height}`;
        const ffmpegCommand = [
            '-re',
            '-f', 'rawvideo',
            '-pix_fmt', pixelFormat,
            '-s', ratio,
            '-i', 'pipe:0',
            '-c:v', 'libx264',
            '-preset', 'fast', // Specify the preset for libx264
            '-b:v', '3000k',    // Specify the video bitrate
            '-loglevel', 'debug',
            '-f', 'flv',
            // '-flvflags', 'no_duration_filesize', 
            RTMPLINK
        ];


        const ffmpeg = spawn('ffmpeg', ffmpegCommand);

        ffmpeg.on('exit', (code, signal) => {
            if (code === 0) {
                console.log('FFmpeg process exited successfully.');
            } else {
                console.error(`FFmpeg process exited with code ${code} and signal ${signal}`);
            }
        });

        ffmpeg.on('error', (error) => {
            console.error('FFmpeg spawn error:', error);
        });

        ffmpeg.stderr.on('data', (data) => {
            console.error(`FFmpeg stderr: ${data}`);
        });

        ffmpeg.stdin.write(frameBuffer, (err) => {
            if (err) {
                console.error('Error writing to FFmpeg stdin:', err);
            } else {
                console.log('Data written to FFmpeg stdin successfully.');
            }
            ffmpeg.stdin.end(); // Close stdin after writing the buffer
        });
        } catch (error) {
        console.error('Error in sendRtmpVideo:', error);
        }
    };



    


  • Apache Tika 2.0.9 programm ffmpeg and exiftool not found ?

    6 avril 2024, par mj44

    I use an JavaFX Maven Project to use Apache Tika Version 2.9.0.
The Java Test program will be finished and all methods that I create will done right.
I have in the log file a lot of DEBUG errors and Idon't know why ?
I habe spent many hours to clear the problem.

    


    Here's an excerpt of the logfile

    


    2024-04-03 14:56:12 [main] DEBUG org.apache.tika.parser.external.ExternalParser - exception trying to run  ffmpeg
java.io.IOException: Cannot run program "ffmpeg": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1140) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1074) ~[?:?]
...
2024-04-03 14:56:12 [main] DEBUG org.apache.tika.parser.external.ExternalParser - exception trying to run  exiftool
java.io.IOException: Cannot run program "exiftool": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1140) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1074) ~[?:?]
...



    


    The message says that ffmpeg and exiftool are not found.

    


    This is my tika-config.xml

    


    &lt;?xml version="1.0" encoding="UTF-8"?>&#xA;<properties>&#xA;    <parsers>&#xA;        <parser class="org.apache.tika.parser.DefaultParser"></parser>&#xA;        <parser class="org.apache.tika.parser.pdf.PDFParser"></parser>&#xA;        &#xA;        <parser class="org.apache.tika.parser.external.ExternalParser">&#xA;            <params>&#xA;                true&#xA;                &#xA;                "D:\Tools\ffmpeg-6.1.1\bin\ffmpeg.exe"&#xA;            </params>&#xA;        </parser>&#xA;        &#xA;        <parser class="org.apache.tika.parser.external.ExternalParser">&#xA;            <params>&#xA;                true&#xA;                &#xA;                "D:\Tools\exiftool.exe"&#xA;            </params>&#xA;        </parser>&#xA;    </parsers>&#xA;    <detector>&#xA;        <detector class="org.apache.tika.detect.DefaultDetector"></detector>&#xA;    </detector>&#xA;</properties>&#xA;

    &#xA;

    I tested the path of the programms in a console ant it worked fine ?&#xA;I don't know what I can do now ?

    &#xA;

    Thanks for Help

    &#xA;

    I have downloaded new copies of the ffmpeg and exiftool and installed them.&#xA;I tested it in a console to run and both tools work fine.&#xA;I tested the permissions, no problems with permissions&#xA;I tested that the tika-config.xml will be loaded, it loaded.

    &#xA;

  • Struggling to add subtitles to a video using FFMPEG and C#

    19 mars 2024, par MattHodson

    I'm trying to add subtitles to my videos, 100% with code using FFMPEG and C#.

    &#xA;

    But I'm getting the following error :

    &#xA;

    &#xA;

    ffmpeg version 2024-02-04-git-7375a6ca7b-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers&#xA;built with gcc 12.2.0 (Rev10, Built by MSYS2 project)&#xA;configuration : —enable-gpl —enable-version3 —enable-static —pkg-config=pkgconf —disable-w32threads —disable-autodetect —enable-fontconfig —enable-iconv —enable-gnutls —enable-libxml2 —enable-gmp —enable-bzlib —enable-lzma —enable-zlib —enable-libsrt —enable-libssh —enable-libzmq —enable-avisynth —enable-sdl2 —enable-libwebp —enable-libx264 —enable-libx265 —enable-libxvid —enable-libaom —enable-libopenjpeg —enable-libvpx —enable-mediafoundation —enable-libass —enable-libfreetype —enable-libfribidi —enable-libharfbuzz —enable-libvidstab —enable-libvmaf —enable-libzimg —enable-amf —enable-cuda-llvm —enable-cuvid —enable-ffnvcodec —enable-nvdec —enable-nvenc —enable-dxva2 —enable-d3d11va —enable-libvpl —enable-libgme —enable-libopenmpt —enable-libopencore-amrwb —enable-libmp3lame —enable-libtheora —enable-libvo-amrwbenc —enable-libgsm —enable-libopencore-amrnb —enable-libopus —enable-libspeex —enable-libvorbis —enable-librubberband&#xA;libavutil 58. 36.101 / 58. 36.101&#xA;libavcodec 60. 38.100 / 60. 38.100&#xA;libavformat 60. 20.100 / 60. 20.100&#xA;libavdevice 60. 4.100 / 60. 4.100&#xA;libavfilter 9. 17.100 / 9. 17.100&#xA;libswscale 7. 6.100 / 7. 6.100&#xA;libswresample 4. 13.100 / 4. 13.100&#xA;libpostproc 57. 4.100 / 57. 4.100&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C :\Users\Gamer\source\repos\XXXX\bin\Debug\net8.0\ce31c8ab-4b53-44e8-9e25-d02ba5466144\output.mp4' :&#xA;Metadata :&#xA;major_brand : isom&#xA;minor_version : 512&#xA;compatible_brands : isomiso2avc1mp41&#xA;encoder : Lavf60.20.100&#xA;Duration : 00:03:18.84, start : 0.000000, bitrate : 101 kb/s&#xA;Stream #0:00x1 : Video : h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1024x1792, 26 kb/s, 1 fps, 1 tbr, 16384 tbn (default)&#xA;Metadata :&#xA;handler_name : VideoHandler&#xA;vendor_id : [0][0][0][0]&#xA;encoder : Lavc60.38.100 libx264&#xA;Stream #0:10x2 : Audio : aac (LC) (mp4a / 0x6134706D), 24000 Hz, mono, fltp, 74 kb/s (default)&#xA;Metadata :&#xA;handler_name : SoundHandler&#xA;vendor_id : [0][0][0][0]&#xA;[Parsed_subtitles_0 @ 000001a87404e3c0] Unable to parse option value "UsersGamersourcereposXXXXbinDebugnet8.0ce31c8ab-4b53-44e8-9e25-d02ba5466144output.srt" as image size&#xA;Error applying option 'original_size' to filter 'subtitles' : Invalid argument&#xA;[vost#0:0/libx264 @ 000001a874064a40] Error initializing a simple filtergraph&#xA;Error opening output file C :\Users\Gamer\source\repos\XXXX\bin\Debug\net8.0\ce31c8ab-4b53-44e8-9e25-d02ba5466144\videoWithSubtitles.mp4.&#xA;Error opening output files : Invalid argument

    &#xA;

    &#xA;

    It seems to be something related to paths, but I have tried EVERYTHING in my knowledge to fix this, still no luck... spent the majority of the day on it, no luck... so StackOverflow here I come !

    &#xA;

    My code :

    &#xA;

       public static async Task AddSubtitlesToVideoAsync(string videoPath, string subtitlesPath, string outputPath)&#xA;    {&#xA;        if (File.Exists(videoPath) &amp;&amp; File.Exists(subtitlesPath))&#xA;        {&#xA;            //string subtitlesPathForwardSlashes = subtitlesPath.Replace("\\", "/");&#xA;            //string ffmpegCommand = $"-i \"{videoPath}\" -filter_complex \"subtitles=&#x27;{subtitlesPathForwardSlashes}&#x27;\" \"{outputPath}\"";&#xA;            //string ffmpegCommand = $"-i \"{videoPath}\" -vf subtitles={subtitlesPathForwardSlashes} \"{outputPath}\"";&#xA;            //string ffmpegCommand = $"-i \"{videoPath}\" -vf subtitles=\"{subtitlesPath}\" \"{outputPath}\"";&#xA;            string subtitlesPathEscaped = subtitlesPath.Replace("\\", "\\\\");&#xA;            string ffmpegCommand = $"-i \"{videoPath}\" -vf subtitles=\"{subtitlesPathEscaped}\" \"{outputPath}\"";&#xA;&#xA;&#xA;            //output    -i C:\Users\Gamer\source\repos\XXXX\bin\Debug\net8.0\d745a08d-b932-47ac-a81c-45e9483590a7\output.mp4 -vf subtitles="C:/Users/Gamer/source/repos/XXXX/bin/Debug/net8.0/d745a08d-b932-47ac-a81c-45e9483590a7/generatedSubtitles.srt" C:\Users\Gamer\source\repos\XXXX\bin\Debug\net8.0\d745a08d-b932-47ac-a81c-45e9483590a7\videoWithSubtitles.mp4&#xA;            await ExecuteSubtitleCommandAsync(ffmpegCommand);&#xA;        }&#xA;        else&#xA;        {&#xA;            Console.WriteLine("Files can&#x27;t be found.");&#xA;        }&#xA;    }&#xA;&#xA;    public static async Task ExecuteSubtitleCommandAsync(string arguments)&#xA;    {&#xA;        string ffmpegExecutablePath = ffmpegRoot;&#xA;        var startInfo = new ProcessStartInfo(ffmpegExecutablePath, arguments)&#xA;        {&#xA;            CreateNoWindow = true,&#xA;            UseShellExecute = false,&#xA;            RedirectStandardOutput = true,&#xA;            RedirectStandardError = true&#xA;        };&#xA;&#xA;        using (var process = new Process { StartInfo = startInfo })&#xA;        {&#xA;            process.EnableRaisingEvents = true; // Enable the Exited event.&#xA;            process.Exited &#x2B;= (sender, e) =>&#xA;            {&#xA;                Console.WriteLine($"FFmpeg process exited with code {process.ExitCode}.");&#xA;            };&#xA;&#xA;            try&#xA;            {&#xA;                process.Start();&#xA;                // Asynchronously read the standard output and standard error of the process&#xA;                var outputTask = process.StandardOutput.ReadToEndAsync();&#xA;                var errorTask = process.StandardError.ReadToEndAsync();&#xA;                // Wait for both asynchronous tasks to complete&#xA;                await Task.WhenAll(outputTask, errorTask);&#xA;&#xA;                var output = await outputTask;&#xA;                var error = await errorTask;&#xA;&#xA;                if (!string.IsNullOrEmpty(error))&#xA;                {&#xA;                    Console.WriteLine("FFmpeg error: " &#x2B; error);&#xA;                }&#xA;                else&#xA;                {&#xA;                    Console.WriteLine("FFmpeg process completed successfully.");&#xA;                }&#xA;            }&#xA;            catch (Exception ex)&#xA;            {&#xA;                Console.WriteLine("Error: " &#x2B; ex.Message);&#xA;            }&#xA;            finally&#xA;            {&#xA;                // Wait for the process to exit if it hasn&#x27;t already.&#xA;                if (!process.HasExited)&#xA;                {&#xA;                    process.WaitForExit();&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;

    &#xA;