Recherche avancée

Médias (91)

Autres articles (81)

  • MediaSPIP v0.2

    21 juin 2013, par

    MediaSPIP 0.2 est la première version de MediaSPIP stable.
    Sa date de sortie officielle est le 21 juin 2013 et est annoncée ici.
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Comme pour la version précédente, 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 (...)

  • Mise à disposition des fichiers

    14 avril 2011, par

    Par défaut, lors de son initialisation, MediaSPIP ne permet pas aux visiteurs de télécharger les fichiers qu’ils soient originaux ou le résultat de leur transformation ou encodage. Il permet uniquement de les visualiser.
    Cependant, il est possible et facile d’autoriser les visiteurs à avoir accès à ces documents et ce sous différentes formes.
    Tout cela se passe dans la page de configuration du squelette. Il vous faut aller dans l’espace d’administration du canal, et choisir dans la navigation (...)

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

Sur d’autres sites (11250)

  • cmake installation of x265 for ffmpeg on Cygwin - executable location different from other codecs

    6 mai, par bballdave025

    TL ;DR (with expected vs. real)

    


    For a Cygwin build of ffmpeg, I'm installing x265, and it seems to me that the executable ends up in the wrong place. I'll show some basic directory structure, then I'll show the tree outputs for expected and real, both before and after the cmake installation. For directories where I think this is important, I'll show the outputs before and after the cmake installation.

    


    My question has two parts. I used the following cmake and make commands,

    


    # pwd => $HOME/programs/ffmpeg/ffmpeg_sources/x265/build/linux
PATH="$HOME/programs/ffmpeg/bin:$PATH" \
  cmake -G "Unix Makefiles" \
        -DCMAKE_INSTALL_PREFIX="$HOME/programs/ffmpeg/ffmpeg_build" \
        -DENABLE_SHARED=OFF \
        -DCMAKE_EXE_LINKER_FLAGS="-static" 
            ../../source
