Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1240859
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

分类: C/C++

2016-01-08 10:19:57

从摄像头采集视频, 调用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().

相关资源:

这上面的讨论非常好。


阅读(12431) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~