<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="">Yes, I tried that, I used an audio_fifo for that. Unfortunately makes no difference:<div class=""><div class=""><br class=""></div><div class=""><div class=""><font face="Courier" class="">// This part works well</font></div><div class=""><font face="Courier" class="">if (CODEC_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="">    </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="">// This part doesn't work</font></div><div class=""><font face="Courier" class="">else if (CODEC_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="">    requested_size = av_samples_get_buffer_size(NULL, audio_stream->codec->channels, audio_stream->codec->frame_size, audio_stream->codec->sample_fmt, 1);</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    result = av_audio_fifo_write(audio_fifo, &audiopacket_data, 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="">    </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="">    frame_buf = av_malloc(requested_size);</font></div><div class=""><font face="Courier" class=""><br class=""></font></div><div class=""><font face="Courier" class="">    // Check if there are enough samples to feed the encoder</font></div><div class=""><font face="Courier" class="">    if (av_audio_fifo_size(audio_fifo) >= audio_stream->codec->frame_size)</font></div><div class=""><font face="Courier" class="">    {</font></div><div class=""><font face="Courier" class="">        result = av_audio_fifo_read(audio_fifo, &frame_buf, audio_stream->codec->frame_size);</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 *)frame_buf, requested_size, 1) < 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="">        </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="">    }</font></div><div class=""><font face="Courier" class="">    free(frame_buf);</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="">Thank, Ruurd</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 14 Jul 2015, at 21:16, Paul B Mahol <<a href="mailto:onemda@gmail.com" class="">onemda@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><p class=""><br class="">
Dana 14. 7. 2015. 20:49 osoba "Ruurd Adema" <<a href="mailto:ruurdadema@me.com" class="">ruurdadema@me.com</a>> napisala je:<br class="">
><br class="">
> I'm trying to write live incoming audiopackets into a mov file with AAC encoding using the FFmpeg api.<br class="">
><br 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.<br class="">
><br 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?<br class="">
><br class="">
> audiopacket_sample_count  = audiopacket->GetSampleFrameCount();<br class="">
> audiopacket_channel_count = decklink_config()->audio_channel_count;<br class="">
> audiopacket_size          = audiopacket_sample_count * (decklink_config()->audio_sampletype/8) * audiopacket_channel_count;<br class="">
><br class="">
> audiopacket->GetBytes(&audiopacket_data);<br class="">
><br class="">
> av_init_packet(&pkt);    <br class="">
><br class="">
> if (AUDIO_TYPE == AV_CODEC_ID_PCM_S16LE)<br class="">
> {<br class="">
>     audiopacket->GetPacketTime(&audio_pts, audio_stream->time_base.den);<br class="">
><br class="">
>     pkt.pts          = audio_pts;<br class="">
>     pkt.dts          = pkt.pts; <br class="">
>     pkt.flags       |= AV_PKT_FLAG_KEY;                 <br class="">
>     pkt.stream_index = audio_stream->index;<br class="">
>     pkt.data         = (uint8_t *)audiopacket_data;<br class="">
>     pkt.size         = audiopacket_size;<br class="">
><br class="">
>     av_interleaved_write_frame(output_fmt_ctx, &pkt);<br class="">
> } <br class="">
> else if (AUDIO_TYPE == AV_CODEC_ID_AAC)<br class="">
> {<br class="">
>     frame = av_frame_alloc();<br class="">
>     frame->format = audio_stream->codec->sample_fmt;<br class="">
>     frame->channel_layout = audio_stream->codec->channel_layout;<br class="">
>     frame->sample_rate = audio_stream->codec->sample_rate;<br class="">
>     frame->nb_samples = audiopacket_sample_count;<br class="">
><br class="">
>     audiopacket->GetPacketTime(&audio_pts, audio_stream->time_base.den);<br class="">
><br class="">
>     frame->pts = audio_pts;<br class="">
><br class="">
>     if (avcodec_fill_audio_frame(frame, audiopacket_channel_count, audio_stream->codec->sample_fmt, (const uint8_t *)audiopacket_data, audiopacket_size, 0) < 0)<br class="">
>     {<br class="">
>         fprintf(stderr, "[ERROR] Filling audioframe failed!\n");<br class="">
>         exit(-1);<br class="">
>     }<br class="">
><br class="">
>     if (avcodec_encode_audio2(audio_stream->codec, &pkt, frame, &got_packet) != 0)<br class="">
>     {<br class="">
>         fprintf(stderr, "[ERROR] Encoding audio failed\n");<br class="">
>     }<br class="">
><br class="">
>     if (got_packet) <br class="">
>     {<br class="">
>         pkt.stream_index = audio_stream->index;<br class="">
>         pkt.flags       |= AV_PKT_FLAG_KEY; <br class="">
><br class="">
>         av_interleaved_write_frame(output_fmt_ctx, &pkt);<br class="">
>     }<br class="">
>     av_frame_free(&frame); <br class="">
> }<br class="">
> av_free_packet(&pkt);<br class="">
><br class="">
><br class="">
><br class="">
> _______________________________________________<br class="">
> Libav-user mailing list<br class="">
> <a href="mailto:Libav-user@ffmpeg.org" class="">Libav-user@ffmpeg.org</a><br class="">
> <a href="http://ffmpeg.org/mailman/listinfo/libav-user" class="">http://ffmpeg.org/mailman/listinfo/libav-user</a><br class="">
></p><p class="">Do you send exact same number of samples that aac encoder request? You need to buffer samples....<br class="">
</p>
_______________________________________________<br class="">Libav-user mailing list<br class=""><a href="mailto:Libav-user@ffmpeg.org" class="">Libav-user@ffmpeg.org</a><br class="">http://ffmpeg.org/mailman/listinfo/libav-user<br class=""></div></blockquote></div><br class=""></div></div></body></html>