PATH="$HOME/programs/ffmpeg/bin:$PATH" make -j $(nproc)
make install


    


    The result is below, with my real vs. expected, and there is a more detailed, more explicit, and hopefully more clear file with the info. at pastebin.com/86wHrtxR.

    


    Edit : I've made a copy of the detailed/explicit/clear file on my GitHub as a gist. This should be more secure. (The Pastebin version still exists, in case that is your preference.)

    


    Now, for my two-part question :

    


      

    1. How can I change my cmake command so that my x265.exe file ends up in $HOME/programs/ffmpeg/bin with the proper linking, rather than $HOME/programs/ffmpeg/ffmpeg_build/bin ?

      


    2. 


    3. Would the build/linker/whatever figure things out for the ffmpeg build ?

      


    4. 


    


    I want to know the answer to question number 1 regardless of the answer to question number 2. I haven't used cmake with the -DVAR=var flags before, and I'd like to take this opportunity to learn.

    


    For the result :

    


    Things surrounded by double curly brackets are {{ expected }}.

    


    Things surrounded by double angle brackets are << real >>, i.e. they exist after the installation is done.

    


    If real matches expected, and the file/directory is new, I've surrounded it by double parentheses, i.e. double round brackets. (( match ))

    


    If something is not new (and thus has the same before and after) I haven't marked it.

    


       me@MACHINE ~/programs/ffmpeg&#xA;   $ tree --charset=ascii bin&#xA;   bin&#xA;   |-- lame.exe&#xA;   |-- mp3rtp.exe&#xA;   |-- mp3x.exe&#xA;   `-- x264.exe&#xA;{{ `-- x265.exe                     }} ## Expected, not Exists&#xA;&#xA;   me@MACHINE ~/programs/ffmpeg&#xA;   $ tree --charset=ascii \&#xA;                   ffmpeg_build&#xA;   ffmpeg_build&#xA;&lt;&lt; |-- bin                          >> ## Not expected, Exists&#xA;&lt;&lt; |   `-- x265.exe                 >> ## Not expected, Exists&#xA;   |-- include&#xA;   |   |-- fdk-aac&#xA;   |   |   |-- aacdecoder_lib.h&#xA;   |   |   |-- aacenc_lib.h&#xA;   |   |   `-- ... <more files="files">&#xA;   |   |-- lame&#xA;   |   |   `-- lame.h&#xA;   |   |-- x264.h&#xA;   |   `-- x264_config.h&#xA;(( |   |-- x265.h                   )) ## Expected and Exists&#xA;(( |   `-- x265_config.h            )) ## Expected and Exists&#xA;   |-- lib&#xA;   |   |-- libfdk-aac.a&#xA;   |   |-- libfdk-aac.la&#xA;   |   |-- libmp3lame.a&#xA;   |   |-- libmp3lame.la&#xA;(( |   |-- libx265.a                )) ## Expected and Exists&#xA;   |   `-- pkgconfig&#xA;   |       |-- fdk-aac.pc&#xA;   |       `-- x264.pc&#xA;(( |       `-- x265.pc              )) ## Expected and Exists&#xA;   `-- share&#xA;       |-- doc&#xA;       |   ... <only lame="lame">&#xA;       `-- man&#xA;           ... <only lame="lame">&#xA;</only></only></more>

    &#xA;

    Other, possibly useful information about the build directory structure.

    &#xA;

    me@MACHINE ~/programs/ffmpeg&#xA;$ tree --charset=ascii -L 1 .&#xA;.&#xA;|-- bin&#xA;|-- ffmpeg_build&#xA;`-- ffmpeg_sources&#xA;&#xA;3 directories, 0 files&#xA;

    &#xA;

    For this next, ffmpeg_sources dir, I'm showing the after (which is both expected and real/exists) surrounded by double parentheses, i.e. double round brackets, (( <after> ))</after>.

    &#xA;

       me@MACHINE ~/programs/ffmpeg&#xA;   $ tree --charset=ascii -L 1 ffmpeg_sources&#xA;   ffmpeg_sources&#xA;   |-- fdk-aac.zip&#xA;   |-- lame-svn&#xA;   |-- mstorsjo-fdk-aac-e7d8591&#xA;   |-- x264-snapshot-20191217-2245&#xA;   |-- x264-snapshot-20191217-2245.tar.bz2&#xA;   `-- x264-snapshot-20191218-README.txt&#xA;(( `-- x265                         ))&#xA;&#xA;   3 directories, 3 files&#xA;(( 4 directories, 3 files ))&#xA;

    &#xA;


    &#xA;

    NOW, FOR SOME MORE DETAIL

    &#xA;


    &#xA;

    What I'm Doing

    &#xA;

    I am working on a Cygwin build (vs. a Windows/mingw build) of ffmpeg. I am following an older guide by koohiimaster (archived). That guide says,

    &#xA;

    &#xA;

    [W]e are not cross-compiling for windows ; we are compiling for Cygwin.

    &#xA;

    &#xA;

    This 2014 guide doesn't have all of the codecs I want - I want as complete a build as possible - so I've also been referring to this ffmpeg-for-Ubuntu guide (archived), which I hope is kept up-to-date. It's referred to by koohiimaster.

    &#xA;

    Also, as a way of checking that I'm getting all the codecs I want, I've been looking at this FFmpeg for Windows guide from SuperUser

    &#xA;

    I'll give the basics of my steps below. More details, as well as all the output is at pastebin.com/suL1nU6Z.

    &#xA;

    Edit : I've put the log of terminal input/output for all my steps into a gist at my GitHub as this seems safer than Pastebin.

    &#xA;

    A look at directory structure for the build

    &#xA;

    me@MACHINE ~/programs/ffmpeg&#xA;$ cd $HOME/programs/ffmpeg&#xA;&#xA;me@MACHINE ~/programs/ffmpeg&#xA;$ tree --charset=ascii -d -L 1&#xA;.&#xA;|-- bin&#xA;|-- ffmpeg_build&#xA;`-- ffmpeg_sources&#xA;&#xA;3 directories&#xA;

    &#xA;

    Getting the source. Note that I had to apt-cyg install mercurial, though (with my Cygwin setup GUI/EXE in my Cygwin root directory, i.e. C:\cygwin64\setup-x86_64.exe), I could also have done /setup-x86_64.exe install -q -P mercurial.

    &#xA;

    cd ffmpeg_sources&#xA;hg clone https://bitbucket.org/multicoreware/x265&#xA;

    &#xA;

    Running the cmake and make commands

    &#xA;

    cd x265/build/linux&#xA;PATH="$HOME/programs/ffmpeg/bin:$PATH" \&#xA;  cmake -G "Unix Makefiles" \&#xA;        -DCMAKE_INSTALL_PREFIX="$HOME/programs/ffmpeg/ffmpeg_build" \&#xA;        -DENABLE_SHARED=OFF \&#xA;        -DCMAKE_EXE_LINKER_FLAGS="-static" \&#xA;            ../../source&#xA;PATH="$HOME/programs/ffmpeg/bin:$PATH" make -j $(nproc)&#xA;make install&#xA;

    &#xA;

    It was the last part (actually the very last line) of the make install output that worried me. Here is the whole output - it's not very long.

    &#xA;

    make[1]: Entering directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;make[2]: Entering directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;make[2]: Leaving directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;[ 20%] Built target encoder&#xA;make[2]: Entering directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;make[2]: Leaving directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;[ 83%] Built target common&#xA;make[2]: Entering directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;make[2]: Leaving directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;[ 84%] Built target x265-static&#xA;make[2]: Entering directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;make[2]: Leaving directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;[100%] Built target cli&#xA;make[1]: Leaving directory &#x27;/home/me/programs/ffmpeg/ffmpeg_sources/x265/build/linux&#x27;&#xA;Install the project...&#xA;-- Install configuration: "Release"&#xA;-- Installing: /home/me/programs/ffmpeg/ffmpeg_build/lib/libx265.a&#xA;-- Installing: /home/me/programs/ffmpeg/ffmpeg_build/include/x265.h&#xA;-- Installing: /home/me/programs/ffmpeg/ffmpeg_build/include/x265_config.h&#xA;-- Installing: /home/me/programs/ffmpeg/ffmpeg_build/lib/pkgconfig/x265.pc&#xA;-- Installing: /home/me/programs/ffmpeg/ffmpeg_build/bin/x265.exe&#xA;

    &#xA;

    As discussed in the TL ;DR section, I expected to see x265.exe at

    &#xA;

    home/me/programs/ffmpeg/bin/x265.exe

    &#xA;

    rather than the path given on the last line of output,

    &#xA;

    /home/me/programs/ffmpeg/ffmpeg_build/bin/x265.exe

    &#xA;

    This worries me especially because the first part of the ffmpeg install command that my instructions inform me to run is

    &#xA;

    PATH="$HOME/programs/ffmpeg/bin:$PATH" \&#xA;PKG_CONFIG_PATH="$HOME/programs/ffmpeg/ffmpeg_build/lib/pkgconfig" \&#xA;  ./configure \&#xA;    --prefix="$HOME/programs/ffmpeg/ffmpeg_build" \&#xA;    --extra-cflags="-I$HOME/programs/ffmpeg/ffmpeg_build/include" \&#xA;    --extra-ldflags="-L$HOME/programs/ffmpeg/ffmpeg_build/lib" \&#xA;    --bindir="$HOME/programs/ffmpeg/bin" \&#xA;

    &#xA;

       ... and on it goes ...

    &#xA;

    It would seem to me that the .configure script for ffmpeg won't find the x265 executable, since it's not in the bindir.

    &#xA;

    I'll repeat my two-part question from before :

    &#xA;

      &#xA;
    1. How can I change my cmake command so that my x265.exe file ends up in $HOME/programs/ffmpeg/bin with the proper linking, rather than $HOME/programs/ffmpeg/ffmpeg_build/bin ?
    2. &#xA;

    &#xA;

    What I'm looking for here is something akin to the --bindir flag from make's ./confiure.

    &#xA;

      &#xA;
    1. Would the build/linker/whatever figure things out for the ffmpeg build ?
    2. &#xA;

    &#xA;

    I want to know the answer to question number 1 regardless of the answer to question number 2. I haven't used cmake with the -DVAR=var flags before, and I'd like to take this opportunity to learn.

    &#xA;


    &#xA;

    Where I've Looked & What I've Tried

    &#xA;

    I first started with the man page and the --help for cmake. That was scary. I was hoping that I'd find something useful around the CMAKE_INSTALL_PREFIX stuff, but I wasn't sure what to make of it.

    &#xA;

    I tried greping through cmake --help-full (with 50 lines before and after whatever I was searching for), but got tripped up by the complexity. I've only used basic cmake stuff, before, and I got more than a little lost.

    &#xA;

    Even with the --help, I don't know if I need to look at the help-manual, the help-command, the help-module, the help-policy, the help-variable, or something else.

    &#xA;

    It seemed to me, in reading, that a "binary directory" is the top of the "build", whereas I thought it would be the dir named bin ... I couldn't tell what things were meant to be used by the person creating the package rather than by me, who am trying to make/build the package from the command line.

    &#xA;

    I looked through what seemed to be a cmake wiki's Useful Variables page (archived), as well as at this thread at cmake.org (archived), which, along with this SO source and this and this and this and this SO sources, seemed to suggest using the CMAKE_RUNTIME_OUTPUT_DIRECTORY variable (since the EXECUTABLE_OUTPUT-DIRECTORY variable has been superseded by it). By the way, I couldn't tell which things should be used by the creator of the package vs. the consumer of the package - the consumer being me. I tried with

    &#xA;

    PATH="$HOME/programs/ffmpeg/bin:$PATH" \&#xA;  cmake -G "Unix Makefiles" \&#xA;        -DCMAKE_INSTALL_PREFIX="$HOME/programs/ffmpeg/ffmpeg_build" \&#xA;        -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="$HOME/programs/ffmpeg/bin" \&#xA;        -DENABLE_SHARED=OFF \&#xA;        -DCMAKE_EXE_LINKER_FLAGS="-static" &#xA;            ../../source&#xA;PATH="$HOME/&#xA;

    &#xA;

    and have thought about fifty-or-so other -DVAR variables, but with any I have tried, I still get the same result. I still get the executable in what seems to be the wrong place.

    &#xA;


    &#xA;

    System Details

    &#xA;

    $ date &amp;&amp; date &#x2B;&#x27;%s&#x27;&#xA;Tue, May  5, 2020 11:14:40 AM&#xA;1588698880&#xA;$ uname -a&#xA;CYGWIN_NT-10.0 MACHINE 3.1.4(0.340/5/3) 2020-02-19 08:49 x86_64 Cygwin&#xA;$ cmake --version&#xA;cmake version 3.14.5&#xA;&#xA;CMake suite maintained and supported by Kitware (kitware.com/cmake).&#xA;$ bash --version | head -n 1&#xA;GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)&#xA;$ gcc --version | head -n 1&#xA;gcc (GCC) 9.3.0&#xA;$ g&#x2B;&#x2B; --version | head -n 1&#xA;g&#x2B;&#x2B; (GCC) 9.3.0&#xA;$ make --version | head -n 2&#xA;GNU Make 4.3&#xA;Built for x86_64-pc-cygwin&#xA;

    &#xA;

  • FFmpeg loglevel with level prefix

    13 mai 2020, par Matan Marciano

    I want to add level prefix to ffmpeg logs.&#xA;Im using ffmpeg -loglevel level&#x2B;info -i input&#xA;And it is working as well in my Mac (ios) but is not working in my Ubuntu 18 with ffmpeg version 3.4.6-0ubuntu0.18.04.1

    &#xA;&#xA;

    When I am running it in my Ubuntu I got :

    &#xA;&#xA;

    Invalid loglevel "level&#x2B;info". Possible levels are numbers or:&#xA;"quite"&#xA;"panic"&#xA;...&#xA;...&#xA;...&#xA;"trace"&#xA;

    &#xA;&#xA;

    Please advise

    &#xA;

  • FFmpeg Opus choppy sound UPDATED DESCRIPTION

    2 juin 2020, par easy_breezy

    I'm using FFmpeg and try to encode and decode a raw PCM sound to Opus using a built-in FFmpeg "opus" codec. My input samples are raw PCM 8000 Hz 16 bit mono, in AV_SAMPLE_FMT_S16 format. Since Opus requires sample format AV_SAMPLE_FMT_FLTP and sample rate 48000 Hz only, so I resample my samples before encode them.

    &#xA;&#xA;

    I have two instances of ResamplerAudio class that does the work of resampling audio samples and has a member of SwrContext, I use the first instance of ResamplerAudio for resampling a raw PCM input audio before encoding and the second for resampling decoded audio to get it's format and sample rate the same as source values of input raw audio.

    &#xA;&#xA;

    ResamplerAudio class has a function that init it's SwrContext member like this :

    &#xA;&#xA;

    void ResamplerAudio::init(AVCodecContext *codecContext, int inSampleRate, int outSampleRate, AVSampleFormat inSampleFmt, AVSampleFormat outSampleFmt)&#xA;{&#xA;    swrContext = swr_alloc();&#xA;    if (!swrContext)&#xA;    {&#xA;        LOGE(TAG, "[init] Couldn&#x27;t allocate swr context");&#xA;        return;&#xA;    }&#xA;&#xA;    av_opt_set_int(swrContext, "in_channel_layout", (int64_t) codecContext->channel_layout, 0);&#xA;    av_opt_set_int(swrContext, "out_channel_layout", (int64_t) codecContext->channel_layout,  0);&#xA;&#xA;    av_opt_set_int(swrContext, "in_channel_count", codecContext->channels, 0);&#xA;    av_opt_set_int(swrContext, "out_channel_count", codecContext->channels, 0);&#xA;&#xA;    av_opt_set_int(swrContext, "in_sample_rate", inSampleRate, 0);&#xA;    av_opt_set_int(swrContext, "out_sample_rate", outSampleRate, 0);&#xA;&#xA;    av_opt_set_sample_fmt(swrContext, "in_sample_fmt", inSampleFmt, 0);&#xA;    av_opt_set_sample_fmt(swrContext, "out_sample_fmt", outSampleFmt,  0);&#xA;&#xA;    int ret = swr_init(swrContext);&#xA;    if (ret &lt; 0)&#xA;    {&#xA;        LOGE(TAG, "[init] swr_init error: %s", av_err2str(ret));&#xA;        return;&#xA;    }&#xA;&#xA;    LOGD(TAG, "[init] success codecContext->channel_layout: %d; inSampleRate: %d; outSampleRate: %d; inSampleFmt: %d; outSampleFmt: %d", (int) codecContext->channel_layout, inSampleRate, outSampleRate, inSampleFmt, outSampleFmt);&#xA;}&#xA;

    &#xA;&#xA;

    And I call ResamplerAudio::init function for the first instance of ResamplerAudio (this instance do resamping a raw PCM input audio before encoding and I called it resamplerEncoder) with the following args :

    &#xA;&#xA;

    resamplerEncoder->init(contextEncoder, 8000, 48000, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP);&#xA;

    &#xA;&#xA;

    The second instance of ResamplerAudio (this instance do resamping after decoding audio from Opus and I called it resamplerDecoder) I init with the following args :

    &#xA;&#xA;

    resamplerDecoder->init(contextDecoder, 48000, 8000, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16);&#xA;

    &#xA;&#xA;

    The function of ResamplerAudio that does resampling looks like this :

    &#xA;&#xA;

    std::vector ResamplerAudio::convert(uint8_t **inData, int inSamplesCount, int outChannels, int outFormat)&#xA;{&#xA;    std::vector result;&#xA;    uint8_t *dstData = NULL;&#xA;    const int dstNbSamples = swr_get_out_samples(swrContext, inSamplesCount);&#xA;    av_samples_alloc(&amp;dstData, NULL, outChannels, dstNbSamples, AVSampleFormat(outFormat), 1);&#xA;    int resampledSize = swr_convert(swrContext, &amp;dstData, dstNbSamples, (const uint8_t **)inData, inSamplesCount);&#xA;    int dstBufSize = av_samples_get_buffer_size(NULL, outChannels, resampledSize, AVSampleFormat(outFormat), 1);&#xA;&#xA;    if (dstBufSize &lt;= 0) return result;&#xA;&#xA;    std::copy(&amp;dstData[0], &amp;dstData[dstBufSize], std::back_inserter(result));&#xA;&#xA;    return result;&#xA;}&#xA;

    &#xA;&#xA;

    And I call ResamplerAudio::convert function before encoding with the following args :

    &#xA;&#xA;

    // data - an array of raw pcm audio&#xA;// dataLength - the length of data array&#xA;// getSamplesCount() - function that calculates samples count&#xA;// frameEncode - AVFrame that using for encode audio&#xA;std::vector resampledData = resamplerEncoder->convert(&amp;data, getSamplesCount(dataLength, frameEncode->channels, AV_SAMPLE_FMT_S16), frameEncode->channels, frameEncode->format);&#xA;

    &#xA;&#xA;

    getSamplesCount() function looks like this :

    &#xA;&#xA;

    getSamplesCount(int bytesCount, int channels, AVSampleFormat format)&#xA;{&#xA;    return bytesCount / av_get_bytes_per_sample(format) / channels;&#xA;}&#xA;

    &#xA;&#xA;

    After that I fill my frameEncode with resampled samples :

    &#xA;&#xA;

    memcpy(&amp;frame->data[0][0], &amp;resampledData[0], sizeof(uint8_t) * resampledDataLength);&#xA;

    &#xA;&#xA;

    And pass frameEncode to encoding like this encodeFrame(resampledDataLength) :

    &#xA;&#xA;

    void encodeFrame(int dataLength)&#xA;{&#xA;    /* send the frame for encoding */&#xA;    int ret = avcodec_send_frame(contextEncoder, frameEncode);&#xA;    if (ret &lt; 0)&#xA;    {&#xA;        LOGE(TAG, "[encodeFrame] avcodec_send_frame error: %s", av_err2str(ret));&#xA;        return;&#xA;    }&#xA;&#xA;    /* read all the available output packets (in general there may be any number of them */&#xA;    while (ret >= 0)&#xA;    {&#xA;        ret = avcodec_receive_packet(contextEncoder, packetEncode);&#xA;        if (ret &lt; 0 &amp;&amp; ret != AVERROR(EAGAIN)) LOGE(TAG, "[encodeFrame] error in avcodec_receive_packet: %s", av_err2str(ret));&#xA;        if (ret &lt; 0) break;&#xA;&#xA;        // encodedData - std::vector that stores encoded data&#xA;        std::copy(&amp;packetEncode->data[0], &amp;packetEncode->data[dataLength], std::back_inserter(encodedData));&#xA;        av_packet_unref(packetEncode);&#xA;    }&#xA;}&#xA;

    &#xA;&#xA;

    Then I decode my encoded samples and do resampling to get back them in source sample format and sample rate so I call ResamplerAudio::convert function for resamplerDecoder with the following args :

    &#xA;&#xA;

    // frameDecode - AVFrame that holds decoded audio&#xA;std::vector resampledData = resamplerDecoder->convert(frameDecode->data, frameDecode->nb_samples, frameDecode->channels, AV_SAMPLE_FMT_S16);&#xA;

    &#xA;&#xA;

    And result sound is choppy and I also noticed that the decoded array size is bigger than the source array size with raw pcm audio.

    &#xA;&#xA;

    Please any ideas what I'm doing wrong ?

    &#xA;&#xA;

    UPD 18.05.2020

    &#xA;&#xA;

    I tested my resampling logic, I did resampling of raw pcm sound without any encoding and decoding routines. First I tried to convert the sample rate of input sound from 8000 Hz to 48000 Hz than I took resampled samples from step above and convert it's sample rate from 48000 Hz to 8000 Hz and the result sound is perfect and clean, also I did the same steps but I converted not a sample rate but a sample format from AV_SAMPLE_FMT_S16 to AV_SAMPLE_FMT_FLTP and vice versa and again the result sound is perfect and clean, also I got the same result when I coverted both a sample rate and a sample format.&#xA;So I assume that the problem of distorted and choppy sound is in my encoding or decoding routine, I think most likely in decoding routine because after decoding I ALWAYS get AVFrame with 960 nb_samples despite what was the size of input sound.

    &#xA;&#xA;

    My decoding routine looks like this :

    &#xA;&#xA;

    std::vector decode(uint8_t *data, unsigned int dataLength)&#xA;{&#xA;    decodedData.clear();&#xA;&#xA;    int dataSize = dataLength;&#xA;&#xA;    while (dataSize > 0)&#xA;    {&#xA;        if (!frameDecode)&#xA;        {&#xA;            frameDecode = av_frame_alloc();&#xA;            if (!frameDecode)&#xA;            {&#xA;                LOGE(TAG, "[decode] Couldn&#x27;t allocate the frame");&#xA;                return EMPTY_DATA;&#xA;            }&#xA;        }&#xA;&#xA;        ret = av_parser_parse2(parser, contextDecoder, &amp;packetDecode->data, &amp;packetDecode->size, &amp;data[0], dataSize, AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);&#xA;        if (ret &lt; 0) {&#xA;            LOGE(TAG, "[decode] av_parser_parse2 error: %s", av_err2str(ret));&#xA;            return EMPTY_DATA;&#xA;        }&#xA;&#xA;        data &#x2B;= ret;&#xA;        dataSize -= ret;&#xA;&#xA;        doDecode();&#xA;    }&#xA;    return decodedData;&#xA;}&#xA;&#xA;void doDecode()&#xA;{&#xA;    if (packetDecode->size) {&#xA;        /* send the packet with the compressed data to the decoder */&#xA;        int ret = avcodec_send_packet(contextDecoder, packetDecode);&#xA;        if (ret &lt; 0) LOGE(TAG, "[decode] avcodec_send_packet error: %s", av_err2str(ret));&#xA;&#xA;        /* read all the output frames (in general there may be any number of them */&#xA;        while (ret >= 0)&#xA;        {&#xA;            ret = avcodec_receive_frame(contextDecoder, frameDecode);&#xA;            if (ret &lt; 0 &amp;&amp; ret != AVERROR(EAGAIN) &amp;&amp; ret != AVERROR_EOF) LOGE(TAG, "[decode] avcodec_receive_frame error: %s", av_err2str(ret));&#xA;            if (ret &lt; 0) break;&#xA;&#xA;            std::vector resampledData = resamplerDecoder->convert(frameDecode->data, frameDecode->nb_samples, frameDecode->channels, AV_SAMPLE_FMT_S16);&#xA;            if (!resampledData.size()) continue;&#xA;            std::copy(&amp;resampledData.data()[0], &amp;resampledData.data()[resampledData.size()], std::back_inserter(decodedData));&#xA;        }&#xA;    }&#xA;}&#xA;

    &#xA;&#xA;

    UPD 30.05.2020

    &#xA;&#xA;

    I decided to refuse to use FFmpeg in my project and use libopus 1.3.1 instead, so I made a wrapper around it and it works fine.

    &#xA;