Recherche avancée

Médias (2)

Mot : - Tags -/doc2img

Autres articles (107)

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

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

Sur d’autres sites (15532)

  • ffserver : user AVStream.codecpar in compute_status()

    8 novembre 2016, par Reynaldo H. Verdejo Pinochet
    ffserver : user AVStream.codecpar in compute_status()
    

    AVStream.codec is deprecated

    Signed-off-by : Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] ffserver.c
  • x264 Decoding time increases with zerolatency

    13 avril 2016, par Ajay Ponna Venkatesh

    Reference - Why sliced thread affect so much on realtime encoding using ffmpeg x264 ?

    With Zerolatency / sliced-threads enabled, I am observing that the decoding time shoots up ! I am encoding on my Windows 10 laptop and streaming to Samsung S4 phone where it is decoded and rendered. If usually, decoding takes 2-3 ms, it shoots up to around 25 ms if I use sliced-threads. It is a real time streaming application so I need low latency and that’s why I enabled zerolatency. Can someone help please ?

    I am using the hardware decoder on the phone.

  • Resampling audio using libswresample, leaves small amount of noise after resampling

    20 juillet 2020, par Milo

    I'm trying to resample audio from 44Khz to 48Khz and I'm getting s small light noise after resampling. As if someone is gently ticking the mic. This happens both ways. From 48Khz to 44Khz and vice versa.

    &#xA;

    I've read that this can happen because swrContext still has some data left and that I shoudl flush the context before resampling next frame. And although this helps a little (less noticeable noise), it's still present.

    &#xA;

    I've tried using FFmpeg resample filter instead, but the output is just loud incoherent noise. I'm pretty sure that libswresample should not output any noise on resampling which means that I just don't know how to use it well and I'm missing some options.

    &#xA;

    This is the code for resampler.

    &#xA;

    int ResampleFrame(VideoState * videoState, AVFrame *decoded_audio_frame,     enum AVSampleFormat out_sample_fmt, uint8_t * out_buf)&#xA;{&#xA; int in_sample_rate = videoState->audio->ptrAudioCodecCtx_->sample_rate;&#xA; int out_sample_rate = SAMPLE_RATE;&#xA;&#xA;// get an instance of the AudioResamplingState struct, create if NULL&#xA;AudioResamplingState* arState = getAudioResampling(videoState->audio->ptrAudioCodecCtx_->channel_layout);&#xA;&#xA;if (!arState->swr_ctx)&#xA;{&#xA;    printf("swr_alloc error.\n");&#xA;    return -1;&#xA;}&#xA;&#xA;// get input audio channels&#xA;arState->in_channel_layout = (videoState->audio->ptrAudioCodecCtx_->channels ==&#xA;            av_get_channel_layout_nb_channels(videoState->audio->ptrAudioCodecCtx_->channel_layout)) ?&#xA;            videoState->audio->ptrAudioCodecCtx_->channel_layout :&#xA;            av_get_default_channel_layout(videoState->audio->ptrAudioCodecCtx_->channels);&#xA;&#xA;&#xA;// check input audio channels correctly retrieved&#xA;if (arState->in_channel_layout &lt;= 0)&#xA;{&#xA;    printf("in_channel_layout error.\n");&#xA;    return -1;&#xA;}&#xA;&#xA;&#xA;arState->out_channel_layout = AV_CH_LAYOUT_STEREO;&#xA;&#xA;// retrieve number of audio samples (per channel)&#xA;arState->in_nb_samples = decoded_audio_frame->nb_samples;&#xA;if (arState->in_nb_samples &lt;= 0)&#xA;{&#xA;    printf("in_nb_samples error.\n");&#xA;    return -1;&#xA;}&#xA;&#xA;// Set SwrContext parameters for resampling&#xA;av_opt_set_int(arState->swr_ctx, "in_channel_layout", arState->in_channel_layout, 0);&#xA;av_opt_set_int(arState->swr_ctx, "in_sample_rate", in_sample_rate, 0);&#xA;av_opt_set_sample_fmt(arState->swr_ctx, "in_sample_fmt", videoState->audio->ptrAudioCodecCtx_->sample_fmt, 0);&#xA;&#xA;&#xA;// Set SwrContext parameters for resampling&#xA;av_opt_set_int(arState->swr_ctx, "out_channel_layout", arState->out_channel_layout, 0);&#xA;av_opt_set_int(arState->swr_ctx, "out_sample_rate", out_sample_rate, 0);&#xA;av_opt_set_sample_fmt(arState->swr_ctx, "out_sample_fmt", out_sample_fmt, 0);&#xA;&#xA;&#xA;// initialize SWR context after user parameters have been set&#xA;int ret = swr_init(arState->swr_ctx);&#xA;if (ret &lt; 0)&#xA;   {&#xA;    printf("Failed to initialize the resampling context.\n");&#xA;    return -1;&#xA;   }&#xA;&#xA;&#xA; // retrieve output samples number taking into account the progressive delay&#xA;int64_t delay = swr_get_delay(arState->swr_ctx, videoState->audio->ptrAudioCodecCtx_->sample_rate) &#x2B; arState->in_nb_samples;&#xA;arState->out_nb_samples = av_rescale_rnd(delay, out_sample_rate, in_sample_rate, AV_ROUND_UP );&#xA;&#xA;// check output samples number was correctly rescaled&#xA;if (arState->out_nb_samples &lt;= 0)&#xA;{&#xA;    printf("av_rescale_rnd error\n");&#xA;    return -1;&#xA;}&#xA;&#xA;// get number of output audio channels&#xA;arState->out_nb_channels = av_get_channel_layout_nb_channels(arState->out_channel_layout);&#xA;&#xA;// allocate data pointers array for arState->resampled_data and fill data&#xA;// pointers and linesize accordingly&#xA;// check memory allocation for the resampled data was successful&#xA;ret = av_samples_alloc_array_and_samples(&amp;arState->resampled_data, &amp;arState->out_linesize, arState->out_nb_channels, arState->out_nb_samples, out_sample_fmt, 0);&#xA;if (ret &lt; 0)&#xA;   {&#xA;    printf("av_samples_alloc_array_and_samples() error: Could not allocate destination samples.\n");&#xA;    return -1;&#xA;   }&#xA;&#xA;&#xA;if (arState->swr_ctx)&#xA;   {&#xA;    // do the actual audio data resampling&#xA;    // check audio conversion was successful&#xA;    int ret_num_samples = swr_convert(arState->swr_ctx,arState->resampled_data,arState->out_nb_samples,(const uint8_t**)decoded_audio_frame->data, decoded_audio_frame->nb_samples);&#xA;    //int ret_num_samples = swr_convert_frame(arState->swr_ctx,arState->resampled_data,arState->out_nb_samples,(const uint8_t**)decoded_audio_frame->data, decoded_audio_frame->nb_samples);&#xA;&#xA;    if (ret_num_samples &lt; 0)&#xA;       {&#xA;        printf("swr_convert_error.\n");&#xA;        return -1;&#xA;       }&#xA;&#xA;&#xA;    // get the required buffer size for the given audio parameters&#xA;    // check audio buffer size&#xA;    arState->resampled_data_size = av_samples_get_buffer_size(&amp;arState->out_linesize,   arState->out_nb_channels,ret_num_samples,out_sample_fmt,1);&#xA;&#xA;    if (arState->resampled_data_size &lt; 0)&#xA;       {&#xA;        printf("av_samples_get_buffer_size error.\n");&#xA;        return -1;&#xA;       }&#xA;   } else {&#xA;           printf("swr_ctx null error.\n");&#xA;           return -1;&#xA;          }&#xA;&#xA;&#xA;&#xA;// copy the resampled data to the output buffer&#xA;memcpy(out_buf, arState->resampled_data[0], arState->resampled_data_size);&#xA;&#xA;&#xA;// flush the swr context&#xA;int delayed = swr_convert(arState->swr_ctx,arState->resampled_data,arState->out_nb_samples,NULL,0);&#xA;&#xA;&#xA;&#xA;if (arState->resampled_data)&#xA;   {&#xA;    av_freep(&amp;arState->resampled_data[0]);&#xA;   }&#xA;&#xA;av_freep(&amp;arState->resampled_data);&#xA;arState->resampled_data = NULL;&#xA;&#xA;int ret_data_size = arState->resampled_data_size;&#xA;&#xA;&#xA;&#xA;return ret_data_size;&#xA;}&#xA;

    &#xA;

    I also tries using the filter as shown here but my output is just noise.

    &#xA;

    This is my filter code

    &#xA;

    int  ResampleFrame(AVFrame *frame, uint8_t *out_buf)&#xA;{&#xA;   /* Push the decoded frame into the filtergraph */&#xA;    qint32 ret;&#xA;    ret = av_buffersrc_add_frame_flags(buffersrc_ctx1, frame, AV_BUFFERSRC_FLAG_KEEP_REF);&#xA;    if (ret &lt; 0) &#xA;       {&#xA;        printf("ResampleFrame: Error adding frame to buffer\n");&#xA;        // Delete input frame and return null&#xA;        av_frame_unref(frame);&#xA;        return 0;&#xA;    }&#xA;&#xA;&#xA;    //printf("resampling\n");&#xA;    AVFrame *resampled_frame = av_frame_alloc();&#xA;&#xA;&#xA;    /* Pull filtered frames from the filtergraph */&#xA;    ret = av_buffersink_get_frame(buffersink_ctx1, resampled_frame);&#xA;&#xA;    /* Set the timestamp on the resampled frame */&#xA;    resampled_frame->best_effort_timestamp = resampled_frame->pts;&#xA;&#xA;    if (ret &lt; 0) &#xA;       {&#xA;        av_frame_unref(frame);&#xA;        av_frame_unref(resampled_frame);&#xA;        return 0;&#xA;       }&#xA;&#xA;&#xA;    int buffer_size = av_samples_get_buffer_size(NULL,   2,resampled_frame->nb_samples,AV_SAMPLE_FMT_S16,1);&#xA;&#xA;    memcpy(out_buf,resampled_frame->data,buffer_size);&#xA;&#xA;    //av_frame_unref(frame);&#xA;    av_frame_unref(resampled_frame);&#xA;    return buffer_size;&#xA;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;QString filter_description1 = "aresample=48000,aformat=sample_fmts=s16:channel_layouts=stereo,asetnsamples=n=1024:p=0";&#xA;&#xA;int InitAudioFilter(AVStream *inputStream) &#xA;{&#xA;&#xA;    char args[512];&#xA;    int ret;&#xA;    const AVFilter *buffersrc = avfilter_get_by_name("abuffer");&#xA;    const AVFilter *buffersink = avfilter_get_by_name("abuffersink");&#xA;    AVFilterInOut *outputs = avfilter_inout_alloc();&#xA;    AVFilterInOut *inputs = avfilter_inout_alloc();&#xA;    filter_graph = avfilter_graph_alloc();&#xA;&#xA;&#xA;    const enum AVSampleFormat out_sample_fmts[] = {AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE};&#xA;    const int64_t out_channel_layouts[] = {AV_CH_LAYOUT_STEREO, -1};&#xA;    const int out_sample_rates[] = {48000, -1};&#xA;&#xA;    snprintf(args, sizeof(args), "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%" PRIx64,&#xA;                         inputStream->codec->time_base.num, inputStream->codec->time_base.den,&#xA;                         inputStream->codec->sample_rate,&#xA;                         av_get_sample_fmt_name(inputStream->codec->sample_fmt),&#xA;                         inputStream->codec->channel_layout);&#xA;&#xA;&#xA;    ret = avfilter_graph_create_filter(&amp;buffersrc_ctx1, buffersrc, "in", args, NULL, filter_graph);&#xA;&#xA;    if (ret &lt; 0) &#xA;       {&#xA;        printf("InitAudioFilter: Unable to create buffersrc\n");&#xA;        return -1;&#xA;       }&#xA;&#xA;    ret = avfilter_graph_create_filter(&amp;buffersink_ctx1, buffersink, "out", NULL, NULL, filter_graph);&#xA;&#xA;    if (ret &lt; 0) &#xA;       {&#xA;        printf("InitAudioFilter: Unable to create buffersink\n");&#xA;        return ret;&#xA;       }&#xA;&#xA;    // set opt SAMPLE FORMATS&#xA;    ret = av_opt_set_int_list(buffersink_ctx1, "sample_fmts", out_sample_fmts, -1, AV_OPT_SEARCH_CHILDREN);&#xA;&#xA;    if (ret &lt; 0) &#xA;       {&#xA;        printf("InitAudioFilter: Cannot set output sample format\n");&#xA;        return ret;&#xA;       }&#xA;&#xA;    // set opt CHANNEL LAYOUTS&#xA;    ret = av_opt_set_int_list(buffersink_ctx1, "channel_layouts", out_channel_layouts, -1, AV_OPT_SEARCH_CHILDREN);&#xA;&#xA;    if (ret &lt; 0) {&#xA;        printf("InitAudioFilter: Cannot set output channel layout\n");&#xA;        return ret;&#xA;    }&#xA;&#xA;    // set opt OUT SAMPLE RATES&#xA;    ret = av_opt_set_int_list(buffersink_ctx1, "sample_rates", out_sample_rates, -1, AV_OPT_SEARCH_CHILDREN);&#xA;&#xA;    if (ret &lt; 0) &#xA;       {&#xA;        printf("InitAudioFilter: Cannot set output sample rate\n");&#xA;        return ret;&#xA;       }&#xA;&#xA;    /* Endpoints for the filter graph. */&#xA;    outputs -> name = av_strdup("in");&#xA;    outputs -> filter_ctx = buffersrc_ctx1;&#xA;    outputs -> pad_idx = 0;&#xA;    outputs -> next = NULL;&#xA;&#xA;    /* Endpoints for the filter graph. */&#xA;    inputs -> name = av_strdup("out");&#xA;    inputs -> filter_ctx = buffersink_ctx1;&#xA;    inputs -> pad_idx = 0;&#xA;    inputs -> next = NULL;&#xA;&#xA;&#xA;    if ((ret = avfilter_graph_parse_ptr(filter_graph, filter_description1.toStdString().c_str(), &amp;inputs, &amp;outputs, NULL)) &lt; 0) &#xA;       {&#xA;        printf("InitAudioFilter: Could not add the filter to graph\n");&#xA;       }&#xA;&#xA;&#xA;    if ((ret = avfilter_graph_config(filter_graph, NULL)) &lt; 0) &#xA;       {&#xA;        printf("InitAudioFilter: Could not configure the graph\n");&#xA;       }&#xA;&#xA;    /* Print summary of the sink buffer&#xA;     * Note: args buffer is reused to store channel layout string */&#xA;    AVFilterLink *outlink = buffersink_ctx1->inputs[0];&#xA;    av_get_channel_layout_string(args, sizeof(args), -1, outlink->channel_layout);&#xA;&#xA;    QString str = args;&#xA;    printf("Output: srate:%dHz fmt:%s chlayout: %s\n", (int) outlink->sample_rate, &#xA;                                                      av_get_sample_fmt_name((AVSampleFormat) outlink->format),&#xA;                                                      str.toStdString().c_str());&#xA;&#xA;&#xA;    filterGraphInitialized_ = true; &#xA;}&#xA;

    &#xA;

    And since I don't have much experience with filters or audio for that matter, I'm also probably missing something here. But Can't figure out what.

    &#xA;

    Thanks

    &#xA;