Recherche avancée

Médias (3)

Mot : - Tags -/plugin

Autres articles (54)

  • Qu’est ce qu’un éditorial

    21 juin 2013, par

    Ecrivez votre de point de vue dans un article. Celui-ci sera rangé dans une rubrique prévue à cet effet.
    Un éditorial est un article de type texte uniquement. Il a pour objectif de ranger les points de vue dans une rubrique dédiée. Un seul éditorial est placé à la une en page d’accueil. Pour consulter les précédents, consultez la rubrique dédiée.
    Vous pouvez personnaliser le formulaire de création d’un éditorial.
    Formulaire de création d’un éditorial Dans le cas d’un document de type éditorial, les (...)

  • Librairies et logiciels spécifiques aux médias

    10 décembre 2010, par

    Pour un fonctionnement correct et optimal, plusieurs choses sont à prendre en considération.
    Il est important, après avoir installé apache2, mysql et php5, d’installer d’autres logiciels nécessaires dont les installations sont décrites dans les liens afférants. Un ensemble de librairies multimedias (x264, libtheora, libvpx) utilisées pour l’encodage et le décodage des vidéos et sons afin de supporter le plus grand nombre de fichiers possibles. Cf. : ce tutoriel ; FFMpeg avec le maximum de décodeurs et (...)

  • Multilang : améliorer l’interface pour les blocs multilingues

    18 février 2011, par

    Multilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
    Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela.

