Recherche avancée

Médias (91)

Autres articles (75)

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

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

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

Sur d’autres sites (9430)

  • why is powershell stripping the first "-" in my arguments to ffmpeg [duplicate]

    12 décembre 2022, par robynChill

    Here is a simplified version of the powershell script I'm trying to write to join some .mp4 files :

    


    [string]$inputs = ""
$filenames = "input1.mp4", "input2.mp4", "input3.mp4"
foreach ($f in $filenames) {
    $inputs += "-i $f "
}
Write-Host $inputs
.\bin\ffmpeg.exe $inputs -filter_complex...


    


    The write-host prints out the string like I expect, but then ffmpeg gives me an error that says :

    


    


    Unrecognized option 'i input1.mp4 -i input2.mp4 -i input3.mp4 '.
Error splitting the argument list : Option not found

    


    


    So it looks like when the arguments are being passed to cmd.exe to be passed to ffmpeg, something is getting lost (at least that's how I think it works). I've read other questions that talk about problems with passing double-quotes in arguments, but my problem is with -. Can someone explain what is going in my case ? I don't think it's an escaping issue since the second and third - look like they're being passed. Also, if I just use start-process with the -argumentList option (and prepare one big $arguments string beforehand) then everything works.

    


  • How to grab ffmpeg's output as binary and write it to a file on the fly such that video players can play it in real time ?

    29 décembre 2022, par Mister Mystère

    I want to stream a RTSP-streaming device to a video player such as VLC but the catch is that, in between, the binary data needs to go through a custom high-speed serial link. I control what goes in this link from a C++ program.

    


    I was happily surprised to see that the following line allowed me to watch the RTSP stream by just opening "out.bin" from VLC which was a good lead for fast and efficient binary transmission of the stream :

    


    ffmpeg -i "rtsp://admin:password@X.X.X.X:554/h264Preview_01_main" -c:v copy -c:a copy -f mpegts out.bin


    


    I already wondered how ffmpeg manages to allow VLC to read that file, while itself writing to it at the same time. Turns out I was right to wonder, see below.

    


    I told myself I could make this command pipe its output to the standard output, and then in turn pipe the standard output to a file that I can read, (later, slice it, transmit the chunks and reconstruct it) and then write to an output file. However, this does not work :

    


    #include 
#include 
#include 

#define BUFSIZE 188 //MPEG-TS packet size

int main()
{
    char *cmd = (char*)"ffmpeg -i \"rtsp://admin:password@X.X.X.X:554/h264Preview_01_main\" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet";
    char buf[BUFSIZE];
    FILE *ptr, *file;

    file = fopen("./out.bin", "w");

    if (!file)
    {
        printf("Failed to open output file for writing, aborting");
       abort();
    }

    if ((ptr = popen(cmd, "r")) != NULL) {
       printf("Writing RTSP stream to file...");

       while (!kbhit())
       {
            if(fread(&buf, sizeof(char), BUFSIZE, ptr) != 0)
            {
               fwrite(buf, sizeof(char), BUFSIZE, file);
            }
            else
            {
                printf("No data\n");
            }
       }
       pclose(ptr);
    }
    else
    {
        printf("Failed to open pipe from ffmpeg command, aborting");
    }

    printf("End of program");

    fclose(file);
    return 0;
}


    


    Since VLC says "your input can't be opened" - whereas this works just fine :

    


    ffmpeg -i "rtsp://admin:password@X.X.X.X:554/h264Preview_01_main" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet > out.bin


    


    This is what ends up in the file after I close the program, versus the result of the command immediately above :
enter image description here

    


    The file is always 2kB regardless of how long I run the program : "No data" is shown repeatedly in the console output.

    


    Why doesn't it work ? If it is not just a bug, how can I grab the stream as binary at some point, and write it at the end to a file that VLC can read ?

    


    Update

    


    New code after applying Craig Estey's fix to my stupid mistake. The end result is that the MPEG-TS frames don't seem to shift anymore but the file writing stops partway into one of the first few frames (the console only shows a few ">" symbols and then stays silent, c.f. code).

    


    #include 
#include 
#include 

#define BUFSIZE 188                     // MPEG-TS packet size

int
main()
{
    char *cmd = (char *) "ffmpeg -i \"rtsp://127.0.0.1:8554/test.sdp\" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet";
    char buf[BUFSIZE];
    FILE *ptr,
    *file;

    file = fopen("./out.ts", "w");

    if (!file) {
        printf("Failed to open output file for writing, aborting");
        abort();
    }

    if ((ptr = popen(cmd, "r")) != NULL) {
        printf("Writing RTSP stream to file...");

        while(!kbhit()) {
            ssize_t rlen = fread(&buf, sizeof(char), BUFSIZE, ptr);
            if(rlen != 0)
            {
                printf(">");
                fwrite(buf, sizeof(char), rlen, file);
                fflush(file);
            }
        }
        pclose(ptr);
    }
    else {
        printf("Failed to open pipe from ffmpeg command, aborting");
    }

    printf("End of program");

    fclose(file);
    return 0;
}


    


    This can be tested on any computer with VLC and a webcam : open VLC, open capture device, capture mode directshow, (switch "play" for "stream"), next, display locally, select RTSP, Add, path=/test.sdp, next, transcoding=H264+MP3 (TS), replace rtsp ://:8554/ with rtsp ://127.0.0.1:8554/ in the generated command line, stream.

    


    To test that streaming is ok, you can just open a command terminal and enter "ffmpeg -i "rtsp ://127.0.0.1:8554/test.sdp" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet", the terminal should fill up with binary data.

    


    To test the program, just compile, run, and open out.ts after the program has run.

    


  • How do I fix "undefined reference" errors in my Qt-Creator project while linking the ffmpeg library "libav" ?

    25 décembre 2022, par VCoder12345

    I'm currently trying to use the libav library from FFmpeg in my Qt-Creator project, but I get over a thousand "undefined reference to ..." errors and I have no idea what I'm doing wrong. The errors don't depend on the actual code, because I changed it a few times, but as long as I use methods of the library these errors occur.
I have also tried to run the code in Visual Studio and that worked.

    


    My project-file looks like this :

    


    QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
INCLUDEPATH += D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\include

SOURCES += \
    Main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

QMAKE_CXXFLAGS += -D__STDC_CONSTANT_MACROS

LIBS += -lMfuuid
LIBS += -lStrmiids
LIBS += -lMfplat
LIBS += -lBcrypt
LIBS += -lSecur32
LIBS += -lWs2_32
LIBS += -pthread
LIBS += -L"D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib"
LIBS += -lavdevice
LIBS += -lavfilter
LIBS += -lavformat
LIBS += -lavcodec
LIBS += -lswresample
LIBS += -lswscale
LIBS += -lavutil

HEADERS += \
    wrapper.h


    


    The library files are stored at D :\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib. The errors I get when running the program look something like this (extract).

    


    :-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/aviobuf.o):(.text$mn+0x16): undefined reference to `__security_cookie'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/aviobuf.o):(.xdata[$unwind$ff_read_string_to_bprint_overwrite]+0x1c): more undefined references to `__GSHandlerCheck' follow
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/4xm.o):(.text$mn+0x250): undefined reference to `__security_check_cookie'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.text$mn+0x2fe): undefined reference to `sscanf'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.text$mn+0x33f): undefined reference to `sscanf'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.text$mn+0x65b): undefined reference to `__report_rangecheckfailure'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.text$mn+0x18): undefined reference to `__security_cookie'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.text$mn+0x97): undefined reference to `__security_check_cookie'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.text$mn+0x14d): undefined reference to `__report_rangecheckfailure'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.xdata[$unwind$yuv4_read_header]+0x20): undefined reference to `__GSHandlerCheck'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/yuv4mpegdec.o):(.xdata[$unwind$yuv4_read_packet]+0x18): undefined reference to `__GSHandlerCheck'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/xwma.o):(.text$mn+0x14): undefined reference to `__security_cookie'
:-1: Fehler: D:\Programme\ffmpeg-source\ffmpeg-5.1.2\vs2019_build\lib/libavformat.a(libavformat/xwma.o):(.text$mn+0x2e0): undefined reference to `__security_check_cookie'
...


    


    Is a library missing ? Am I including the lMfuuid, Strmiids, Mfplat, etc. the wrong way ? If you have any idea I would be very grateful. I'm really confused. I'm using the MinGW64 compiler.