摄像头avcodec_encode_video2编码后保存264播放的解决

12700阅读 0评论2016-01-08 sxcong
分类:C/C++

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

相关资源:

这上面的讨论非常好。


上一篇:音视频聊天开发: 9 声音 建议采用portaudio
下一篇:pkcs7padding c++实现