Recherche avancée

Médias (0)

Mot : - Tags -/protocoles

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

Autres articles (83)

  • Les vidéos

    21 avril 2011, par

    Comme les documents de type "audio", Mediaspip affiche dans la mesure du possible les vidéos grâce à la balise html5 .
    Un des inconvénients de cette balise est qu’elle n’est pas reconnue correctement par certains navigateurs (Internet Explorer pour ne pas le nommer) et que chaque navigateur ne gère en natif que certains formats de vidéos.
    Son avantage principal quant à lui est de bénéficier de la prise en charge native de vidéos dans les navigateur et donc de se passer de l’utilisation de Flash et (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

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

Sur d’autres sites (8671)

  • Download RTSP recording content between two dates and times, or from start seconds to end seconds

    23 septembre 2022, par holt2

    I need to download from an RTSP link the content recorded on an IP camera from a start and end date and time. It would also be valid to be able to download it from X seconds of start of the recording to seconds of end.

    


    With this ffmpeg command I download the recording content from the RTSP link only from the beginning of the recording content, with the duration in seconds passed by the -t parameter :

    


    ffmpeg -rtsp_transport tcp -i  -r 30 -t <seconds> -y -vf scale=800:-1 -c:v libx264 -crf 20 -preset fast -c:a aac -strict experimental -b:a 192k -ac 2 /path/to/video/filename.mp4&#xA;</seconds>

    &#xA;

    I tried to download with ffmpeg the content using temporary media fragment URIs (https://www.w3.org/2008/WebVideo/Fragments/wiki/UA_Server_RTSP_Communication#.281.29_Temporal_Media_Fragment_URIs) but it doesn't do it correctly :

    &#xA;

    ffmpeg -rtsp_transport tcp -i #t=10,20 -r 30 -y -vf scale=800:-1 -c:v libx264 -crf 20 -preset fast -c:a aac -strict experimental -b:a 192k -ac 2 -ss 19:09:13 -t 5 /path/to/video/filename.mp4&#xA;

    &#xA;

    I have also tried with ffmpeg to use the -ss parameter to try to extract the recording from a specific hour, minute and second (https://trac.ffmpeg.org/wiki/Seeking) but when running it gets stuck, it does not advance :

    &#xA;

    ffmpeg -rtsp_transport tcp -i  -r 30 -y -vf scale=800:-1 -c:v libx264 -crf 20 -preset fast -c:a aac -strict experimental -b:a 192k -ac 2 -ss 19:09:13 -t <seconds> /path/to/video/filename.mp4&#xA;</seconds>

    &#xA;

    In case it's helpful, to get the RTSP link, I'm using the ONVIF protocol with a NodeJS library (https://github.com/agsh/onvif). I have also reviewed the ONVIF documentation available but have not found a way to download recorded content between start and end dates and times.

    &#xA;

    Do you know how to download from an RTSP link the content recorded on an IP camera from a start date and time and end date, or download it from X seconds of recording start to seconds of end ?

    &#xA;

    I am also open to use other tools or commands that can do this.

    &#xA;

  • FFmpeg uses all memory and crashes when inputs used multiple times in filter_complex

    28 octobre 2020, par ed22

    If I define some dummy filter_complex say :

    &#xA;

    [3:v]split=2[3_1][3_2]&#xA;[3_1]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[1]&#xA;[3_2]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[2]&#xA;[4:v]split=2[4_1][4_2]&#xA;[4_1]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[3]&#xA;[4_2]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[4]&#xA;[1][2][3][4]concat=n=4:v=1:a=0[video_out]&#xA;

    &#xA;

    FFmpeg uses all the memory and crashes. What might be the reason ?&#xA;The same happens for :

    &#xA;

    [3:v]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[1]&#xA;[3:v]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[2]&#xA;[4:v]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[3]&#xA;[4:v]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[4]&#xA;[1][2][3][4]concat=n=4:v=1:a=0[video_out]&#xA;

    &#xA;

    I know the examples are silly but I am here asking about why this uses all my RAM ? (and how to work around this)

    &#xA;

    This works great by the way (inputs used once) :

    &#xA;

    [3:v]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[1]&#xA;[4:v]format=yuv420p,scale=&#x27;640:360&#x27;,setsar=&#x27;1/1&#x27;[2]&#xA;[1][2]concat=n=2:v=1:a=0[video_out]&#xA;

    &#xA;

    UPDATE :&#xA;The full log. While it runs it reaches 2GB memory usage in about 5s and continues to grow.

    &#xA;

    ffmpeg.exe -y -f lavfi -i nullsrc=s=640x360 -i 1000211803.mp4 -i 220710.mp4 -i 223157.mp4 -i 232365.mp4 -i 1000000046.mp4 -i 1000238585.mp4 -filter_complex_script "c:\Users\wojtek\Desktop\Development\video_grid_ffmpeg_nodejs\filter_complex_param.txt" -vsync 2 -map "[video_out]" out.mp4&#xA;ffmpeg version n4.3.1-20-g8a2acdc6da Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 9.3-win32 (GCC) 20200320&#xA;  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-opencl --enable-libvmaf --disable-vulkan --enable-libvorbis --enable-amf --enable-libaom --disable-avisynth --enable-libdav1d --disable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --disable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libtwolame --disable-libvidstab --disable-libx264 --disable-libx265 --disable-libxavs2 --disable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp&#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;  libswscale      5.  7.100 /  5.  7.100&#xA;  libswresample   3.  7.100 /  3.  7.100&#xA;Input #0, lavfi, from &#x27;nullsrc=s=640x360&#x27;:&#xA;  Duration: N/A, start: 0.000000, bitrate: N/A&#xA;    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc&#xA;Input #1, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;1000211803.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : isom&#xA;    minor_version   : 512&#xA;    compatible_brands: isomiso2avc1mp41&#xA;    encoder         : Lavf58.33.100&#xA;  Duration: 00:55:35.33, start: 0.000000, bitrate: 136 kb/s&#xA;    Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 376x210 [SAR 1:1 DAR 188:105], 134 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;Input #2, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;220710.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : isom&#xA;    minor_version   : 512&#xA;    compatible_brands: isomiso2avc1mp41&#xA;    encoder         : Lavf58.33.100&#xA;  Duration: 00:57:21.43, start: 0.000000, bitrate: 102 kb/s&#xA;    Stream #2:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 376x210 [SAR 1:1 DAR 188:105], 99 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;Input #3, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;223157.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : isom&#xA;    minor_version   : 512&#xA;    compatible_brands: isomiso2avc1mp41&#xA;    encoder         : Lavf58.33.100&#xA;  Duration: 01:01:11.27, start: 0.000000, bitrate: 156 kb/s&#xA;    Stream #3:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 376x210 [SAR 1:1 DAR 188:105], 153 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;Input #4, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;232365.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : isom&#xA;    minor_version   : 512&#xA;    compatible_brands: isomiso2avc1mp41&#xA;    encoder         : Lavf58.33.100&#xA;  Duration: 01:01:07.20, start: 0.000000, bitrate: 127 kb/s&#xA;    Stream #4:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 376x210 [SAR 1:1 DAR 188:105], 124 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;Input #5, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;1000000046.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : isom&#xA;    minor_version   : 512&#xA;    compatible_brands: isomiso2avc1mp41&#xA;    encoder         : Lavf58.33.100&#xA;  Duration: 00:52:17.23, start: 0.000000, bitrate: 190 kb/s&#xA;    Stream #5:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 376x210 [SAR 1:1 DAR 188:105], 188 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;Input #6, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;1000238585.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : isom&#xA;    minor_version   : 512&#xA;    compatible_brands: isomiso2avc1mp41&#xA;    encoder         : Lavf58.33.100&#xA;  Duration: 00:50:58.77, start: 0.000000, bitrate: 106 kb/s&#xA;    Stream #6:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 376x210 [SAR 1:1 DAR 188:105], 103 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;Stream mapping:&#xA;  Stream #3:0 (h264) -> format&#xA;  Stream #3:0 (h264) -> format&#xA;  Stream #4:0 (h264) -> format&#xA;  Stream #4:0 (h264) -> format&#xA;  concat -> Stream #0:0 (mpeg4)&#xA;Press [q] to stop, [?] for help&#xA;Output #0, mp4, to &#x27;out.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.45.100&#xA;    Stream #0:0: Video: mpeg4 (mp4v / 0x7634706D), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 30 fps, 15360 tbn, 30 tbc (default)&#xA;    Metadata:&#xA;      encoder         : Lavc58.91.100 mpeg4&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A&#xA;frame= 6130 fps=610 q=20.6 Lsize=    5334kB time=00:03:24.30 bitrate= 213.9kbits/s speed=20.3x&#xA;video:5307kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.507003%&#xA;

    &#xA;

    The above has been produced using this filter_complex parameter value :

    &#xA;

    [3:v]format=yuv420p,scale=&#x27;-1:360&#x27;,crop=&#x27;640:in_h&#x27;,setsar=&#x27;1/1&#x27;[i2_640_360]&#xA;[3:v]format=yuv420p,scale=&#x27;-1:360&#x27;,crop=&#x27;640:in_h&#x27;,setsar=&#x27;1/1&#x27;[i2_320_360]&#xA;[4:v]format=yuv420p,scale=&#x27;-1:360&#x27;,crop=&#x27;640:in_h&#x27;,setsar=&#x27;1/1&#x27;[i3_320_360]&#xA;[4:v]format=yuv420p,scale=&#x27;-1:360&#x27;,crop=&#x27;640:in_h&#x27;,setsar=&#x27;1/1&#x27;[i3_640_360]&#xA;[i2_640_360][i2_320_360][i3_320_360][i3_640_360]concat=n=4:v=1:a=0[video_out]&#xA;

    &#xA;

    I did not wait for it to give the out of memory error.

    &#xA;

  • libavformat : calling avformat_open_input 2 times results in decoding white frames

    25 avril 2017, par explodus
    • pre build ffmpeg libs format/util/scale
    • version 57.56.101
    • don’t use any deprecated function
    • use the actual style
      • av_read_frame -> avcodec_send_packet -> avcodec_receive_frame -> sws_scale

    Everything is fine on the first run, but when i wanna load/open another file i only get white frames.

    void video::app::flush_cached_frames() {
       if (nullptr == avcontext)
           return;
       if (nullptr == avpicture)
           return;

       // send an empty packet which instructs the codec to start flushing
       AVPacket pkt;
       av_init_packet(&amp;pkt);
       pkt.data = NULL;
       pkt.size = 0;
       avcodec_send_packet(avcontext, &amp;pkt);

       // drain the codec
       while (true) {
           int r = avcodec_receive_frame(avcontext, avpicture);
           if (r != 0)
               break;
       }
    }

    void video::app::close_avi() {
       flush_cached_frames();

       if (avformat &amp;&amp; avstream)
           seek_to_frame(0);
       avstream = nullptr;

       if (avfile)
           fclose(avfile);
       avfile = nullptr;

       if (avcontext)
           avcodec_close(avcontext);
       avcontext = nullptr;

       if (avformat)
           avformat_free_context(avformat);
       avformat = nullptr;

       if (sws_ctx)
           sws_freeContext(sws_ctx);
       sws_ctx = nullptr;

       if (avparser)
           av_parser_close(avparser);
       avparser = nullptr;

       if (avinbuf)
           av_free(avinbuf);
       avinbuf = nullptr;
    }

    I think i close anything perfectly. Has anyone an idea ?

    edit1 : init/load

    unsigned video::app::load(const std::string&amp; name) {
       _file = name_;

       close_avi();

       av_register_all();
       avcodec_register_all();

       av_init_packet(&amp;avpkt);

       AVCodecID codec_id = AV_CODEC_ID_H264;
       int64_t duration = 0;
       double fps = .0;
       int ret = 0;
       {
           av_log_set_level(1);

           avfile = fopen(name_.c_str(), "rb");

           avformat = avformat_alloc_context();
           ret = avformat_open_input(&amp;avformat, name_.c_str(), nullptr, nullptr);
           ret = avformat_find_stream_info(avformat, nullptr);
           duration = avformat->duration;

           avstream = nullptr;
           if (avformat->nb_streams == 1) {
               avstream = avformat->streams[0];
           } else {
               avstream = avformat->streams[av_find_default_stream_index(avformat)];
           }

           if (avstream) {
               fps = (double(avstream->avg_frame_rate.num) / double(avstream->avg_frame_rate.den));
               codec_id = avstream->codecpar->codec_id;
               duration = avstream->duration;

               _vid.v_width = avstream->codecpar->width;
               _vid.v_height = avstream->codecpar->height;

               _vid.lastframe = duration / fps;
               _vid.lastframe = avstream->nb_frames;
           }

           avcodec = avcodec_find_decoder(avstream->codecpar->codec_id);
           avparser = av_parser_init(avcodec->id);
           avcontext = avcodec_alloc_context3(avcodec);

           avcontext->flags |= AVFMT_FLAG_NONBLOCK;
           avcontext->flags |= AVFMT_FLAG_FLUSH_PACKETS;
           avcontext->flags |= AVFMT_FLAG_DISCARD_CORRUPT;
           avcontext->flags |= AVFMT_FLAG_NOBUFFER;

           ret = avcodec_parameters_to_context(avcontext, avstream->codecpar);
           ret = avcodec_open2(avcontext, avcodec, nullptr);


           // Determine required buffer size and allocate buffer
           auto numBytes = av_image_get_buffer_size(
                 AV_PIX_FMT_BGRA
               , avcontext->width
               , avcontext->height
               , 1);
           if (avinbuf)
               av_free(avinbuf);
           avinbuf = nullptr;
           avinbuf = (uint8_t *)av_malloc(numBytes * sizeof(uint8_t));
           ret = av_image_fill_arrays(
                 avrgb->data
               , avrgb->linesize
               , avinbuf
               , AV_PIX_FMT_BGRA
               , avcontext->width
               , avcontext->height
               , 1);

           sws_ctx = sws_getContext(
                   avcontext->width
               , avcontext->height
               , avcontext->pix_fmt
               , avcontext->width
               , avcontext->height
               , AV_PIX_FMT_BGRA
               , SWS_BILINEAR
               , nullptr
               , nullptr
               , nullptr
           );
       }

       int err = (sws_ctx &amp;&amp; avcontext &amp;&amp; avformat) ? 0 : 1;
       // ...
    }

    getting the frame :

    uint8_t * video::app::get_frame(uint32_t frame) {
       if (!avcontext)
           return nullptr;
       if (!avformat)
           return nullptr;
       if (!avpicture)
           return nullptr;
       if (!avfile)
           return nullptr;

       try {
           int ret = 0;

           if (avpicture->data)
               av_frame_unref(avpicture);

           while (true) {
               if ((ret = av_read_frame(avformat, &amp;avpkt)) &lt; 0)
                   break;

               if (avpkt.stream_index == avstream->index) {
                   ret = avcodec_send_packet(avcontext, &amp;avpkt);
                   if (ret &lt; 0)
                       break;

                   while (ret >= 0) {
                       ret = avcodec_receive_frame(avcontext, avpicture);
                       if (ret == AVERROR_EOF) {
                           return nullptr;
                       } else if (ret == -11) {
                           avpkt.data = nullptr;
                           avpkt.size = 0;
                           break;
                       } else if (ret &lt; 0) {
                           return nullptr;
                       }

                       if (ret == AVERROR(EAGAIN)) {
                           avpkt.data = nullptr;
                           avpkt.size = 0;
                           break;
                       }

                       if (ret >= 0) {
                           int linesize[AV_NUM_DATA_POINTERS] = {
                                 avpicture->linesize[0]
                               , avpicture->linesize[1]
                               , avpicture->linesize[2]
                               , avpicture->linesize[3]
                               , avpicture->linesize[4]
                               , avpicture->linesize[5]
                               , avpicture->linesize[6]
                               , avpicture->linesize[7]
                           };
                           uint8_t * data[AV_NUM_DATA_POINTERS] = {
                                 avpicture->data[0]
                               , avpicture->data[1]
                               , avpicture->data[2]
                               , avpicture->data[3]
                               , avpicture->data[4]
                               , avpicture->data[5]
                               , avpicture->data[6]
                               , avpicture->data[7]
                           };

                           {
                               // flip the frame, never ever touch this thing again!
                               // If the planes in the image are unequal size(e.g.YUV420) you need to adapt the height.
                               auto h = avcontext->height;
                               for (int i = 0; i &lt; 4; i++) {
                                   if (i)
                                       data[i] += linesize[i] * ((h >> 1) - 1);
                                   else
                                       data[i] += linesize[i] * (h - 1);
                                   linesize[i] = -linesize[i];
                               }
                           }

                           ret = sws_scale(
                                 sws_ctx
                               , (uint8_t const * const *)data
                               , linesize
                               , 0
                               , avcontext->height
                               , avrgb->data
                               , avrgb->linesize);

                           av_packet_unref(&amp;avpkt);

                           currPts = avpkt.dts;
                           currPts *= av_q2d(avstream->time_base);

                           usleep(1000000 * (currPts - prevPts));
                           prevPts = currPts;

                           return avrgb->data[0];
                       }
                   }
               }
               av_packet_unref(&amp;avpkt);
           }

       } catch (...) {
       }

       return nullptr;
    }