Recherche avancée

Médias (9)

Mot : - Tags -/soundtrack

Autres articles (75)

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

Sur d’autres sites (13741)

  • How to modify the bit_rate of AVFormatContext ?

    27 mars 2023, par Zion Liu

    Hello,I would like to know how to modify the bit_rate of AVFormatContext.

    


    Here is the minimal reproducible example.This is a simple process for pushing rtmp video streams.Now I want to control the bitrate of the video it pushes.

    


    I tried modifying the bitrate like this, but it didn't work.

    


    AVFormatContext *ifmt_ctx = NULL, *ofmt_ctx = NULL;
int64_t bit_rate = 400*1000;
....
ofmt_ctx->bit_rate = bit_rate;


    


    Can be compiled by g++ -Wall -o -g -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/local/include -L/usr/local/lib  simplt_push_streaming.cpp -o test.out -lavformat -lavcodec -lavutil -lgobject-2.0 -lglib-2.0 -lpthread

    


    And my ffmpeg version : ffmpeg version 4.4.2-0ubuntu0.22.04.1

    


    #include &#xA;extern "C"&#xA;{&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavutil></libavutil>mathematics.h>&#xA;#include <libavutil></libavutil>time.h>&#xA;};&#xA;&#xA;int main(int argc, char* argv[])&#xA;{&#xA;    AVOutputFormat *ofmt = NULL;&#xA;    //Input AVFormatContext and Output AVFormatContext&#xA;    AVFormatContext *ifmt_ctx = NULL, *ofmt_ctx = NULL;&#xA;    AVPacket pkt;&#xA;    const char *in_filename, *out_filename;&#xA;    int ret, i;&#xA;    int videoindex=-1;&#xA;    int frame_index=0;&#xA;    int64_t start_time=0;&#xA;    int64_t bit_rate = 400*1000;&#xA;    in_filename  = "/home/zion/video/mecha.flv";// Input file URL&#xA;    out_filename = "rtmp://localhost:1935/live/test";//Output URL [RTMP]&#xA;    av_register_all();&#xA;    avformat_network_init();&#xA;    avformat_open_input(&amp;ifmt_ctx, in_filename, 0, 0);&#xA;    avformat_find_stream_info(ifmt_ctx, 0);&#xA;    for(i=0; inb_streams; i&#x2B;&#x2B;) &#xA;        if(ifmt_ctx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){&#xA;            videoindex=i;&#xA;            break;&#xA;        }&#xA;    //Output&#xA;    avformat_alloc_output_context2(&amp;ofmt_ctx, NULL, "flv", out_filename); //RTMP&#xA;    ofmt = ofmt_ctx->oformat;&#xA;    for (i = 0; i &lt; ifmt_ctx->nb_streams; i&#x2B;&#x2B;) {&#xA;        //Create output AVStream according to input AVStream&#xA;        AVStream *in_stream = ifmt_ctx->streams[i];&#xA;        AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);&#xA;        //Copy the settings of AVCodecContext&#xA;        ret = avcodec_copy_context(out_stream->codec, in_stream->codec);&#xA;        out_stream->codec->codec_tag = 0;&#xA;        if (ofmt_ctx->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;            out_stream->codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;    }&#xA;    //Open output URL&#xA;    if (!(ofmt->flags &amp; AVFMT_NOFILE)) {&#xA;        ret = avio_open(&amp;ofmt_ctx->pb, out_filename, AVIO_FLAG_WRITE);&#xA;    }&#xA;    //Write file header&#xA;    avformat_write_header(ofmt_ctx, NULL);&#xA;    start_time=av_gettime();&#xA;    while (1) {&#xA;        AVStream *in_stream, *out_stream;&#xA;        //Get an AVPacket&#xA;        ret = av_read_frame(ifmt_ctx, &amp;pkt);&#xA;        if (ret &lt; 0)&#xA;            break;&#xA;        //Important:Delay&#xA;        if(pkt.stream_index==videoindex){&#xA;            AVRational time_base=ifmt_ctx->streams[videoindex]->time_base;&#xA;            AVRational time_base_q={1,AV_TIME_BASE};&#xA;            int64_t pts_time = av_rescale_q(pkt.dts, time_base, time_base_q);&#xA;            int64_t now_time = av_gettime() - start_time;&#xA;            if (pts_time > now_time)&#xA;                av_usleep(pts_time - now_time);&#xA;        }&#xA;        in_stream  = ifmt_ctx->streams[pkt.stream_index];&#xA;        out_stream = ofmt_ctx->streams[pkt.stream_index];&#xA;        if(pkt.stream_index==videoindex){&#xA;            printf("Send %8d video frames to output URL\n",frame_index);&#xA;            frame_index&#x2B;&#x2B;;&#xA;        }&#xA;/*I tried modifying the bitrate here and I&#x27;m not sure if this is the correct usage.*/&#xA;        ofmt_ctx->bit_rate = bit_rate;&#xA;        av_interleaved_write_frame(ofmt_ctx, &amp;pkt);&#xA;        av_free_packet(&amp;pkt);&#xA;    }&#xA;    //Write file trailer&#xA;    av_write_trailer(ofmt_ctx);&#xA;end:&#xA;    avformat_close_input(&amp;ifmt_ctx);&#xA;    /* close output */&#xA;    if (ofmt_ctx &amp;&amp; !(ofmt->flags &amp; AVFMT_NOFILE))&#xA;        avio_close(ofmt_ctx->pb);&#xA;    avformat_free_context(ofmt_ctx);&#xA;    return 0;&#xA;}&#xA;

    &#xA;

  • Streaming H.264 over UDP using FFmpeg, and "dimensions not set" error

    3 septembre 2015, par Baris Demiray

    I’m trying to stream H.264 over UDP with no luck so far. Here is a minimal code that you can reproduce the problem.

    To compile,

    g++ -o test -lavcodec -lavformat -lavutil test.cpp

    Extra information, I start ffplay as follows. Currently it’s of no use.

    ffplay -i udp://127.0.0.1:8554/live.sdp

    Output of my code (see avio_open() call),

    [libx264 @ 0x6a26c0] using mv_range_thread = 24
    [libx264 @ 0x6a26c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
    [libx264 @ 0x6a26c0] profile High, level 3.1
    Output #0, h264, to 'udp://127.0.0.1:8554/live.sdp':
       Stream #0:0, 0, 0/0: Video: h264 (libx264), -1 reference frame, none, q=-1--1
    [h264 @ 0x6a2020] dimensions not set
    Cannot write header to stream: Success

    And the code,

    extern "C" {
       #include <libavcodec></libavcodec>avcodec.h>
       #include <libavformat></libavformat>avformat.h>
       #include <libavutil></libavutil>avutil.h>
    }

    #include <iostream>
    using namespace std;

    int main() {
       AVCodecContext* m_codecContext;
       AVCodec* m_codec;
       AVFormatContext* m_formatContext;
       AVStream* m_stream;

       unsigned m_outWidth = 768;
       unsigned m_outHeight = 608;

       av_register_all();
       avcodec_register_all();
       avformat_network_init();

       int errorStatus = 0;
       char errorLog[128] = { 0 };
       av_log_set_level(AV_LOG_TRACE);

       string m_output("udp://127.0.0.1:8554/live.sdp");

       if (avformat_alloc_output_context2(&amp;m_formatContext, NULL, "h264", m_output.c_str()) &lt; 0) {
           cerr &lt;&lt; "Cannot allocate output context: "
                &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
           return -1;
       }

       AVOutputFormat *m_outputFormat = m_formatContext->oformat;

       m_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
       if (!m_codec) {
           cerr &lt;&lt; "Cannot find an encoder: "
                &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
           return -1;
       }

       m_codecContext = avcodec_alloc_context3(m_codec);
       if (!m_codecContext) {
           cerr &lt;&lt; "Cannot allocate a codec context: "
                &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
           return -1;
       }

       m_codecContext->pix_fmt = AV_PIX_FMT_YUV420P;
       m_codecContext->width = m_outWidth;
       m_codecContext->height = m_outHeight;

       if (avcodec_open2(m_codecContext, m_codec, NULL) &lt; 0) {
           cerr &lt;&lt; "Cannot open codec: "
                &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
           return -1;
       }

       m_stream = avformat_new_stream(m_formatContext, m_codec);
       if (!m_stream) {
           cerr &lt;&lt; "Cannot create a new stream: "
                &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
           return -1;
       }

       av_dump_format(m_formatContext, 0, m_output.c_str(), 1);

       if ((errorStatus = avio_open(&amp;m_formatContext->pb, m_output.c_str(), AVIO_FLAG_WRITE)) &lt; 0) {
           cerr &lt;&lt; "Cannot open output: "
                &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
           return -1;
       }

       if (avformat_write_header(m_formatContext, NULL) &lt; 0) {
           cerr &lt;&lt; "Cannot write header to stream: "
                &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
           return -1;
       }

       cout &lt;&lt; "All done." &lt;&lt; endl;

       return 0;
    }
    </iostream>

    For those who has even more time to spare on my problem, when I change m_output to rtsp://127.0.0.1:8554/live.sdp, and ffplay command to ffplay -rtsp_flags listen -i rtsp://127.0.0.1:8554/live.sdp I get the error,

    [libx264 @ 0x1e056c0] using mv_range_thread = 24
    [libx264 @ 0x1e056c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
    [libx264 @ 0x1e056c0] profile High, level 3.1
    Output #0, h264, to 'rtsp://127.0.0.1:8554/live.sdp':
       Stream #0:0, 0, 0/0: Video: h264 (libx264), -1 reference frame, none, q=-1--1
    Cannot open output: Protocol not found

    Am I naive to expect that streaming protocol will be changed like this ?

  • Puzzled with file descriptor in Bash (ffmpeg video capture)

    3 mai 2020, par ChrisAga

    I am trying to use file descriptors in Bash and found a problem I cannot solve.&#xA;I have to read a video stream coming from the standard output of a command executed in a coproc. This piece of code works as expected :

    &#xA;&#xA;

    ffmpeg \&#xA;    -i &lt;(exec cat &lt;&amp;${COPROC[0]}) \&#xA;    -c:v $ENCODE_VIDEO_FORMAT_LOSSLESS $ENCODE_VIDEO_OPTIONS_LOSSLESS \&#xA;    -c:a copy \&#xA;    -progress /dev/fd/1 \&#xA;    "${capfile}"&#xA;

    &#xA;&#xA;

    But the cat process is not really useful since ffmpeg -i pipe:<file descriptor="descriptor"></file> seems to do the same. So I tried the following code which fails with pipe:63: Bad file descriptor&#xA; error.

    &#xA;&#xA;

    ffmpeg \&#xA;    -i pipe:"${COPROC[0]}" \&#xA;    -c:v $ENCODE_VIDEO_FORMAT_LOSSLESS $ENCODE_VIDEO_OPTIONS_LOSSLESS \&#xA;    -c:a copy \&#xA;    -progress /dev/fd/1 \&#xA;    "${capfile}"&#xA;

    &#xA;&#xA;

    The actual script is something a bit complicated but here is a minimal testing code for this issue :

    &#xA;&#xA;

    #!/bin/bash&#xA;#&#xA;&#xA;ENCODE_VIDEO_FORMAT_LOSSLESS=ffv1&#xA;ENCODE_VIDEO_OPTIONS_LOSSLESS="-level 3 -threads 7 -coder 1 -context 1 -g 1 -slices 30 -slicecrc 1"&#xA;&#xA;capfile=capure.mkv&#xA;&#xA;coproc ffmpeg  -i file:&#x27;Camomille.mkv&#x27; -c:v copy -c:a copy -f matroska pipe:1&#xA;&#xA;capture_fd=${COPROC[0]}&#xA;echo "hk_capture_pid=${COPROC_PID}"&#xA;&#xA;ffmpeg \&#xA;    -i pipe:${COPROC[0]} \&#xA;    -c:v $ENCODE_VIDEO_FORMAT_LOSSLESS $ENCODE_VIDEO_OPTIONS_LOSSLESS \&#xA;    -c:a copy \&#xA;    -progress /dev/fd/1 \&#xA;    "${capfile}"&#xA;

    &#xA;&#xA;

    This is the output of the second ffmpeg command :

    &#xA;&#xA;

    ffmpeg version 4.1.4-1build2 Copyright (c) 2000-2019 the FFmpeg developers&#xA;  built with gcc 9 (Ubuntu 9.2.1-4ubuntu1)&#xA;  configuration: --prefix=/usr --extra-version=1build2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared&#xA;  libavutil      56. 22.100 / 56. 22.100&#xA;  libavcodec     58. 35.100 / 58. 35.100&#xA;  libavformat    58. 20.100 / 58. 20.100&#xA;  libavdevice    58.  5.100 / 58.  5.100&#xA;  libavfilter     7. 40.101 /  7. 40.101&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  3.100 /  5.  3.100&#xA;  libswresample   3.  3.100 /  3.  3.100&#xA;  libpostproc    55.  3.100 / 55.  3.100&#xA;pipe:63: Bad file descriptor&#xA;av_interleaved_write_frame(): Broken pipe                                                                                       &#xA;Error writing trailer of pipe:1: Broken pipe                                                                                    &#xA;frame=    4 fps=0.0 q=-1.0 Lsize=      48kB time=00:00:00.03 bitrate=10051.1kbits/s speed=3.44x    &#xA;video:86kB audio:1kB subtitle:0kB other streams:0kB global headers:2kB muxing overhead: unknown&#xA;Conversion failed!&#xA;

    &#xA;&#xA;

    This one fails and if you replace -i pipe:${COPROC[0]} by -i &lt;(exec cat &lt;&amp;${COPROC[0]}) a capture.mkv file is created.

    &#xA;&#xA;

    I run ubuntu eoan and bash version is : GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu). I upgraded several times since I started with this issue, so it wouldn't be related too much to bash and ffmpeg versions.

    &#xA;&#xA;

    If someone can point me to what I do wrong with bash file descriptors I would be grateful.

    &#xA;