Sur d’autres sites (11003)

  • Why do I get a EXC_BAD_ACCESS error while running a simple sws_scale function ? [closed]

    3 décembre 2022, par Vish

    All I'm trying to do is decode a video using ffmpeg, and change format from YUV to RGBA using sws_scale. The code is as follows :

    


    `

    


    #include "video_reader.hpp"&#xA;#include &#xA;#include <iostream>&#xA;&#xA;using namespace std;&#xA;&#xA;// av_err2str returns a temporary array. This doesn&#x27;t work in gcc.&#xA;// This function can be used as a replacement for av_err2str.&#xA;static const char* av_make_error(int errnum) {&#xA;    static char str[AV_ERROR_MAX_STRING_SIZE];&#xA;    memset(str, 0, sizeof(str));&#xA;    return av_make_error_string(str, AV_ERROR_MAX_STRING_SIZE, errnum);&#xA;}&#xA;&#xA;static AVPixelFormat correct_for_deprecated_pixel_format(AVPixelFormat pix_fmt) {&#xA;    // Fix swscaler deprecated pixel format warning&#xA;    // (YUVJ has been deprecated, change pixel format to regular YUV)&#xA;    switch (pix_fmt) {&#xA;        case AV_PIX_FMT_YUVJ420P: return AV_PIX_FMT_YUV420P;&#xA;        case AV_PIX_FMT_YUVJ422P: return AV_PIX_FMT_YUV422P;&#xA;        case AV_PIX_FMT_YUVJ444P: return AV_PIX_FMT_YUV444P;&#xA;        case AV_PIX_FMT_YUVJ440P: return AV_PIX_FMT_YUV440P;&#xA;        default:                  return pix_fmt;&#xA;    }&#xA;}&#xA;&#xA;bool video_reader_open(VideoReaderState* state, const char* filename) {&#xA;&#xA;    // Unpack members of state&#xA;    auto&amp; width = state->width;&#xA;    auto&amp; height = state->height;&#xA;    auto&amp; time_base = state->time_base;&#xA;    auto&amp; av_format_ctx = state->av_format_ctx;&#xA;    auto&amp; av_codec_ctx = state->av_codec_ctx;&#xA;    auto&amp; video_stream_index = state->video_stream_index;&#xA;    auto&amp; av_frame = state->av_frame;&#xA;    auto&amp; av_packet = state->av_packet;&#xA;&#xA;    // Open the file using libavformat&#xA;    av_format_ctx = avformat_alloc_context();&#xA;    if (!av_format_ctx) {&#xA;        printf("Couldn&#x27;t created AVFormatContext\n");&#xA;        return false;&#xA;    }&#xA;&#xA;    if (avformat_open_input(&amp;av_format_ctx, filename, NULL, NULL) != 0) {&#xA;        printf("Couldn&#x27;t open video file\n");&#xA;        return false;&#xA;    }&#xA;&#xA;    // Find the first valid video stream inside the file&#xA;    video_stream_index = -1;&#xA;    AVCodecParameters* av_codec_params;&#xA;    AVCodec* av_codec;&#xA;    for (int i = 0; i &lt; av_format_ctx->nb_streams; &#x2B;&#x2B;i) {&#xA;        av_codec_params = av_format_ctx->streams[i]->codecpar;&#xA;        if (!avcodec_find_decoder(av_codec_params->codec_id)) {&#xA;            continue;&#xA;        }&#xA;        if (av_codec_params->codec_type == AVMEDIA_TYPE_VIDEO) {&#xA;            video_stream_index = i;&#xA;            width = av_codec_params->width;&#xA;            height = av_codec_params->height;&#xA;            time_base = av_format_ctx->streams[i]->time_base;&#xA;            break;&#xA;        }&#xA;    }&#xA;    if (video_stream_index == -1) {&#xA;        printf("Couldn&#x27;t find valid video stream inside file\n");&#xA;        return false;&#xA;    }&#xA;&#xA;    // Set up a codec context for the decoder&#xA;    av_codec_ctx = avcodec_alloc_context3(avcodec_find_decoder(av_codec_params->codec_id));&#xA;    if (!av_codec_ctx) {&#xA;        printf("Couldn&#x27;t create AVCodecContext\n");&#xA;        return false;&#xA;    }&#xA;    if (avcodec_parameters_to_context(av_codec_ctx, av_codec_params) &lt; 0) {&#xA;        printf("Couldn&#x27;t initialize AVCodecContext\n");&#xA;        return false;&#xA;    }&#xA;    if (avcodec_open2(av_codec_ctx, avcodec_find_decoder(av_codec_params->codec_id), NULL) &lt; 0) {&#xA;        printf("Couldn&#x27;t open codec\n");&#xA;        return false;&#xA;    }&#xA;&#xA;    av_frame = av_frame_alloc();&#xA;    if (!av_frame) {&#xA;        printf("Couldn&#x27;t allocate AVFrame\n");&#xA;        return false;&#xA;    }&#xA;    av_packet = av_packet_alloc();&#xA;    if (!av_packet) {&#xA;        printf("Couldn&#x27;t allocate AVPacket\n");&#xA;        return false;&#xA;    }&#xA;&#xA;    return true;&#xA;}&#xA;&#xA;bool video_reader_read_frame(VideoReaderState* state, uint8_t* frame_buffer, int64_t* pts) {&#xA;&#xA;    // Unpack members of state&#xA;    auto&amp; width = state->width;&#xA;    auto&amp; height = state->height;&#xA;    auto&amp; av_format_ctx = state->av_format_ctx;&#xA;    auto&amp; av_codec_ctx = state->av_codec_ctx;&#xA;    auto&amp; video_stream_index = state->video_stream_index;&#xA;    auto&amp; av_frame = state->av_frame;&#xA;    auto&amp; av_packet = state->av_packet;&#xA;    auto&amp; sws_scaler_ctx = state->sws_scaler_ctx;&#xA;&#xA;    // Decode one frame&#xA;    int response;&#xA;    while (av_read_frame(av_format_ctx, av_packet) >= 0) {&#xA;        if (av_packet->stream_index != video_stream_index) {&#xA;            av_packet_unref(av_packet);&#xA;            continue;&#xA;        }&#xA;&#xA;        response = avcodec_send_packet(av_codec_ctx, av_packet);&#xA;        if (response &lt; 0) {&#xA;            printf("Failed to decode packet: %s\n", av_make_error(response));&#xA;            return false;&#xA;        }&#xA;&#xA;        response = avcodec_receive_frame(av_codec_ctx, av_frame);&#xA;        if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {&#xA;            av_packet_unref(av_packet);&#xA;            continue;&#xA;        } else if (response &lt; 0) {&#xA;            printf("Failed to decode packet: %s\n", av_make_error(response));&#xA;            return false;&#xA;        }&#xA;&#xA;        av_packet_unref(av_packet);&#xA;        break;&#xA;    }&#xA;&#xA;    *pts = av_frame->pts;&#xA;    &#xA;&#xA;    // Set up sws scaler&#xA;    if (!sws_scaler_ctx) {&#xA;        auto source_pix_fmt = correct_for_deprecated_pixel_format(av_codec_ctx->pix_fmt);&#xA;        sws_scaler_ctx = sws_getContext(width, height, AV_PIX_FMT_YUV420P,&#xA;                                        width, height, AV_PIX_FMT_RGB0,&#xA;                                        SWS_FAST_BILINEAR, NULL, NULL, NULL);&#xA;    }&#xA;    if (!sws_scaler_ctx) {&#xA;        printf("Couldn&#x27;t initialize sw scaler\n");&#xA;        return false;&#xA;    }&#xA;&#xA;    cout &lt;&lt; av_codec_ctx->pix_fmt &lt;&lt; endl;&#xA;    uint8_t* dest[4] = { frame_buffer, NULL, NULL, NULL };&#xA;    int dest_linesize[4] = { width * 4, 0, 0, 0 };&#xA;    sws_scale(sws_scaler_ctx, av_frame->data, av_frame->linesize, 0, av_frame->height, dest, dest_linesize);&#xA;&#xA;    return true;&#xA;}&#xA;&#xA;bool video_reader_seek_frame(VideoReaderState* state, int64_t ts) {&#xA;    &#xA;    // Unpack members of state&#xA;    auto&amp; av_format_ctx = state->av_format_ctx;&#xA;    auto&amp; av_codec_ctx = state->av_codec_ctx;&#xA;    auto&amp; video_stream_index = state->video_stream_index;&#xA;    auto&amp; av_packet = state->av_packet;&#xA;    auto&amp; av_frame = state->av_frame;&#xA;    &#xA;    av_seek_frame(av_format_ctx, video_stream_index, ts, AVSEEK_FLAG_BACKWARD);&#xA;&#xA;    // av_seek_frame takes effect after one frame, so I&#x27;m decoding one here&#xA;    // so that the next call to video_reader_read_frame() will give the correct&#xA;    // frame&#xA;    int response;&#xA;    while (av_read_frame(av_format_ctx, av_packet) >= 0) {&#xA;        if (av_packet->stream_index != video_stream_index) {&#xA;            av_packet_unref(av_packet);&#xA;            continue;&#xA;        }&#xA;&#xA;        response = avcodec_send_packet(av_codec_ctx, av_packet);&#xA;        if (response &lt; 0) {&#xA;            printf("Failed to decode packet: %s\n", av_make_error(response));&#xA;            return false;&#xA;        }&#xA;&#xA;        response = avcodec_receive_frame(av_codec_ctx, av_frame);&#xA;        if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {&#xA;            av_packet_unref(av_packet);&#xA;            continue;&#xA;        } else if (response &lt; 0) {&#xA;            printf("Failed to decode packet: %s\n", av_make_error(response));&#xA;            return false;&#xA;        }&#xA;&#xA;        av_packet_unref(av_packet);&#xA;        break;&#xA;    }&#xA;&#xA;    return true;&#xA;}&#xA;&#xA;void video_reader_close(VideoReaderState* state) {&#xA;    sws_freeContext(state->sws_scaler_ctx);&#xA;    avformat_close_input(&amp;state->av_format_ctx);&#xA;    avformat_free_context(state->av_format_ctx);&#xA;    av_frame_free(&amp;state->av_frame);&#xA;    av_packet_free(&amp;state->av_packet);&#xA;    avcodec_free_context(&amp;state->av_codec_ctx);&#xA;}&#xA;&#xA;</iostream>

    &#xA;

    `&#xA;This gives me the following error at the sws_scale step, during debugging. Could you please let me know what it is I could be doing wrong ?

    &#xA;

    EXC_BAD_ACCESS (code=1, address=0x910043e491224463)

    &#xA;

    I was expecting to get the RGBA array as shown in various tutorials.

    &#xA;

  • Media Source Extensions - Identifying when there is no more data

    8 octobre 2015, par galbarm

    I’m creating a fragmented MP4 of a real-time live content with constant 10FPS but occasionally a frame gets dropped before being feed to the MP4 creation process.
    The MP4 is transmitted to the web through a web socket.

    Due to the occasional frames drop, the playback speed of the file is effectively slightly greater than 1x, because the player plays at 10FPS.
    Since this is a live content, after some duration, the player reaches the present time and has no data to play.

    Now, to the MSE issue :
    What seems to happen in Chrome, when the player doesn’t have enough data to continue playing, is that it pauses for 1-2 secs, then plays it very fast, and vice versa. So at this point the user experience becomes very bad.
    The issue was discussed here :
    https://www.w3.org/Bugs/Public/show_bug.cgi?id=28379

    My idea to workaround this, is to identify the state (having no more data), change playback rate to 0.9 for a few seconds to allow some buffering, and then switch back to 1.0.
    The problem is that I couldn’t find a way to identify the state.
    The readystate of the media element seems to always have the value of "HAVE_ENOUGH_DATA" even when the issue starts.

    Does the MSE API exposes a way identify the state that I have described ?

  • Core : Focus invalid element when validating a custom set of inputs

    16 décembre 2014, par Maks3w
    Core : Focus invalid element when validating a custom set of inputs
    

    Invalid element is not focused when validate a custom set of inputs and
    the last one is a valid input. The issue is element method, via
    prepareElement method, via reset method, resets errorList state after
    validate each input so the global state of the validator is not
    preserved.

    Closes #1327