<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><p style="margin: 0px 0px 1em; padding: 0px; border: 0px; clear: both; color: rgb(34, 34, 34); line-height: 19.5px; widows: 1; background-color: rgb(255, 255, 255);" class="">I'm trying to write live incoming audiopackets into a mov file with AAC encoding using the FFmpeg api.</p><p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: rgb(34, 34, 34); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 19.5px; widows: 1; background-color: rgb(255, 255, 255);" class=""><span style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; line-height: normal; widows: auto;" class="">When using no encoding (AV_CODEC_ID_PCM_S16LE) it works well, when using AAC encoding (AV_CODEC_ID_AAC) it fails. The resulting audiofile plays too fast and sounds distorted.</span></p><div class="">I’m new to the FFmpeg api, (and quite a beginner in programming anyway), so big chance I forgot something or doing something wrong. Is there anyone willing to help me with this one?</div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier" class="">audiopacket_sample_count  = audiopacket->GetSampleFrameCount();</font></div><div class=""><font face="Courier" class="">audiopacket_channel_count = decklink_config()->audio_channel_count;</font></div><div class=""><font face="Courier" class="">audiopacket_size          = audiopacket_sample_count * (decklink_config()->audio_sampletype/8) * audiopacket_channel_count;</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">audiopacket->GetBytes(&audiopacket_data);</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">av_init_packet(&pkt);    </font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">if (AUDIO_TYPE == AV_CODEC_ID_PCM_S16LE)</font></div><div class=""><font face="Courier" class="">{</font></div><div class=""><font face="Courier" class="">    audiopacket->GetPacketTime(&audio_pts, audio_stream->time_base.den);</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    pkt.pts          = audio_pts;</font></div><div class=""><font face="Courier" class="">    pkt.dts          = pkt.pts; </font></div><div class=""><font face="Courier" class="">    pkt.flags       |= AV_PKT_FLAG_KEY;                 </font></div><div class=""><font face="Courier" class="">    pkt.stream_index = audio_stream->index;</font></div><div class=""><font face="Courier" class="">    pkt.data         = (uint8_t *)audiopacket_data;</font></div><div class=""><font face="Courier" class="">    pkt.size         = audiopacket_size;</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    av_interleaved_write_frame(output_fmt_ctx, &pkt);</font></div><div class=""><font face="Courier" class="">} </font></div><div class=""><font face="Courier" class="">else if (AUDIO_TYPE == AV_CODEC_ID_AAC)</font></div><div class=""><font face="Courier" class="">{</font></div><div class=""><font face="Courier" class="">    frame = av_frame_alloc();</font></div><div class=""><font face="Courier" class="">    frame->format = audio_stream->codec->sample_fmt;</font></div><div class=""><font face="Courier" class="">    frame->channel_layout = audio_stream->codec->channel_layout;</font></div><div class=""><font face="Courier" class="">    frame->sample_rate = audio_stream->codec->sample_rate;</font></div><div class=""><font face="Courier" class="">    frame->nb_samples = audiopacket_sample_count;</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    audiopacket->GetPacketTime(&audio_pts, audio_stream->time_base.den);</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    frame->pts = audio_pts;</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    if (avcodec_fill_audio_frame(frame, audiopacket_channel_count, audio_stream->codec->sample_fmt, (const uint8_t *)audiopacket_data, audiopacket_size, 0) < 0)</font></div><div class=""><font face="Courier" class="">    {</font></div><div class=""><font face="Courier" class="">        fprintf(stderr, "[ERROR] Filling audioframe failed!\n");</font></div><div class=""><font face="Courier" class="">        exit(-1);</font></div><div class=""><font face="Courier" class="">    }</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    if (avcodec_encode_audio2(audio_stream->codec, &pkt, frame, &got_packet) != 0)</font></div><div class=""><font face="Courier" class="">    {</font></div><div class=""><font face="Courier" class="">        fprintf(stderr, "[ERROR] Encoding audio failed\n");</font></div><div class=""><font face="Courier" class="">    }</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    if (got_packet) </font></div><div class=""><font face="Courier" class="">    {</font></div><div class=""><font face="Courier" class="">        pkt.stream_index = audio_stream->index;</font></div><div class=""><font face="Courier" class="">        pkt.flags       |= AV_PKT_FLAG_KEY; </font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">        av_interleaved_write_frame(output_fmt_ctx, &pkt);</font></div><div class=""><font face="Courier" class="">    }</font></div><div class=""><font face="Courier" class="">    av_frame_free(&frame); </font></div><div class=""><font face="Courier" class="">}</font></div><div class=""><font face="Courier" class="">av_free_packet(&pkt);</font></div></div><div class=""><br class=""></div><div class=""><br class=""></div></body></html>