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++. Прикладные вопросы' — Кодт
Re: FFMPEG: вычисление PTS после avcodec_encode_audio()
От: Vicul  
Дата: 27.03.12 08:10
Оценка:
V>с видео работает все нормально, но вот с PTS для аудио пакетов какая та фигня получается:

вопрос решен, проблема была в недопонимании, как работает ффмпег
Re[2]: FFMPEG: вычисление PTS после avcodec_encode_audio()
От: diana  
Дата: 23.05.14 06:14
Оценка:
Здравствуйте, Vicul, Вы писали:


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


V>вопрос решен, проблема была в недопонимании, как работает ффмпег


Здравствуйте Может, вы еще помните, в чем было дело? Думаю над точно такой же проблемой... Спасибо
Re[3]: FFMPEG: вычисление PTS после avcodec_encode_audio()
От: Vicul  
Дата: 23.05.14 06:54
Оценка:
Здравствуйте, diana, Вы писали:

D>Здравствуйте, Vicul, Вы писали:



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


V>>вопрос решен, проблема была в недопонимании, как работает ффмпег


D>Здравствуйте Может, вы еще помните, в чем было дело? Думаю над точно такой же проблемой... Спасибо


Там я написал, что проблема в недопонимании ПТС.

Для аудио вычислять не надо, они привязываются к видео фреймам, когда их синхронизируете, поэтому устанавливаете их так

pkt.pts = AV_NOPTS_VALUE;
pkt.dts = AV_NOPTS_VALUE;

Для видео просто тупой счетчик

int FrameNumber = 0;

pkt.dts = FrameNumber;
pkt.pts = FrameNumber++;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.