Recherche avancée

Médias (0)

Mot : - Tags -/metadatas

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

Autres articles (43)

  • Configurer la prise en compte des langues

    15 novembre 2010, par

    Accéder à la configuration et ajouter des langues prises en compte
    Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
    De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
    Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...)

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • Les formats acceptés

    28 janvier 2010, par

    Les commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
    ffmpeg -codecs ffmpeg -formats
    Les format videos acceptés en entrée
    Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
    Les formats vidéos de sortie possibles
    Dans un premier temps on (...)

Sur d’autres sites (4634)

  • Capturing RTP Timestamps

    10 septembre 2019, par m00ncake

    I was trying a little experiment in order to get the timestamps of the RTP packets using the VideoCapture class from Opencv’s source code in python, also had to modify FFmpeg to accommodate the changes in Opencv.

    Since I read about the RTP packet format.Wanted to fiddle around and see if I could manage to find a way to get the NTP timestamps. Was unable to find any reliable help in trying to get RTP timestamps. So tried out this little hack.

    Credits to ryantheseer on github for the modified code.

    Version of FFmpeg : 3.2.3
    Version of Opencv : 3.2.0

    In Opencv source code :

    modules/videoio/include/opencv2/videoio.hpp :

    Added two getters for the RTP timestamp :

    .....  
       /** @brief Gets the upper bytes of the RTP time stamp in NTP format (seconds).
       */
       CV_WRAP virtual int64 getRTPTimeStampSeconds() const;

       /** @brief Gets the lower bytes of the RTP time stamp in NTP format (fraction of seconds).
       */
       CV_WRAP virtual int64 getRTPTimeStampFraction() const;
    .....

    modules/videoio/src/cap.cpp :

    Added an import and added the implementation of the timestamp getter :

    ....
    #include <cstdint>
    ....
    ....
    static inline uint64_t icvGetRTPTimeStamp(const CvCapture* capture)
    {
     return capture ? capture->getRTPTimeStamp() : 0;
    }
    ...
    </cstdint>

    Added the C++ timestamp getters in the VideoCapture class :

    ....
    /**@brief Gets the upper bytes of the RTP time stamp in NTP format (seconds).
    */
    int64 VideoCapture::getRTPTimeStampSeconds() const
    {
       int64 seconds = 0;
       uint64_t timestamp = 0;
       //Get the time stamp from the capture object
       if (!icap.empty())
           timestamp = icap->getRTPTimeStamp();
       else
           timestamp = icvGetRTPTimeStamp(cap);
       //Take the top 32 bytes of the time stamp
       seconds = (int64)((timestamp &amp; 0xFFFFFFFF00000000) / 0x100000000);
       return seconds;
    }

    /**@brief Gets the lower bytes of the RTP time stamp in NTP format (seconds).
    */
    int64 VideoCapture::getRTPTimeStampFraction() const
    {
       int64 fraction = 0;
       uint64_t timestamp = 0;
       //Get the time stamp from the capture object
       if (!icap.empty())
           timestamp = icap->getRTPTimeStamp();
       else
           timestamp = icvGetRTPTimeStamp(cap);
       //Take the bottom 32 bytes of the time stamp
       fraction = (int64)((timestamp &amp; 0xFFFFFFFF));
       return fraction;
    }
    ...

    modules/videoio/src/cap_ffmpeg.cpp :

    Added an import :

    ...
    #include <cstdint>
    ...
    </cstdint>

    Added a method reference definition :

    ...
    static CvGetRTPTimeStamp_Plugin icvGetRTPTimeStamp_FFMPEG_p = 0;
    ...

    Added the method to the module initializer method :

    ...
    if( icvFFOpenCV )
    ...
    ...
     icvGetRTPTimeStamp_FFMPEG_p =
                   (CvGetRTPTimeStamp_Plugin)GetProcAddress(icvFFOpenCV, "cvGetRTPTimeStamp_FFMPEG");
    ...
    ...
    icvWriteFrame_FFMPEG_p != 0 &amp;&amp;
    icvGetRTPTimeStamp_FFMPEG_p !=0)
    ...

    icvGetRTPTimeStamp_FFMPEG_p = (CvGetRTPTimeStamp_Plugin)cvGetRTPTimeStamp_FFMPEG;

    Implemented the getter interface :

    ...
    virtual uint64_t getRTPTimeStamp() const
       {
           return ffmpegCapture ? icvGetRTPTimeStamp_FFMPEG_p(ffmpegCapture) : 0;
       }
    ...

    In FFmpeg’s source code :

    libavcodec/avcodec.h :

    Added the NTP timestamp definition to the AVPacket struct :

    typedef struct AVPacket {
    ...
    ...
    uint64_t rtp_ntp_time_stamp;
    }

    libavformat/rtpdec.c :

    Store the ntp time stamp in the struct in the finalize_packet method :

    static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp)
    {
       uint64_t offsetTime = 0;
       uint64_t rtp_ntp_time_stamp = timestamp;
    ...
    ...
    /*RM: Sets the RTP time stamp in the AVPacket */
       if (!s->last_rtcp_ntp_time || !s->last_rtcp_timestamp)
           offsetTime = 0;
       else
           offsetTime = s->last_rtcp_ntp_time - ((uint64_t)(s->last_rtcp_timestamp) * 65536);
       rtp_ntp_time_stamp = ((uint64_t)(timestamp) * 65536) + offsetTime;
       pkt->rtp_ntp_time_stamp = rtp_ntp_time_stamp;

    libavformat/utils.c :

    Copy the ntp time stamp from the packet to the frame in the read_frame_internal method :

    static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
    {
       ...
       uint64_t rtp_ntp_time_stamp = 0;
    ...
       while (!got_packet &amp;&amp; !s->internal->parse_queue) {
             ...
             //COPY OVER the RTP time stamp TODO: just create a local copy
             rtp_ntp_time_stamp = cur_pkt.rtp_ntp_time_stamp;


             ...


     #if FF_API_LAVF_AVCTX
       update_stream_avctx(s);
     #endif

     if (s->debug &amp; FF_FDEBUG_TS)
         av_log(s, AV_LOG_DEBUG,
              "read_frame_internal stream=%d, pts=%s, dts=%s, "
              "size=%d, duration=%"PRId64", flags=%d\n",
              pkt->stream_index,
              av_ts2str(pkt->pts),
              av_ts2str(pkt->dts),
              pkt->size, pkt->duration, pkt->flags);
    pkt->rtp_ntp_time_stamp = rtp_ntp_time_stamp; #Just added this line in the if statement.
    return ret;

    My python code to utilise these changes :

    import cv2

    uri = 'rtsp://admin:password@192.168.1.67:554'
    cap = cv2.VideoCapture(uri)

    while True:
       frame_exists, curr_frame = cap.read()
       # if frame_exists:
       k = cap.getRTPTimeStampSeconds()
       l = cap.getRTPTimeStampFraction()
       time_shift = 0x100000000
       #because in the getRTPTimeStampSeconds()
       #function, seconds was multiplied by 0x10000000
       seconds = time_shift * k
       m = (time_shift * k) + l
       print("Imagetimestamp: %i" % m)
    cap.release()

    What I am getting as my output :

       Imagetimestamp: 0
       Imagetimestamp: 212041451700224
       Imagetimestamp: 212041687629824
       Imagetimestamp: 212041923559424
       Imagetimestamp: 212042159489024
       Imagetimestamp: 212042395418624
       Imagetimestamp: 212042631348224
       ...

    What astounded me the most was that when i powered off the ip camera and powered it back on, timestamp would start from 0 then quickly increments. I read NTP time format is relative to January 1, 1900 00:00. Even when I tried calculating the offset, and accounting between now and 01-01-1900, I still ended up getting a crazy high number for the date.

    Don’t know if I calculated it wrong. I have a feeling it’s very off or what I am getting is not the timestamp.

  • avcodec/ffv1enc : Fix RCT for GBR colorspace

    19 janvier, par Michael Niedermayer
    avcodec/ffv1enc : Fix RCT for GBR colorspace
    

    It performs better when its less buggy

    Compression changes for rgb_scanline_half_piz_dw_t08 (using float16 with remaping) from
    56086 byte to 34371
    (with a single slice its 28122 byte)

    prior remap it was 188186 bytes

    ACES_OT_VWG_SampleFrames/ACES_OT_VWG_SampleFrames improves too but only by a fraction of a percent

    Sponsored-by : Sovereign Tech Fund
    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] libavcodec/ffv1enc.c
  • Anomalie #3150 (Nouveau) : sauvegarde, erreur dans le squelette en php 5.5.5

    17 janvier 2014, par Franck Dalot

    Bonjour
    Je viens de faire un test en php 5.5.5, sous SPIP 3.0.14-dev [21124] chez ovh

    Quand je clique sur le bouton "Sauvegarder la base" pendant une fraction de seconde, un message d’erreur apparait (+ deux "notices", mais bon, ça c’est rien), j’ai juste eu le temps de faire une copie d’écran après plusieurs tentative :-D
    Voir la copie d’écran !
    A savoir que je n’ai pas été plus loin dans mes tests (Restauration de base, etc)

    La sauvegarde semble se faire, il y a juste une autre notice qui apparait, mais rien de bloquant.
    Notice : Undefined index : composition in /.../ecrire/req/sqlite_generique.php on ligne 918

    Cordialement, Franck