<div dir="ltr"><p dir="ltr" class="gmail_msg">On Sun, 30 Oct 2016 18:33 NITIN GOYAL <<a href="mailto:nitinkumgoyal@gmail.com" class="gmail_msg" target="_blank">nitinkumgoyal@gmail.com</a>> wrote:<br></p><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg">RTP payload 96,97 are dynamic payloads and can be assigned as needed. RFC 2833<br class="gmail_msg"><br class="gmail_msg"></div>in general when we have both video and audio, Video goes for 96 while audio goes for 97.<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"></div></div><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg">On Wed, Oct 26, 2016 at 7:08 AM, Yu Ang Tan <span dir="ltr" class="gmail_msg"><<a href="mailto:yuang86@gmail.com" class="gmail_msg" target="_blank">yuang86@gmail.com</a>></span> wrote:<br class="gmail_msg"></div></div><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="m_7173668711995481279m_-2851251663684845875h5 gmail_msg"><div class="gmail_msg">On Thu, Sep 22, 2016 at 11:46 AM Yu Ang Tan <<a href="mailto:yuang86@gmail.com" class="gmail_msg" target="_blank">yuang86@gmail.com</a>> wrote:<br class="gmail_msg"></div></div></div><div class="gmail_quote gmail_msg"><div class="gmail_msg"><div class="m_7173668711995481279m_-2851251663684845875h5 gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">I want to create an rtp audio stream with ffmpeg. When I run my application I get the following SDP file configuration: </div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    Output #0, rtp, to 'rtp://<a href="http://127.0.0.1:8554" class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg" target="_blank">127.0.0.1:8554</a>':</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        Stream #0:0: Audio: pcm_s16be, 8000 Hz, stereo, s16, 256 kb/s</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        </div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    SDP:    </div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    v=0</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    o=- 0 0 IN IP4 127.0.0.1</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    s=No Name</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    c=IN IP4 127.0.0.1</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    t=0 0</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    a=tool:libavformat 57.25.101</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    m=audio 8554 RTP/AVP 96</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    b=AS:256</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    a=rtpmap:96 L16/8000/2</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">However, when I try to read it with `ffplay -i test.sdp -protocol_whitelist file,udp,rtp`, it fails,shows the following:</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    ffplay version N-78598-g98a0053 Copyright (c) 2003-2016 the FFmpeg developers</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      built with gcc 5.3.0 (GCC)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --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-decklink --enable-zlib</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libavutil      55. 18.100 / 55. 18.100</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libavcodec     57. 24.103 / 57. 24.103</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libavformat    57. 25.101 / 57. 25.101</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libavdevice    57.  0.101 / 57.  0.101</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libavfilter     6. 34.100 /  6. 34.100</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libswscale      4.  0.100 /  4.  0.100</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libswresample   2.  0.101 /  2.  0.101</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">      libpostproc    54.  0.100 / 54.  0.100</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        (...waits indefinitely.)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">The only way to make it work again is to modify the payload type in the SDP file from 96 to 97. Can someone tell me why? Where and how is this number defined?</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        </div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">Here is my source. </div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <math.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    extern "C"</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavutil/opt.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavcodec/avcodec.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavutil/channel_layout.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavutil/common.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavutil/imgutils.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavutil/mathematics.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavutil/samplefmt.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    #include <libavformat/avformat.h></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    static int write_frame(AVFormatContext *fmt_ctx, const AVRational *time_base, AVStream *st, AVPacket *pkt)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* rescale output packet timestamp values from codec to stream timebase */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        av_packet_rescale_ts(pkt, *time_base, st->time_base);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* Write the compressed frame to the media file. */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        return av_interleaved_write_frame(fmt_ctx, pkt);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    /*</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    * Audio encoding example</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    static void audio_encode_example(const char *filename)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        AVPacket pkt;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        int i, j, k, ret, got_output;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        int buffer_size;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        uint16_t *samples;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        float t, tincr;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        AVCodec *outCodec = NULL;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        AVCodecContext *outCodecCtx = NULL;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        AVFormatContext *outFormatCtx = NULL;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        AVStream * outAudioStream = NULL;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        AVFrame *outFrame = NULL;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        ret = avformat_alloc_output_context2(&outFormatCtx, NULL, "rtp", filename);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (!outFormatCtx || ret < 0)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Could not allocate output context");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outFormatCtx->flags |= AVFMT_FLAG_NOBUFFER | AVFMT_FLAG_FLUSH_PACKETS;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outFormatCtx->oformat->audio_codec = AV_CODEC_ID_PCM_S16BE;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* find the encoder */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outCodec = avcodec_find_encoder(outFormatCtx->oformat->audio_codec);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (!outCodec) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Codec not found\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outAudioStream = avformat_new_stream(outFormatCtx, outCodec);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (!outAudioStream)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Cannot add new audio stream\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outAudioStream->id = outFormatCtx->nb_streams - 1;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outCodecCtx = outAudioStream->codec;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outCodecCtx->sample_fmt = AV_SAMPLE_FMT_S16;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* select other audio parameters supported by the encoder */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outCodecCtx->sample_rate = 8000;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outCodecCtx->channel_layout = AV_CH_LAYOUT_STEREO;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outCodecCtx->channels = 2;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* open it */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (avcodec_open2(outCodecCtx, outCodec, NULL) < 0) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Could not open codec\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        // PCM has no frame, so we have to explicitly specify</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outCodecCtx->frame_size = 1152;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        av_dump_format(outFormatCtx, 0, filename, 1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        char buff[10000] = { 0 };</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        ret = av_sdp_create(&outFormatCtx, 1, buff, sizeof(buff));</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        printf("%s", buff);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        ret = avio_open2(&outFormatCtx->pb, filename, AVIO_FLAG_WRITE, NULL, NULL);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        ret = avformat_write_header(outFormatCtx, NULL);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        printf("ret = %d\n", ret);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (ret <0) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* frame containing input audio */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outFrame = av_frame_alloc();</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (!outFrame) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Could not allocate audio frame\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outFrame->nb_samples = outCodecCtx->frame_size;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outFrame->format = outCodecCtx->sample_fmt;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        outFrame->channel_layout = outCodecCtx->channel_layout;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* we calculate the size of the samples buffer in bytes */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        buffer_size = av_samples_get_buffer_size(NULL, outCodecCtx->channels, outCodecCtx->frame_size,</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            outCodecCtx->sample_fmt, 0);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (buffer_size < 0) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Could not get sample buffer size\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        samples = (uint16_t*)av_malloc(buffer_size);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (!samples) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Could not allocate %d bytes for samples buffer\n",</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                buffer_size);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* setup the data pointers in the AVFrame */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        ret = avcodec_fill_audio_frame(outFrame, outCodecCtx->channels, outCodecCtx->sample_fmt,</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            (const uint8_t*)samples, buffer_size, 0);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        if (ret < 0) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            fprintf(stderr, "Could not setup audio frame\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* encode a single tone sound */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        t = 0;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        int next_pts = 0;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        tincr = 2 * M_PI * 440.0 / outCodecCtx->sample_rate;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        for (i = 0; i < 400000; i++) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            av_init_packet(&pkt);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            pkt.data = NULL; // packet data will be allocated by the encoder</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            pkt.size = 0;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            for (j = 0; j < outCodecCtx->frame_size; j++) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                samples[2 * j] = (uint16_t)(sin(t) * 10000);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                for (k = 1; k < outCodecCtx->channels; k++)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                    samples[2 * j + k] = samples[2 * j];</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                t += tincr;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            t = (t > 50000) ? 0 : t;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            // Sets time stamp</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            next_pts += outFrame->nb_samples;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            outFrame->pts = next_pts;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            /* encode the samples */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            ret = avcodec_encode_audio2(outCodecCtx, &pkt, outFrame, &got_output);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            if (ret < 0) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                fprintf(stderr, "Error encoding audio frame\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            if (got_output) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                write_frame(outFormatCtx, &outCodecCtx->time_base, outAudioStream, &pkt);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                av_packet_unref(&pkt);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            printf("i:%d\n", i); // waste some time to avoid over-filling jitter buffer</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            printf("Audio: %d\t%d\n", samples[0], samples[1]); // waste some time to avoid over-filling jitter buffer</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            printf("t: %f\n", t); // waste some time to avoid over-filling jitter buffer</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        /* get the delayed frames */</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        for (got_output = 1; got_output; i++) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            ret = avcodec_encode_audio2(outCodecCtx, &pkt, NULL, &got_output);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            if (ret < 0) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                fprintf(stderr, "Error encoding frame\n");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                exit(1);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            if (got_output) {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                pkt.pts = AV_NOPTS_VALUE;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                write_frame(outFormatCtx, &outCodecCtx->time_base, outAudioStream, &pkt);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">                av_packet_unref(&pkt);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">            }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        av_freep(&samples);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        av_frame_free(&outFrame);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        avcodec_close(outCodecCtx);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        av_free(outCodecCtx);</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    int main(int argc, char **argv)</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    {</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        const char *output;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        av_register_all();</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        avformat_network_init(); // for network streaming</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        audio_encode_example("rtp://<a href="http://127.0.0.1:8554" class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg" target="_blank">127.0.0.1:8554</a>");</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">        return 0;</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    }</div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg">    </div><div class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"><br class="m_7173668711995481279m_-2851251663684845875m_3508128631372750474gmail_msg gmail_msg"></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div><span style="font-size:13px" class="gmail_msg">Interestingly, the same code when compiled in Linux Ubuntu gives the following:</span><div style="font-size:13px" class="gmail_msg"><br class="gmail_msg"></div><div style="font-size:13px" class="gmail_msg"><span class="gmail_msg"><div class="gmail_msg">Output #0, rtp, to 'rtp://<a href="http://127.0.0.1:8554" class="gmail_msg" target="_blank">127.0.0.1:8554</a>':</div></span><div class="gmail_msg">    Stream #0:0: Unknown: none (pcm_s16be)</div><span class="gmail_msg"><div class="gmail_msg">v=0</div><div class="gmail_msg">o=- 0 0 IN IP4 127.0.0.1</div><div class="gmail_msg">s=No Name</div><div class="gmail_msg">c=IN IP4 127.0.0.1</div><div class="gmail_msg">t=0 0</div></span><div class="gmail_msg">a=tool:libavformat 57.48.100</div><div class="gmail_msg">m=application 8554 RTP/AVP 3</div></div><div style="font-size:13px" class="gmail_msg"><br class="gmail_msg"></div><div style="font-size:13px" class="gmail_msg">I noticed that the Output stream is now labeled as "Unknown". And in the SDP dump, the media name is switched from audio to application. RTP/AVP is now 3 instead of 96/97. What's going on?</div><div style="font-size:13px" class="gmail_msg"><br class="gmail_msg"></div><div style="font-size:13px" class="gmail_msg">Would really appreciate it if any of you could shine some light on this.</div><div class="gmail_msg"> </div></div></div>
<br class="gmail_msg"></blockquote></div></div><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">_______________________________________________<br class="gmail_msg">
Libav-user mailing list<br class="gmail_msg">
<a href="mailto:Libav-user@ffmpeg.org" class="gmail_msg" target="_blank">Libav-user@ffmpeg.org</a><br class="gmail_msg">
<a href="http://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" class="gmail_msg" target="_blank">http://ffmpeg.org/mailman/listinfo/libav-user</a><br class="gmail_msg">
<br class="gmail_msg"></blockquote></div><br class="gmail_msg"></div>
_______________________________________________<br class="gmail_msg">
Libav-user mailing list<br class="gmail_msg">
<a href="mailto:Libav-user@ffmpeg.org" class="gmail_msg" target="_blank">Libav-user@ffmpeg.org</a><br class="gmail_msg">
<a href="http://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" class="gmail_msg" target="_blank">http://ffmpeg.org/mailman/listinfo/libav-user</a></blockquote><div><br></div><p dir="ltr" class="gmail_msg">Fair enough. But how do I assign the payload ID? In Ubuntu, the RTP/AVP is 3 instead of 96/97 and using ffplay didn't work. Should I be manually specifying the SDP file, differently from the SDP dump?</p><div>Thanks,</div><div>Ang </div></div></div>