从摄像头采集视频, 调用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().
相关资源:
这上面的讨论非常好。
                                   
            
            
              
              阅读(12325) | 评论(0) | 转发(0) |