FFMPEG: вычисление PTS после avcodec_encode_audio()
От: Vicul  
Дата: 25.03.12 09:50
Оценка:
у меня задача захватить видео и звук с источника преобразовать его в flv формат и отослать его по RTMP на сайт.

Коды взял с FFMPEG.

с видео работает все нормально, но вот с PTS для аудио пакетов какая та фигня получается:


......
            AVPacket pkt;
            av_init_packet(&pkt);
......

         ret = avcodec_encode_audio(enc, audio_out, audio_out_size,
                                       (short *)audio_buf);
            if (ret < 0) {
                av_log(NULL, AV_LOG_FATAL, "Audio encoding failed\n");
                return;
            }
            if (ret > 0) 
            {
                audio_size += ret;
                pkt.stream_index = ost->index;
                pkt.data = audio_out;
                pkt.size = ret;
                if (enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE)
                {
                    pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base);
                    
                }
                pkt.flags |= AV_PKT_FLAG_KEY;
.............

av_interleaved_write_frame(s, pkt);

......


После avcodec_encode_audio() значение enc->coded_frame->pts всегда AV_NOPTS_VALUE, т.о. pts для аудио будет вычисляться автоматически в av_interleaved_write_frame(),
что приводит к тому, что pts аудио на порядок убегает от pts для видео, т.е имею рассинхронизацию. Схема вычисления pts для видео аналогична аудио каналу, за исключением,
что использую там avcodec_encode_video и enc->coded_frame->pts там вычисляется кодеком (x264).

Подскажите как правильно вычислить pts для аудио?

ЗЫ. Входящие временные метки для аудио и видео пакетов имею


25.03.12 19:33: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.