Recherche avancée

Médias (2)

Mot : - Tags -/kml

Autres articles (70)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • Amélioration de la version de base

    13 septembre 2013

    Jolie sélection multiple
    Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
    Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)

Sur d’autres sites (12966)

  • Graph-based video processing for .NET

    23 octobre 2016, par Borv

    Does anyone know a good object-oriented library (preferably high-level, like C# or Java) for working with video and audio streams ?

    I wrote an app which fiddles with video and audio streams, feeds and such. The original task was simple :

    • grab an RTSP feed
    • display original feed(s) on the display
    • convert it to a series of h264 ts files
    • extract audio into separate MP3 files
    • upload videos and audio to the web site (preferably in real time, few minute delay is acceptable)

    As you may have already guessed it is about recording events (e.g. lectures) and publishing them on the web.

    To pull this out I needed some graph-based non-linear editing for media. Two weeks in, I tried ffmpeg, vlc and WMF. The only library I got to work is ffmpeg, and that comes with lots of "however". WMF required a lot of coding (and I abandoned this path), vlc looked great on paper, but I stumbled across some bugs with input splitting I could not get around (e.g. transcode:es combination flat out refused to work).

    So, the question. What are good non-linear editing libraries besides ffmpeg, vlc and wmf/directshow that allow for building video processing graphs with sources, sinks and filters ? Or perhaps good bindings over ffmpeg and vlc allowing to build such graphs ?

  • Wave bytes to buffer

    24 août 2016, par Mohammad Abu Musa

    I am encoding wav input from microphone which comes in four bytes format to ogg format. I think I have a problem shifting the bytes to the correct format here is the code I am using

    To explain more I get the audio frames from Google Chrome where I get data as const8 and channels, and samples. data field is always in 4 bytes format.

    I copy the data to a vector of type int16_t then I loop uninterleave samples which I think I am doing wrong. my question is how can I make sure the data is formatted correctly for ogg encoder to handle them correctly ?

    void EncoderInstance::OnGetBuffer(int32_t result, pp::AudioBuffer buffer) {
       if (result != PP_OK)
         return;

       assert(buffer.GetSampleSize() == PP_AUDIOBUFFER_SAMPLESIZE_16_BITS);
       const char* data = static_cast<const>(buffer.GetDataBuffer());
       uint32_t channels = buffer.GetNumberOfChannels();
       uint32_t samples = buffer.GetNumberOfSamples() / channels;

       if (channel_count_ != channels || sample_count_ != samples) {
         channel_count_ = channels;
         sample_count_ = samples;

         samples_.resize(sample_count_ * channel_count_);
         // Try (+ 5) to ensure that we pick up a new set of samples between each
         // timer-generated repaint.
         timer_interval_ = (sample_count_ * 1000) / buffer.GetSampleRate() + 5;
         // Start the timer for the first buffer.
         if (first_buffer_) {
           first_buffer_ = false;
           ScheduleNextTimer();
         }
       }

       if(is_audio_recording &amp;&amp; is_audio_header_written_)
       {
           memcpy(samples_.data(), data,
               sample_count_ * channel_count_ * sizeof(int16_t));

           float **buffer=vorbis_analysis_buffer(&amp;vd,samples);

           /* uninterleave samples */
           for(i=0;i4;i++)
           {
               buffer[0][i]=((samples_.at(i*4+1)&lt;&lt;8)|
                         (0x00ff&amp;(int16_t)samples_.at(i*4)))/32768.f;
               buffer[1][i]=((samples_.at(i*4+3)&lt;&lt;8)|
                         (0x00ff&amp;(int16_t)samples_.at(i*4+2)))/32768.f;
           }

           vorbis_analysis_wrote(&amp;vd,i);

           while(vorbis_analysis_blockout(&amp;vd,&amp;vb)==1){

             /* analysis, assume we want to use bitrate management */
             vorbis_analysis(&amp;vb,NULL);
             vorbis_bitrate_addblock(&amp;vb);

             while(vorbis_bitrate_flushpacket(&amp;vd,&amp;op)){

               /* weld the packet into the bitstream */
               ogg_stream_packetin(&amp;os,&amp;op);

               /* write out pages (if any) */
               while(!eos){
                 int result=ogg_stream_pageout(&amp;os,&amp;og);
                 if(result==0)break;
                 glb_app_thread.message_loop().PostWork(callback_factory_.NewCallback(&amp;EncoderInstance::writeAudioHeader));
                 if(ogg_page_eos(&amp;og))eos=1;
               }
             }
           }


       }




       audio_track_.RecycleBuffer(buffer);
       audio_track_.GetBuffer(callback_factory_.NewCallbackWithOutput(
           &amp;EncoderInstance::OnGetBuffer));

    }
    </const>
  • FFmpeg C++ api decode h264 error

    29 mai 2015, par arms

    I’m trying to use the C++ API of FFMpeg (version 20150526) under Windows using the prebuilt binaries to decode an h264 video file (*.ts).

    I’ve written a very simple code that automatically detects the required codec from the file itself (and it is AV_CODEC_ID_H264, as expected).

    Then I re-open the video file in read-binary mode and I read a fixed-size buffer of bytes from it and provide the read bytes to the decoder within a while-loop until the end of file. However when I call the function avcodec_decode_video2 a large amount of errors happen like the following ones :

    [h264 @ 008df020] top block unavailable for requested intro mode at 34 0

    [h264 @ 008df020] error while decoding MB 34 0, bytestream 3152

    [h264 @ 008df020] decode_slice_header error

    Sometimes the function avcodec_decode_video2 sets the value of got_picture_ptr to 1 and hence I expect to find a good frame. Instead, though all the computations are successful, when I view the decoded frame (using OpenCV only for visualization purposes) I see a gray one with some artifacts.

    If I employ the same code to decode an *.avi file it works fine.

    Reading the examples of FFMpeg I did not find a solution to my problem. I’ve also implemented the solution proposed in the simlar question FFmpeg c++ H264 decoding error but it did not work.

    Does anyone know where the error is ?

    Thank you in advance for any reply !

    The code is the following [EDIT : code updated including the parser management] :

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <sstream>

    #include <opencv2></opencv2>opencv.hpp>

    #ifdef __cplusplus
    extern "C"
    {
    #endif // __cplusplus
    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavdevice></libavdevice>avdevice.h>
    #include <libavfilter></libavfilter>avfilter.h>
    #include <libavformat></libavformat>avformat.h>
    #include <libavformat></libavformat>avio.h>
    #include <libavutil></libavutil>avutil.h>
    #include <libpostproc></libpostproc>postprocess.h>
    #include <libswresample></libswresample>swresample.h>
    #include <libswscale></libswscale>swscale.h>
    #ifdef __cplusplus
    } // end extern "C".
    #endif // __cplusplus

    #define INBUF_SIZE  4096

    void main()
    {
       AVCodec*            l_pCodec;
       AVCodecContext*     l_pAVCodecContext;
       SwsContext*         l_pSWSContext;
       AVFormatContext*    l_pAVFormatContext;
       AVFrame*            l_pAVFrame;
       AVFrame*            l_pAVFrameBGR;
       AVPacket            l_AVPacket;
       AVPacket            l_AVPacket_out;
       AVStream*           l_pStream;
       AVCodecParserContext*   l_pParser;
       FILE*               l_pFile_in;
       FILE*               l_pFile_out;
       std::string         l_sFile;
       int                 l_iResult;
       int                 l_iFrameCount;
       int                 l_iGotFrame;
       int                 l_iBufLength;
       int                 l_iParsedBytes;
       int                 l_iPts;
       int                 l_iDts;
       int                 l_iPos;
       int                 l_iSize;
       int                 l_iDecodedBytes;
       uint8_t             l_auiInBuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
       uint8_t*            l_pData;
       cv::Mat             l_cvmImage;

       l_pCodec = NULL;
       l_pAVCodecContext = NULL;
       l_pSWSContext = NULL;
       l_pAVFormatContext = NULL;
       l_pAVFrame = NULL;
       l_pAVFrameBGR = NULL;
       l_pParser = NULL;
       l_pStream = NULL;
       l_pFile_in = NULL;
       l_pFile_out = NULL;
       l_iPts = 0;
       l_iDts = 0;
       l_iPos = 0;
       l_pData = NULL;

       l_sFile = "myvideo.ts";

       avdevice_register_all();
       avfilter_register_all();
       avcodec_register_all();
       av_register_all();
       avformat_network_init();

       l_pAVFormatContext = avformat_alloc_context();

       l_iResult = avformat_open_input(&amp;l_pAVFormatContext,
                                       l_sFile.c_str(),
                                       NULL,
                                       NULL);

       if (l_iResult >= 0)
       {
           l_iResult = avformat_find_stream_info(l_pAVFormatContext, NULL);

           if (l_iResult >= 0)
           {
               for (int i=0; inb_streams; i++)
               {
                   if (l_pAVFormatContext->streams[i]->codec->codec_type ==
                           AVMEDIA_TYPE_VIDEO)
                   {
                       l_pCodec = avcodec_find_decoder(
                                   l_pAVFormatContext->streams[i]->codec->codec_id);

                       l_pStream = l_pAVFormatContext->streams[i];
                   }
               }
           }
       }

       av_init_packet(&amp;l_AVPacket);
       av_init_packet(&amp;l_AVPacket_out);

       memset(l_auiInBuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);

       if (l_pCodec)
       {
           l_pAVCodecContext = avcodec_alloc_context3(l_pCodec);

           l_pParser = av_parser_init(l_pAVCodecContext->codec_id);

           if (l_pParser)
           {
               av_register_codec_parser(l_pParser->parser);
           }

           if (l_pAVCodecContext)
           {
               if (l_pCodec->capabilities &amp; CODEC_CAP_TRUNCATED)
               {
                   l_pAVCodecContext->flags |= CODEC_FLAG_TRUNCATED;
               }

               l_iResult = avcodec_open2(l_pAVCodecContext, l_pCodec, NULL);

               if (l_iResult >= 0)
               {
                   l_pFile_in = fopen(l_sFile.c_str(), "rb");

                   if (l_pFile_in)
                   {
                       l_pAVFrame = av_frame_alloc();
                       l_pAVFrameBGR = av_frame_alloc();

                       if (l_pAVFrame)
                       {
                           l_iFrameCount = 0;

                           avcodec_get_frame_defaults(l_pAVFrame);

                           while (1)
                           {
                               l_iBufLength = fread(l_auiInBuf,
                                                    1,
                                                    INBUF_SIZE,
                                                    l_pFile_in);

                               if (l_iBufLength == 0)
                               {
                                   break;
                               }
                               else
                               {
                                   l_pData = l_auiInBuf;
                                   l_iSize = l_iBufLength;

                                   while (l_iSize > 0)
                                   {
                                       if (l_pParser)
                                       {
                                           l_iParsedBytes = av_parser_parse2(
                                                       l_pParser,
                                                       l_pAVCodecContext,
                                                       &amp;l_AVPacket_out.data,
                                                       &amp;l_AVPacket_out.size,
                                                       l_pData,
                                                       l_iSize,
                                                       l_AVPacket.pts,
                                                       l_AVPacket.dts,
                                                       AV_NOPTS_VALUE);

                                           if (l_iParsedBytes &lt;= 0)
                                           {
                                               break;
                                           }

                                           l_AVPacket.pts = l_AVPacket.dts = AV_NOPTS_VALUE;
                                           l_AVPacket.pos = -1;
                                       }
                                       else
                                       {
                                           l_AVPacket_out.data = l_pData;
                                           l_AVPacket_out.size = l_iSize;
                                       }

                                       l_iDecodedBytes =
                                               avcodec_decode_video2(
                                                   l_pAVCodecContext,
                                                   l_pAVFrame,
                                                   &amp;l_iGotFrame,
                                                   &amp;l_AVPacket_out);

                                       if (l_iDecodedBytes >= 0)
                                       {
                                           if (l_iGotFrame)
                                           {
                                               l_pSWSContext = sws_getContext(
                                                           l_pAVCodecContext->width,
                                                           l_pAVCodecContext->height,
                                                           l_pAVCodecContext->pix_fmt,
                                                           l_pAVCodecContext->width,
                                                           l_pAVCodecContext->height,
                                                           AV_PIX_FMT_BGR24,
                                                           SWS_BICUBIC,
                                                           NULL,
                                                           NULL,
                                                           NULL);

                                               if (l_pSWSContext)
                                               {
                                                   l_iResult = avpicture_alloc(
                                                               reinterpret_cast(l_pAVFrameBGR),
                                                               AV_PIX_FMT_BGR24,
                                                               l_pAVFrame->width,
                                                               l_pAVFrame->height);

                                                   l_iResult = sws_scale(
                                                               l_pSWSContext,
                                                               l_pAVFrame->data,
                                                               l_pAVFrame->linesize,
                                                               0,
                                                               l_pAVCodecContext->height,
                                                               l_pAVFrameBGR->data,
                                                               l_pAVFrameBGR->linesize);

                                                   if (l_iResult > 0)
                                                   {
                                                       l_cvmImage = cv::Mat(
                                                                   l_pAVFrame->height,
                                                                   l_pAVFrame->width,
                                                                   CV_8UC3,
                                                                   l_pAVFrameBGR->data[0],
                                                               l_pAVFrameBGR->linesize[0]);

                                                       if (l_cvmImage.empty() == false)
                                                       {
                                                           cv::imshow("image", l_cvmImage);
                                                           cv::waitKey(10);
                                                       }
                                                   }
                                               }

                                               l_iFrameCount++;
                                           }
                                       }
                                       else
                                       {
                                           break;
                                       }

                                       l_pData += l_iParsedBytes;
                                       l_iSize -= l_iParsedBytes;
                                   }
                               }

                           } // end while(1).
                       }

                       fclose(l_pFile_in);
                   }
               }
           }
       }
    }
    </sstream></string></iomanip></iostream>

    EDIT : The following is the final code that solves my problem, thanks to the suggestions of Ronald.

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <sstream>

    #include <opencv2></opencv2>opencv.hpp>

    #ifdef __cplusplus
    extern "C"
    {
    #endif // __cplusplus
    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavdevice></libavdevice>avdevice.h>
    #include <libavfilter></libavfilter>avfilter.h>
    #include <libavformat></libavformat>avformat.h>
    #include <libavformat></libavformat>avio.h>
    #include <libavutil></libavutil>avutil.h>
    #include <libpostproc></libpostproc>postprocess.h>
    #include <libswresample></libswresample>swresample.h>
    #include <libswscale></libswscale>swscale.h>
    #ifdef __cplusplus
    } // end extern "C".
    #endif // __cplusplus

    void main()
    {
       AVCodec*            l_pCodec;
       AVCodecContext*     l_pAVCodecContext;
       SwsContext*         l_pSWSContext;
       AVFormatContext*    l_pAVFormatContext;
       AVFrame*            l_pAVFrame;
       AVFrame*            l_pAVFrameBGR;
       AVPacket            l_AVPacket;
       std::string         l_sFile;
       uint8_t*            l_puiBuffer;
       int                 l_iResult;
       int                 l_iFrameCount;
       int                 l_iGotFrame;
       int                 l_iDecodedBytes;
       int                 l_iVideoStreamIdx;
       int                 l_iNumBytes;
       cv::Mat             l_cvmImage;

       l_pCodec = NULL;
       l_pAVCodecContext = NULL;
       l_pSWSContext = NULL;
       l_pAVFormatContext = NULL;
       l_pAVFrame = NULL;
       l_pAVFrameBGR = NULL;
       l_puiBuffer = NULL;

       l_sFile = "myvideo.ts";

       av_register_all();

       l_iResult = avformat_open_input(&amp;l_pAVFormatContext,
                                       l_sFile.c_str(),
                                       NULL,
                                       NULL);

       if (l_iResult >= 0)
       {
           l_iResult = avformat_find_stream_info(l_pAVFormatContext, NULL);

           if (l_iResult >= 0)
           {
               for (int i=0; inb_streams; i++)
               {
                   if (l_pAVFormatContext->streams[i]->codec->codec_type ==
                           AVMEDIA_TYPE_VIDEO)
                   {
                       l_iVideoStreamIdx = i;

                       l_pAVCodecContext =
                               l_pAVFormatContext->streams[l_iVideoStreamIdx]->codec;

                       if (l_pAVCodecContext)
                       {
                           l_pCodec = avcodec_find_decoder(l_pAVCodecContext->codec_id);
                       }

                       break;
                   }
               }
           }
       }

       if (l_pCodec &amp;&amp; l_pAVCodecContext)
       {
           l_iResult = avcodec_open2(l_pAVCodecContext, l_pCodec, NULL);

           if (l_iResult >= 0)
           {
               l_pAVFrame = av_frame_alloc();
               l_pAVFrameBGR = av_frame_alloc();

               l_iNumBytes = avpicture_get_size(PIX_FMT_BGR24,
                                                l_pAVCodecContext->width,
                                                l_pAVCodecContext->height);

               l_puiBuffer = (uint8_t *)av_malloc(l_iNumBytes*sizeof(uint8_t));

               avpicture_fill((AVPicture *)l_pAVFrameBGR,
                              l_puiBuffer,
                              PIX_FMT_RGB24,
                              l_pAVCodecContext->width,
                              l_pAVCodecContext->height);

               l_pSWSContext = sws_getContext(
                           l_pAVCodecContext->width,
                           l_pAVCodecContext->height,
                           l_pAVCodecContext->pix_fmt,
                           l_pAVCodecContext->width,
                           l_pAVCodecContext->height,
                           AV_PIX_FMT_BGR24,
                           SWS_BICUBIC,
                           NULL,
                           NULL,
                           NULL);

               while (av_read_frame(l_pAVFormatContext, &amp;l_AVPacket) >= 0)
               {
                   if (l_AVPacket.stream_index == l_iVideoStreamIdx)
                   {
                       l_iDecodedBytes = avcodec_decode_video2(
                                   l_pAVCodecContext,
                                   l_pAVFrame,
                                   &amp;l_iGotFrame,
                                   &amp;l_AVPacket);

                       if (l_iGotFrame)
                       {
                           if (l_pSWSContext)
                           {
                               l_iResult = sws_scale(
                                           l_pSWSContext,
                                           l_pAVFrame->data,
                                           l_pAVFrame->linesize,
                                           0,
                                           l_pAVCodecContext->height,
                                           l_pAVFrameBGR->data,
                                           l_pAVFrameBGR->linesize);

                               if (l_iResult > 0)
                               {
                                   l_cvmImage = cv::Mat(
                                               l_pAVFrame->height,
                                               l_pAVFrame->width,
                                               CV_8UC3,
                                               l_pAVFrameBGR->data[0],
                                           l_pAVFrameBGR->linesize[0]);

                                   if (l_cvmImage.empty() == false)
                                   {
                                       cv::imshow("image", l_cvmImage);
                                       cv::waitKey(1);
                                   }
                               }
                           }

                           l_iFrameCount++;
                       }
                   }
               }
           }
       }
    }
    </sstream></string></iomanip></iostream>