使用ffmepg

时间:2015-09-14 03:59:37

标签: c++ ffmpeg rtsp rtp

我刚刚使用FFMPEG从我的IP Camera读取RTSP流。我需要同步显示每帧和视频帧的UTC时间。我由Qt。

创建的玩家GUI

首先,我只是使用libVLC来实现我的要求。然后,我发现LibVLC无法获得每帧(https://forum.videolan.org/viewtopic.php?f=4&t=128403)的UTC时间戳,所以我出去从libvlc转到ffmepg。我使用ffmpeg库编写Demo读取RTSP并打印每帧的显示时间。但我发现演示时间是相对的,它从零开始到结束。我如何将时间转换为UTC? RTP Packet的时间戳是相对的,它只需要RTCP发送方报告的绝对时间戳来计算UTC。如何使用FFMPEG获取每帧的UTC时间?

在FFPMEG中,每个帧在struct AVFrame中都有自己的pts,pts刚从AVPacket复制,struct AVStream有time_base这个字段,UTC时间等于time_base * pts?

我的代码段如下:

//SDL End----------------------
while(av_read_frame(pFormatCtx, packet)>=0){


    if(packet->stream_index==videoindex){
        ret = avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, packet);
        if(ret < 0){
            printf("Decode Error.\n");
            return -1;
        }

        int64_t utc = packet->pts * av_q2d(pStream->time_base);
        printf("UTC is :%I64d\n", utc);

什么是错的?

0 个答案:

没有答案