Hi All,

Here is my code for encoding Audio. Can anyone help and point me in the direction I need to fix this issue?

    AVFrame* frame;
    AVPacket pkt = { 0 };
    AVCodecContext *c = m_audio_st.st->codec;
    int got_packet;
    int dst_nb_samples;
    int bytesReady = audioBuffer.size();
    QByteArray samples;
    int sampleSize;

    if(m_errorCode != NoError){
        return;
    }

    frame = m_audio_st.tmp_frame;
    if(m_audio_st.swr_ctx == NULL || c == NULL
       || frame == NULL){
        return;
    }

    sampleSize = av_samples_get_buffer_size(NULL, c->channels,
                                            c->frame_size,
                                            c->sample_fmt, 0);

    do{
        samples.clear();

        if(m_audioBuffer.size() + bytesReady == m_sampleSize){
            samples.append(m_audioBuffer + audioBuffer);
            m_audioBuffer.clear();
        }
        else if(m_audioBuffer.size() + bytesReady > m_sampleSize){
            m_audioBuffer.append(audioBuffer);
            samples.append(m_audioBuffer.left(m_sampleSize));
            m_audioBuffer.remove(0, m_sampleSize);
        }
        else if(m_audioBuffer.size() + bytesReady < m_sampleSize){
            m_audioBuffer.append(audioBuffer);
            return;
        }

        bytesReady = 0;
        audioBuffer.clear();
        int ret;
        if((ret = avcodec_fill_audio_frame(frame, c->channels,
                                 c->sample_fmt,
                                 (uint8_t*) samples.data(),
                                 sampleSize, 0)) < 0){
            m_errorCode = AudioEncoderError;
            Q_EMIT(m_errorCode);
            continue;
        }
        frame->pts = m_audio_st.next_pts;
        m_audio_st.next_pts += frame->nb_samples;
dst_nb_samples = av_rescale_rnd(swr_get_delay(m_audio_st.swr_ctx, c->sample_rate) + frame->nb_samples, c->sample_rate, c->sample_rate, AV_ROUND_UP);
        av_assert0(dst_nb_samples == frame->nb_samples);

        ret = av_frame_make_writable(m_audio_st.frame);
        if(ret < 0){
            m_errorCode = AudioEncoderError;
            Q_EMIT(m_errorCode);
            continue;
        }

        ret = swr_convert(m_audio_st.swr_ctx,
                          m_audio_st.frame->data, dst_nb_samples,
(const uint8_t **)frame->data, frame->nb_samples);
        if(ret < 0){
            m_errorCode = AudioEncoderError;
            Q_EMIT(m_errorCode);
            return;
        }


        frame = m_audio_st.frame;
frame->pts = av_rescale_q(m_audio_st.samples_count, {1, c->sample_rate}, c->time_base);

        m_audio_st.samples_count += dst_nb_samples;
        av_init_packet(&pkt);
        ret = avcodec_encode_audio2(c, &pkt, frame, &got_packet);
        if(ret < 0){
            m_errorCode = AudioEncoderError;
            Q_EMIT(m_errorCode);
            continue;
        }

        if(got_packet){
            ret = write_frame(m_oc, &c->time_base, m_audio_st.st, &pkt);
            if(ret < 0){
                m_errorCode = AudioEncoderError;
                Q_EMIT(m_errorCode);
                continue;
            }
        }
    }while(m_audioBuffer.size() > m_sampleSize);

Sincerely,
Kevin J. Brooks

On 9/22/2015 8:34 AM, Kevin J. Brooks wrote:
Hi All,

Obviously I don't understand enough about encoding video with audio to figure out how to fix this. If I take the captured sound from the microphone and pipe it directly back to my headphones, it is crystal clear. Well maybe a little tinny sounding, but clear. However, when I try to encode it into the video, it is not synced up with the images and there is a bunch of white noise. It is only after the video has ended that you finally can barely hear my voice and whistles.

Can anyone give me and idea where to start to fix this problem?
--
Sincerely,
Kevin J. Brooks
Senior Software Engineer



_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to