<div dir="ltr"><div><div>I use the `av_sdp_create()` to generate my SDP file but I think somethings is wrong. Here is the output:</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">    </span>Output #0, rtp, to 'rtp://<a href="http://127.0.0.1:8554">127.0.0.1:8554</a>':</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>Stream #0:0: Audio: vorbis (libvorbis), 44100 Hz, stereo, fltp, 64 kb/s</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>v=0</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>o=- 0 0 IN IP4 127.0.0.1</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>s=No Name</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>c=IN IP4 127.0.0.1</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>t=0 0</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>a=tool:libavformat 57.25.101</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>m=audio 8554 RTP/AVP 96</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>b=AS:64</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>a=rtpmap:96 vorbis/44100/2</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>a=fmtp:96 configuration=AAAAAf7Nug7RAh4AAXZvcmJpcwAAAAACRKwAAP////8A+gAA/////7gBBXZvcmJpcyFCQ1YBAAABABhjVClGmVLSSokZc5QxRplikkqJpYQWQkidcxRTqTnXnGusubUghBAaU1ApBZlSjlJpGWOQKQWZUhBLSSV0EjonnWMQW0nB1phri0G2HIQNmlJMKcSUUopCCBlTjCnFlFJKQgcldA465hxTjkooQbicc6u1lpZji6l0kkrnJGRMQkgphZJKB6VTTkJINZbWUikdc1JSakHoIIQQQrYghA2C0JBVAAABAMBAEBqyCgBQAAAQiqEYigKEhqwCADIAAASgKI7iKI4jOZJjSRYQGrIKAAACABAAAMBwFEmRFMmxJEvSLEvTRFFVfdU2VVX2dV3XdV3XdSA0ZBUAAAEAQEinmaUaIMIMZBgIDVkFACAAAABGKMIQA0JDVgEAAAEAAGIoOYgmtOZ8c46DZjloKsXmdHAi1eZJbirm5pxzzjknm3PGOOecc4pyZjFoJrTmnHMSg2YpaCa05pxznsTmQWuqtOacc8Y5p4NxRhjnnHOatOZBajbW5pxzFrSmOWouxeaccyLl5kltLtXmnHPOOeecc84555xzqhenc3BOOOecc6L25lpuQhfnnHM+Gad7c0I455xzzjnnnHPOOeecc4LQkFUAABAAAEEYNoZxpyBIn6OBGEWIacikB92jwyRoDHIKqUejo5FS6iCUVMZJKZ0gNGQVAAAIAAAhhBRSSCGFFFJIIYUUUoghhhhiyCmnnIIKKqmkoooyyiyzzDLLLLPMMuuws8467DDEEEMMrbQSS0211VhjrbnnnG</div><div><br></div><div>If I try to use the SDP file anyway, I get the following message:</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>>ffplay -i test2.sdp -protocol_whitelist file,udp,rtp</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>ffplay version N-78598-g98a0053 Copyright (c) 2003-2016 the FFmpeg developers</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>  built with gcc 5.3.0 (GCC)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>  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><span class="Apple-tab-span" style="white-space:pre">      </span>  libavutil      55. 18.100 / 55. 18.100</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>  libavcodec     57. 24.103 / 57. 24.103</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>  libavformat    57. 25.101 / 57. 25.101</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>  libavdevice    57.  0.101 / 57.  0.101</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>  libavfilter     6. 34.100 /  6. 34.100</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>  libswscale      4.  0.100 /  4.  0.100</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>  libswresample   2.  0.101 /  2.  0.101</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>  libpostproc    54.  0.100 / 54.  0.100</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[NULL @ 05aea880] Bad packed header lengths (30,0,616,3793) f=0/0</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>[vorbis @ 05aea880] Extradata missing.</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>[sdp @ 05ad7ec0] Failed to open codec in av_find_stream_info</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0</div><div><br></div><div><br></div><div>Am I overlooking something important? Am I going about this the wrong way? Any help would be much appreciated.</div><div><br></div><div>Here is my source:</div><div><span class="Apple-tab-span" style="white-space:pre">     </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>#include "stdafx.h"</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#include <math.h></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>extern "C"</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>#include <libavutil/opt.h></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>#include <libavcodec/avcodec.h></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#include <libavutil/channel_layout.h></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>#include <libavutil/common.h></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>#include <libavutil/imgutils.h></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#include <libavutil/mathematics.h></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>#include <libavutil/samplefmt.h></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>#include <libavformat/avformat.h></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>/* check that a given sample format is supported by the encoder */</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>static int check_sample_fmt(AVCodec *codec, enum AVSampleFormat sample_fmt)</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>const enum AVSampleFormat *p = codec->sample_fmts;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">               </span>while (*p != AV_SAMPLE_FMT_NONE) {</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>if (*p == sample_fmt)</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>return 1;</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>p++;</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>/* just pick the highest supported samplerate */</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>static int select_sample_rate(AVCodec *codec)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>const int *p;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>int best_samplerate = 0;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">            </span>if (!codec->supported_samplerates)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>return 44100;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">               </span>p = codec->supported_samplerates;</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>while (*p) {</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span>best_samplerate = FFMAX(*p, best_samplerate);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>p++;</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>return best_samplerate;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>/* select layout with the highest channel count */</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>static int select_channel_layout(AVCodec *codec)</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>const uint64_t *p;</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>uint64_t best_ch_layout = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>int best_nb_channels = 0;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>if (!codec->channel_layouts)</div><div><span class="Apple-tab-span" style="white-space:pre">                      </span>return AV_CH_LAYOUT_STEREO;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">         </span>p = codec->channel_layouts;</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>while (*p) {</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span>int nb_channels = av_get_channel_layout_nb_channels(*p);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>if (nb_channels > best_nb_channels) {</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>best_ch_layout = *p;</div><div><span class="Apple-tab-span" style="white-space:pre">                         </span>best_nb_channels = nb_channels;</div><div><span class="Apple-tab-span" style="white-space:pre">                      </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>p++;</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>return best_ch_layout;</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>}</div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>static int write_frame(AVFormatContext *fmt_ctx, const AVRational *time_base, AVStream *st, AVPacket *pkt)</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>/* rescale output packet timestamp values from codec to stream timebase */</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>av_packet_rescale_ts(pkt, *time_base, st->time_base);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>/* Write the compressed frame to the media file. */</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>return av_interleaved_write_frame(fmt_ctx, pkt);</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>/*</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>* Audio encoding example</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>*/</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>static void audio_encode_example(const char *filename)</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>AVPacket pkt;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>int i, j, k, ret, got_output;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>int buffer_size;</div><div><span class="Apple-tab-span" style="white-space:pre">             </span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>uint16_t *samples;</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>float t, tincr;</div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">            </span>AVCodec *outCodec = NULL;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>AVCodecContext *outCodecCtx = NULL;</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>AVFormatContext *outFormatCtx = NULL;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>AVStream * outAudioStream = NULL;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>AVFrame *outFrame = NULL;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>ret = avformat_alloc_output_context2(&outFormatCtx, NULL, "rtp", filename);</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>if (!outFormatCtx || ret < 0)</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>fprintf(stderr, "Could not allocate output context");</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>outFormatCtx->flags |= AVFMT_FLAG_NOBUFFER | AVFMT_FLAG_FLUSH_PACKETS;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>outFormatCtx->max_interleave_delta = 1;</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>outFormatCtx->oformat->audio_codec = AV_CODEC_ID_VORBIS;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">              </span>/* find the encoder */</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>outCodec = avcodec_find_encoder(outFormatCtx->oformat->audio_codec);</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>if (!outCodec) {</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>fprintf(stderr, "Codec not found\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                      </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>outAudioStream = avformat_new_stream(outFormatCtx, outCodec);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (!outAudioStream)</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>fprintf(stderr, "Cannot add new audio stream\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                  </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>outAudioStream->id = outFormatCtx->nb_streams - 1;</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>outAudioStream->time_base.den = 44100; // 44.100 kHz</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>outAudioStream->time_base.num = 1;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">               </span>outCodecCtx = outAudioStream->codec;</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>outCodecCtx->bit_rate = 64000;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>outCodecCtx->time_base.den = outAudioStream->time_base.den;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>outCodecCtx->time_base.num = outAudioStream->time_base.num;</div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">          </span>/* check that the encoder supports input */</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>outCodecCtx->sample_fmt = AV_SAMPLE_FMT_FLTP;</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>if (!check_sample_fmt(outCodec, outCodecCtx->sample_fmt)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                       </span>fprintf(stderr, "Encoder does not support sample format %s",</div><div><span class="Apple-tab-span" style="white-space:pre">                               </span>av_get_sample_fmt_name(outCodecCtx->sample_fmt));</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>/* select other audio parameters supported by the encoder */</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>outCodecCtx->sample_rate = select_sample_rate(outCodec);</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>outCodecCtx->channel_layout = select_channel_layout(outCodec);</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>outCodecCtx->channels = av_get_channel_layout_nb_channels(outCodecCtx->channel_layout);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">               </span>/* open it */</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (avcodec_open2(outCodecCtx, outCodec, NULL) < 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>fprintf(stderr, "Could not open codec\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">            </span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>av_dump_format(outFormatCtx, 0, filename, 1);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>char buff[2048] = { 0 };</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>av_sdp_create(&outFormatCtx, 1, buff, 1024);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>printf("%s", buff);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">               </span>(...SDP printed here...)</div><div><span class="Apple-tab-span" style="white-space:pre">             </span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>ret = avio_open2(&outFormatCtx->pb, filename, AVIO_FLAG_WRITE, NULL, NULL);</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>ret = avformat_write_header(outFormatCtx, NULL);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>printf("ret = %d\n", ret);</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>if (ret <0)</div><div><span class="Apple-tab-span" style="white-space:pre">                       </span>exit(1);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">            </span>/* frame containing input audio */</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>outFrame = av_frame_alloc();</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>if (!outFrame) {</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>fprintf(stderr, "Could not allocate audio frame\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                       </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>outFrame->nb_samples = outCodecCtx->frame_size;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>outFrame->format = outCodecCtx->sample_fmt;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>outFrame->channel_layout = outCodecCtx->channel_layout;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">               </span>/* the codec gives us the frame size, in samples,</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>* we calculate the size of the samples buffer in bytes */</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>buffer_size = av_samples_get_buffer_size(NULL, outCodecCtx->channels, outCodecCtx->frame_size,</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span>outCodecCtx->sample_fmt, 0);</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>if (buffer_size < 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>fprintf(stderr, "Could not get sample buffer size\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>samples = (uint16_t*)av_malloc(buffer_size);</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>if (!samples) {</div><div><span class="Apple-tab-span" style="white-space:pre">                      </span>fprintf(stderr, "Could not allocate %d bytes for samples buffer\n",</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>buffer_size);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>/* setup the data pointers in the AVFrame */</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>ret = avcodec_fill_audio_frame(outFrame, outCodecCtx->channels, outCodecCtx->sample_fmt,</div><div><span class="Apple-tab-span" style="white-space:pre">                       </span>(const uint8_t*)samples, buffer_size, 0);</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>if (ret < 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>fprintf(stderr, "Could not setup audio frame\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                  </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>/* encode a single tone sound */</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>t = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>int next_pts = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>tincr = 2 * M_PI * 440.0 / outCodecCtx->sample_rate;</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>for (i = 0; i < 44000; i++) {</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>av_init_packet(&pkt);</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>pkt.data = NULL; // packet data will be allocated by the encoder</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>pkt.size = 0;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                       </span>for (j = 0; j < outCodecCtx->frame_size; j++) {</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>samples[2 * j] = (int)(sin(t) * 10000);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>for (k = 1; k < outCodecCtx->channels; k++)</div><div><span class="Apple-tab-span" style="white-space:pre">                                    </span>samples[2 * j + k] = samples[2 * j];</div><div><span class="Apple-tab-span" style="white-space:pre">                         </span>t += tincr;</div><div><span class="Apple-tab-span" style="white-space:pre">                  </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>// Sets time stamp</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>next_pts += outFrame->nb_samples;</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span>outFrame->pts = next_pts;</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span></div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>/* encode the samples */</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>ret = avcodec_encode_audio2(outCodecCtx, &pkt, outFrame, &got_output);</div><div><span class="Apple-tab-span" style="white-space:pre">                       </span>if (ret < 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                            </span>fprintf(stderr, "Error encoding audio frame\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                           </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>if (got_output) {</div><div><span class="Apple-tab-span" style="white-space:pre">                            </span>//fwrite(pkt.data, 1, pkt.size, f);</div><div><span class="Apple-tab-span" style="white-space:pre">                          </span>//pkt.stream_index = pktidx++;</div><div><span class="Apple-tab-span" style="white-space:pre">                               </span>write_frame(outFormatCtx, &outCodecCtx->time_base, outAudioStream, &pkt);</div><div><span class="Apple-tab-span" style="white-space:pre">                         </span>av_packet_unref(&pkt);</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>/* get the delayed frames */</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>for (got_output = 1; got_output; i++) {</div><div><span class="Apple-tab-span" style="white-space:pre">                      </span>ret = avcodec_encode_audio2(outCodecCtx, &pkt, NULL, &got_output);</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>if (ret < 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                            </span>fprintf(stderr, "Error encoding frame\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                         </span>exit(1);</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>if (got_output) {</div><div><span class="Apple-tab-span" style="white-space:pre">                            </span>//fwrite(pkt.data, 1, pkt.size, f);</div><div><span class="Apple-tab-span" style="white-space:pre">                          </span>pkt.pts = AV_NOPTS_VALUE;</div><div><span class="Apple-tab-span" style="white-space:pre">                            </span>write_frame(outFormatCtx, &outCodecCtx->time_base, outAudioStream, &pkt);</div><div><span class="Apple-tab-span" style="white-space:pre">                         </span>av_packet_unref(&pkt);</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>av_freep(&samples);</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>av_frame_free(&outFrame);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>avcodec_close(outCodecCtx);</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>av_free(outCodecCtx);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>int main(int argc, char **argv)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>const char *output;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">         </span>/* register all the codecs */</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>//avcodec_register_all();</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>av_register_all();</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>avformat_network_init(); // for network streaming</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>audio_encode_example("rtp://<a href="http://127.0.0.1:8554">127.0.0.1:8554</a>");</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">           </span>return 0;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div></div><div><br></div></div>