从摄像头采集视频, 调用avcodec_encode_video2编码成h264后,保存裸流到 .264文件,发现播放不正常,一般是比较快。
仔细看官方的例子,在decoding_encoding.c里面,
ret = avcodec_encode_video2(c, &pkt, frame, &got_output);之前有一句:
frame->pts = i;
加上就解决了问题了。
再看官方的libavdevice\xcbgrab.c里面,采集视频编码时,有如下代码:
static void wait_frame(AVFormatContext *s, AVPacket *pkt)
{
XCBGrabContext *c = s->priv_data;
int64_t curtime, delay;
int64_t frame_time = av_rescale_q(1, c->time_base, AV_TIME_BASE_Q);
c->time_frame += frame_time;
for (;;) {
curtime = av_gettime();
delay = c->time_frame - curtime;
if (delay <= 0)
break;
av_usleep(delay);
}
pkt->pts = curtime;
}
很明显,pts就是取时间戳:av_gettime().
相关资源:
这上面的讨论非常好。
阅读(12613) | 评论(0) | 转发(0) |