1. Пытаюсь вычислить текущее время видео и получаю ошибку: pts не является членом "AVStream"
while ((video_st && !video_is_eof) || (audio_st && !audio_is_eof)) {
/* Вычисление текущего аудио и видео времени */
audio_time = (audio_st && !audio_is_eof) ? audio_st->pts.val * av_q2d(audio_st->time_base) : INFINITY;
video_time = (video_st && !video_is_eof) ? video_st->pts.val * av_q2d(video_st->time_base) : INFINITY;
if (!flush &&
(!audio_st || audio_time >= STREAM_DURATION) &&
(!video_st || video_time >= STREAM_DURATION)) {
flush = 1;
}
/* write interleaved audio and video frames */
if (audio_st && !audio_is_eof && audio_time <= video_time) {
write_audio_frame(oc, audio_st, flush);
}
else if (video_st && !video_is_eof && video_time < audio_time) {
write_video_frame(oc, video_st, flush);
}
}
2. Как ffmpeg хранит необработанные кадры видео? Думала, что для этого используется AVFMT_RAWPICTURE, но насколько поняла - это устарело.
Буду рада любой помощи.
У AVStream нет поля pts. Это поле есть у типов AVPacket и AVFrame (по умолчанию берущееся из AVPacket при декодировании, но потом вы можете установить свое, если вам так будет нужно). У AVStream есть поле start_time, которое указывает на время начала записи (или стрима). Во всех случаях время указано в AVStream::time_base единицах
Необработанные это какие? Если закодированные то в AVPacket::data (AVPacket::buf). Если декодированные, то в AVFrame::data и AVFrame::extended_data
Текущее время можно найти в AVPacket::pts
и AVFrame::pts
. Недекодированные данные для кодека по идее в AVPacket::data
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab