Recherche avancée

Médias (0)

Mot : - Tags -/serveur

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (46)

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

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

  • De l’upload à la vidéo finale [version standalone]

    31 janvier 2010, par

    Le chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
    Upload et récupération d’informations de la vidéo source
    Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
    Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)

Sur d’autres sites (8376)

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

    


  • converting video with avconv while capturing

    31 mai 2017, par Oliver

    I am successfully capturing a video stream with that device :
    Easycap DC60

    But I need to run the following commands in serial :

    First that :

    sudo killall -9 somagic-both

    sudo killall -9 somagic-capture

    sudo somagic-init

    sudo somagic-both -n 1>.video 2>.audio

    [CTRL+C]

    Then that :

    avconv

    -f rawvideo -pix_fmt uyvy422 -r 30 -s:v 720x480 -i .video

    -f s16le -sample_rate 24000 -ac 2 -i .audio -strict experimental

    -vcodec mpeg4 -vtag xvid -qscale:v 7

    -vf yadif -s:v 720x540

    video.avi

    The problem is that when I try to run them together in a row (with "&" at the end of "sudo somagic-both -n 1>.video 2>.audio") I get that error :

    ffmpeg version 2.8.11-0ubuntu0.16.04.1 Copyright (c) 2000-2017 the FFmpeg developers
     built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
     configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
     libavutil      54. 31.100 / 54. 31.100
     libavcodec     56. 60.100 / 56. 60.100
     libavformat    56. 40.101 / 56. 40.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 40.101 /  5. 40.101
     libavresample   2.  1.  0 /  2.  1.  0
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  2.101 /  1.  2.101
     libpostproc    53.  3.100 / 53.  3.100
    Input #0, rawvideo, from '.video':
     Duration: N/A, bitrate: 165888 kb/s
       Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 720x480, 165888 kb/s, 30 tbr, 30 tbn, 30 tbc
    [s16le @ 0x24d7480] Estimating duration from bitrate, this may be inaccurate
    Guessed Channel Layout for  Input Stream #1.0 : stereo
    Input #1, s16le, from '.audio':
     Duration: 00:00:00.71, bitrate: 767 kb/s
       Stream #1:0: Audio: pcm_s16le, 24000 Hz, 2 channels, s16, 768 kb/s
    File 'video.avi' already exists. Overwrite ? [y/N] y
    Output #0, avi, to 'video.avi':
     Metadata:
       ISFT            : Lavf56.40.101
       Stream #0:0: Video: mpeg4 (xvid / 0x64697678), yuv420p, 720x540, q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc
       Metadata:
         encoder         : Lavc56.60.100 mpeg4
       Stream #0:1: Audio: mp3 (libmp3lame) (U[0][0][0] / 0x0055), 24000 Hz, stereo, s16p
       Metadata:
         encoder         : Lavc56.60.100 libmp3lame
    Stream mapping:
     Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg4 (native))
     Stream #1:0 -> #0:1 (pcm_s16le (native) -> mp3 (libmp3lame))
    Press [q] to stop, [?] for help
    Multiple frames in a packet from stream 0
    [pcm_s16le @ 0x24f33c0] Invalid PCM packet, data has size 2 but at least a size of 4 was expected
    Error while decoding stream #1:0: Invalid data found when processing input
    frame=    0 fps=0.0 q=0.0 Lsize=      38kB time=00:00:03.19 bitrate=  98.0kbits/s    
    video:0kB audio:25kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 50.802467%

    I think it happens because it is converting more quickly than it is capturing. I tried to use the solution given here
    without success.

    Anyone ever faced that situation before ?

  • FFmpeg -ss parameter is the video duration, Output file is empty

    16 avril 2024, par noun nil

    The main function is to obtain the corresponding video frame based on the input seconds.Before processing, the duration of the video will be obtained to determine whether the input is within the duration range of the video. If so, the corresponding instruction will be executed.

    


    > ffprobe input.mp4
  ...
  Duration: 00:00:28.05, start: 0.000000, bitrate: 1136 kb/s


    


    > ffmpeg -ss 00:00:28 -i input.mp4 -frames:v 1 output.png
 ffmpeg version 7.0 Copyright (c) 2000-2024 the FFmpeg developers
  built with Apple clang version 15.0.0 (clang-1500.3.9.4)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/7.0 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenvino --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
    description     : Packed by Bilibili XCoder v2.0.2
  Duration: 00:00:28.05, start: 0.000000, bitrate: 1136 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280 [SAR 1:1 DAR 9:16], 1005 kb/s, 25.27 fps, 25.25 tbr, 16k tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
      Metadata:
        handler_name    : SoundHandler
        vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
[swscaler @ 0x1187a0000] [swscaler @ 0x110e48000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110e58000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110e68000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110e78000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110e88000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110e98000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110ea8000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110eb8000] No accelerated colorspace conversion found from yuv420p to rgb24.
[swscaler @ 0x1187a0000] [swscaler @ 0x110ec8000] No accelerated colorspace conversion found from yuv420p to rgb24.
[vost#0:0/png @ 0x12ce06840] No filtered frames for output stream, trying to initialize anyway.
Output #0, image2, to 'output.png':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    description     : Packed by Bilibili XCoder v2.0.2
    encoder         : Lavf61.1.100
  Stream #0:0(und): Video: png, rgb24(progressive), 720x1280 [SAR 1:1 DAR 9:16], q=2-31, 200 kb/s, 25.25 fps, 16k tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
        encoder         : Lavc61.3.100 png
[out#0/image2 @ 0x600000e983c0] video:0KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
[out#0/image2 @ 0x600000e983c0] Output file is empty, nothing was encoded(check -ss / -t / -frames parameters if used)
frame=    0 fps=0.0 q=0.0 Lsize=N/A time=N/A bitrate=N/A speed=N/A    



    


    -ss 00:00:28 within the video duration range, but still cannot obtain frames...

    


    -ss 00:00:27 Can obtain video frames