안드로이드 개발 질문/답변
(글 수 45,052)
av_seek_frame으로 프레임을 옮기고 나서 현재 프레임 위치를 알고 싶은데요.
이를이용해서 안드로이드 seekbar와 연동해주려고 합니다.
gFormatCtx->pb->pos/AV_TIME_BASE 이렇게 계산하니 값이 계속 똑같이 찍히다가 av_seek_frame을 하고 나서야
수치가 변하네요
현재 프레임 위치를 알아 올수 있는 변수가 있다면 댓글로 남겨주시면 감사하겠습니다
2012.12.04 10:58:13
그루터기님 소스로 작업중인데요. 여기 decodeFrame에서 gFrame->pts가져오는게 아닌가요ㅡㅡ?? 둘을 곱해줘도 값이 변하질 않아서요.
int decodeFrame()
{
int frameFinished = 0;
AVPacket packet;
while (av_read_frame(gFormatCtx, &packet) >= 0) {
testtime = gFrame->display_picture_number;
if (packet.stream_index == gVideoStreamIdx) {
avcodec_decode_video2(gVideoCodecCtx, gFrame, &frameFinished, &packet);
if (frameFinished) {
pts = gFrame->pts * av_q2d(gStream->time_base);
gImgConvertCtx = sws_getCachedContext(gImgConvertCtx,
gVideoCodecCtx->width, gVideoCodecCtx->height, gVideoCodecCtx->pix_fmt,
gVideoCodecCtx->width, gVideoCodecCtx->height, PIX_FMT_RGB565LE, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(gImgConvertCtx, gFrame->data, gFrame->linesize, 0, gVideoCodecCtx->height, gFrameRGB->data, gFrameRGB->linesize);
av_free_packet(&packet);
return 0;
}
}
av_free_packet(&packet);
}
return -1;
}
AVFrame에 pts 정보로 연동하시면 될껍니다.
pts *= av_q2d(is->video_st->time_base) 이런식으로 사용하면 현재 시간정보를 가져올수 있습니다.