我刚刚使用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);
什么是错的?