<p><br>
Dana 14. 7. 2015. 20:49 osoba "Ruurd Adema" <<a href="mailto:ruurdadema@me.com">ruurdadema@me.com</a>> napisala je:<br>
><br>
> I'm trying to write live incoming audiopackets into a mov file with AAC encoding using the FFmpeg api.<br>
><br>
> 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>
><br>
> 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>
><br>
> audiopacket_sample_count = audiopacket->GetSampleFrameCount();<br>
> audiopacket_channel_count = decklink_config()->audio_channel_count;<br>
> audiopacket_size = audiopacket_sample_count * (decklink_config()->audio_sampletype/8) * audiopacket_channel_count;<br>
><br>
> audiopacket->GetBytes(&audiopacket_data);<br>
><br>
> av_init_packet(&pkt); <br>
><br>
> if (AUDIO_TYPE == AV_CODEC_ID_PCM_S16LE)<br>
> {<br>
> audiopacket->GetPacketTime(&audio_pts, audio_stream->time_base.den);<br>
><br>
> pkt.pts = audio_pts;<br>
> pkt.dts = pkt.pts; <br>
> pkt.flags |= AV_PKT_FLAG_KEY; <br>
> pkt.stream_index = audio_stream->index;<br>
> pkt.data = (uint8_t *)audiopacket_data;<br>
> pkt.size = audiopacket_size;<br>
><br>
> av_interleaved_write_frame(output_fmt_ctx, &pkt);<br>
> } <br>
> else if (AUDIO_TYPE == AV_CODEC_ID_AAC)<br>
> {<br>
> frame = av_frame_alloc();<br>
> frame->format = audio_stream->codec->sample_fmt;<br>
> frame->channel_layout = audio_stream->codec->channel_layout;<br>
> frame->sample_rate = audio_stream->codec->sample_rate;<br>
> frame->nb_samples = audiopacket_sample_count;<br>
><br>
> audiopacket->GetPacketTime(&audio_pts, audio_stream->time_base.den);<br>
><br>
> frame->pts = audio_pts;<br>
><br>
> if (avcodec_fill_audio_frame(frame, audiopacket_channel_count, audio_stream->codec->sample_fmt, (const uint8_t *)audiopacket_data, audiopacket_size, 0) < 0)<br>
> {<br>
> fprintf(stderr, "[ERROR] Filling audioframe failed!\n");<br>
> exit(-1);<br>
> }<br>
><br>
> if (avcodec_encode_audio2(audio_stream->codec, &pkt, frame, &got_packet) != 0)<br>
> {<br>
> fprintf(stderr, "[ERROR] Encoding audio failed\n");<br>
> }<br>
><br>
> if (got_packet) <br>
> {<br>
> pkt.stream_index = audio_stream->index;<br>
> pkt.flags |= AV_PKT_FLAG_KEY; <br>
><br>
> av_interleaved_write_frame(output_fmt_ctx, &pkt);<br>
> }<br>
> av_frame_free(&frame); <br>
> }<br>
> av_free_packet(&pkt);<br>
><br>
><br>
><br>
> _______________________________________________<br>
> Libav-user mailing list<br>
> <a href="mailto:Libav-user@ffmpeg.org">Libav-user@ffmpeg.org</a><br>
> <a href="http://ffmpeg.org/mailman/listinfo/libav-user">http://ffmpeg.org/mailman/listinfo/libav-user</a><br>
></p>
<p>Do you send exact same number of samples that aac encoder request? You need to buffer samples....<br>
</p>