Recherche avancée

Médias (91)

Autres articles (64)

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

Sur d’autres sites (10724)

  • avformat/http: escape unsafe URL path in HTTP request

    8 février 2020, par Marton Balint
    avformat/http: escape unsafe URL path in HTTP request
    

    This avoids generating invalid HTTP requests if the path contains space or
    other special characters.

    Signed-off-by : Marton Balint <cus@passwd.hu>

    • [DH] libavformat/http.c
  • How do you properly free a BitStreamFilter (bsf) without getting a double free error ?

    19 janvier 2021, par Alexis Wilke

    I'm trying to write a C++ class handling MP4 movies via ffmpeg.

    &#xA;

    First I created a couple of functions to use with std::unique&lt;>() so that way things get released even on exceptions.

    &#xA;

    However, I get a double free when I try to free the BitStreamFilter object, yet the documentation clearly says that each av_bsf_alloc() must be paired with an av_bsf_free() call.

    &#xA;

    &#xA;

    @param ctx a pointer into which the pointer to the newly-allocated context&#xA;will be written. It must be freed with av_bsf_free() after the&#xA;filtering is done.

    &#xA;

    &#xA;

    Note : emphasis mine.

    &#xA;

    However, at the time I call the avformat_close_input() I get a double free error, even if I haven't used the two contexts for anything !? I'm thinking that there may be a packet that both allocate and both try to free. But since these two contexts are not directly connected, I really don't understand how they end up freeing something twice.

    &#xA;

    Below is code which reproduce the error (at least on an amd64 platform). Once compiled, you can just execute it. Make sure to specify a filename as in :

    &#xA;

    ./ffmpeg_demuxer_test mymovie.mp4&#xA;

    &#xA;

    I used the following command to compile & link the code :

    &#xA;

    $ /usr/bin/c&#x2B;&#x2B; -std=c&#x2B;&#x2B;17 -DDEBUG -D_DEBUG -D_GLIBCXX_ASSERTIONS -g -O0 \&#xA;    -fsanitize=address -fsanitize=enum -fsanitize=unreachable \&#xA;    -o ffmpeg_demuxer_test ffmpeg_demuxer_test.cpp \&#xA;    -lavformat -lavcodec&#xA;

    &#xA;

    Notice the -fsanitize=... options to capture errors such as a double free error.

    &#xA;

    Here is the code :

    &#xA;

    extern "C" {&#xA;#include    <libavformat></libavformat>avformat.h>&#xA;#include    <libavformat></libavformat>avio.h>&#xA;#include    <libavcodec></libavcodec>avcodec.h>&#xA;}&#xA;#include    <iostream>&#xA;#include    <memory>&#xA;&#xA;&#xA;void ffmpeg_demuxer_avformat_context_free(AVFormatContext * context)&#xA;{&#xA;    if(context != nullptr) avformat_close_input(&amp;context);&#xA;}&#xA;&#xA;void ffmpeg_demuxer_av_bsf_free(AVBSFContext * context)&#xA;{&#xA;    if(context != nullptr) av_bsf_free(&amp;context);&#xA;}&#xA;&#xA;&#xA;int main(int argc, char * argv [])&#xA;{&#xA;    if(argc != 2)&#xA;    {&#xA;        std::cout &lt;&lt; "Usage: " &lt;&lt; argv[0] &lt;&lt; " movie.mp4" &lt;&lt; std::endl;&#xA;        exit(1);&#xA;    }&#xA;&#xA;    // init the AV libraries&#xA;    //&#xA;    av_register_all();&#xA;    avformat_network_init();&#xA;&#xA;    // allocate the AVFormatContext&#xA;    //&#xA;    AVFormatContext * format_context(nullptr);&#xA;    int const r1(avformat_open_input(&#xA;                  &amp;format_context&#xA;                , argv[1]&#xA;                , nullptr           // input format&#xA;                , nullptr));        // options&#xA;    if(r1 != 0&#xA;    || format_context == nullptr)&#xA;    {&#xA;        throw std::bad_alloc();&#xA;    }&#xA;&#xA;    auto f_format_context = std::unique_ptr&lt;&#xA;              AVFormatContext&#xA;            , decltype(&amp;ffmpeg_demuxer_avformat_context_free)>(&#xA;                      format_context&#xA;                    , &amp;ffmpeg_demuxer_avformat_context_free);&#xA;&#xA;&#xA;    // now allocate a stream&#xA;    //&#xA;    if(avformat_find_stream_info(f_format_context.get(), nullptr) &lt; 0)&#xA;    {&#xA;        throw std::runtime_error("ffmpeg: Could not find stream info");&#xA;    }&#xA;&#xA;    auto f_video_stream_index = av_find_best_stream(&#xA;              f_format_context.get()&#xA;            , AVMEDIA_TYPE_VIDEO&#xA;            , -1            // wanted stream (any)&#xA;            , -1            // related stream (none)&#xA;            , nullptr       // AVCodec *&#xA;            , 0);           // flags&#xA;    if(f_video_stream_index &lt; 0)&#xA;    {&#xA;        throw std::runtime_error("ffmpeg: Could not find stream in input file");&#xA;    }&#xA;    if(static_cast<unsigned int="int">(f_video_stream_index) >= f_format_context->nb_streams)&#xA;    {&#xA;        throw std::range_error("ffmpeg: Stream index out of range");&#xA;    }&#xA;&#xA;    auto f_stream = f_format_context->streams[f_video_stream_index];&#xA;&#xA;    auto f_video_codec = f_stream->codecpar->codec_id;&#xA;&#xA;    int f_bit_depth(0);&#xA;    switch(f_stream->codecpar->format)&#xA;    {&#xA;    case AV_PIX_FMT_YUV420P10LE:&#xA;        f_bit_depth = 10;&#xA;        break;&#xA;&#xA;    case AV_PIX_FMT_YUV420P12LE:&#xA;        f_bit_depth = 12;&#xA;        break;&#xA;&#xA;    default:&#xA;        f_bit_depth = 8;&#xA;        break;&#xA;&#xA;    }&#xA;&#xA;    bool f_mp4_h264 = f_video_codec == AV_CODEC_ID_H264 &amp;&amp; (&#xA;               strcmp(f_format_context->iformat->long_name, "QuickTime / MOV") == 0&#xA;            || strcmp(f_format_context->iformat->long_name, "FLV (Flash Video)") == 0&#xA;            || strcmp(f_format_context->iformat->long_name, "Matroska / WebM") == 0&#xA;        );&#xA;&#xA;    if(f_mp4_h264)&#xA;    {&#xA;        AVBitStreamFilter const * bsf_stream_filter(av_bsf_get_by_name("h264_mp4toannexb"));&#xA;        if(bsf_stream_filter == nullptr)&#xA;        {&#xA;            throw std::runtime_error("av_bsf_get_by_name(\"h264_mp4toannexb\") failed");&#xA;        }&#xA;        AVBSFContext * bsf_context(nullptr);&#xA;        int const r2(av_bsf_alloc(bsf_stream_filter, &amp;bsf_context));&#xA;        if(r2 &lt; 0&#xA;        || bsf_context == nullptr)&#xA;        {&#xA;            throw std::bad_alloc();&#xA;        }&#xA;        auto f_bsf_context = std::unique_ptr&lt;&#xA;                  AVBSFContext&#xA;                , decltype(&amp;ffmpeg_demuxer_av_bsf_free)>(&#xA;                          bsf_context&#xA;                        , &amp;ffmpeg_demuxer_av_bsf_free);&#xA;        f_bsf_context->par_in = f_stream->codecpar;&#xA;        if(av_bsf_init(f_bsf_context.get()) &lt; 0)&#xA;        {&#xA;            throw std::runtime_error("av_bsf_init() failed");&#xA;        }&#xA;    }&#xA;&#xA;    return 0;&#xA;}&#xA;</unsigned></memory></iostream>

    &#xA;

    So. Am I misreading the documentation or misusing one of the free/close function ? I don't think that the AVBSFContext itself gets released when I close the AVFormatContext, but I may be mistaken ?

    &#xA;

    I won't put "C" as a tag since it will get removed even though this applies to C. It's not because I use C++ that I get a double free (i.e. it happens in the ffmpeg C library).

    &#xA;

  • ffmpeg radio live transcoding mp3/aac to g722

    13 mai 2017, par p3tter

    I have tried to transcode a radio stream with ffmpeg to g722.
    I get the stream to work and im able to listen to the stream.
    The problem is that the output stream have faster speed than the input stream.
    so the result is not good. I have tried to slow down the speed with atempo without any luck.

    like :

    size=     241kB time=00:00:28.67 bitrate=  68.8kbits/s speed= 1.4x

    this varies from 1.x to 15.x

    Console output :

    c:\ffmpeg\bin>ffmpeg -i http://lyd.nrk.no/nrk_radio_mp3_mp3_l -ac 1 -acodec g722 -f rtp -ab 64k -ar 16k rtp://192.168.0.99:555
    ffmpeg version N-85750-ga75ef15 Copyright (c) 2000-2017 the FFmpeg developers
     built with gcc 6.3.0 (GCC)
     configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib
     libavutil      55. 61.100 / 55. 61.100
     libavcodec     57. 93.100 / 57. 93.100
     libavformat    57. 72.101 / 57. 72.101
     libavdevice    57.  7.100 / 57.  7.100
     libavfilter     6. 88.100 /  6. 88.100
     libswscale      4.  7.101 /  4.  7.101
     libswresample   2.  8.100 /  2.  8.100
     libpostproc    54.  6.100 / 54.  6.100
    Input #0, mp3, from 'http://lyd.nrk.no/nrk_radio_mp3_mp3_l':
     Metadata:
       icy-name        : NRK mP3
       icy-pub         : 1
     Duration: N/A, start: 0.000000, bitrate: 96 kb/s
       Stream #0:0: Audio: mp3, 48000 Hz, stereo, s16p, 96 kb/s
    [udp @ 000000000244bec0] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
    [udp @ 00000000024781a0] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
    Stream mapping:
     Stream #0:0 -> #0:0 (mp3 (native) -> adpcm_g722 (g722))
    Press [q] to stop, [?] for help
    Output #0, rtp, to 'rtp://192.168.0.99:555':
     Metadata:
       icy-name        : NRK mP3
       icy-pub         : 1
       encoder         : Lavf57.72.101
       Stream #0:0: Audio: adpcm_g722 (g722), 16000 Hz, mono, s16, 64 kb/s
       Metadata:
         encoder         : Lavc57.93.100 g722
    SDP:
    v=0
    o=- 0 0 IN IP4 127.0.0.1
    s=No Name
    c=IN IP4 192.168.0.99
    t=0 0
    a=tool:libavformat 57.72.101
    m=audio 555 RTP/AVP 9
    b=AS:64

    size=     413kB time=00:00:49.17 bitrate=  68.8kbits/s speed=1.43x

    Does anyone know what im doing wrong ?
    Thanks