检索当前帧编号

时间:2015-04-02 01:49:07

标签: c++ qt vlc libvlc

我正在做一个涉及一些视频录制和编辑的项目,我很难找到一个好的C ++库来使用。我正在使用QT作为我的框架,他们的视频播放器无法正常使用(有时候会发现崩溃,例如)。此外,我需要从我的相机录制视频和音频,而QCamera在Windows中不起作用(用于录制)。

在我的程序中,用户可以在视频的顶部绘制,我需要存储这些绘图的起始帧和结束帧。

现在我一直在测试Libvlc,它几乎可以满足我的需求。从我所看到的情况来看,他们无法跳到某个框架,因为这只能通过时间或位置来完成。

我想出的第一个解决方案是捕获时间更改事件,然后使用FPS计算帧。问题是,据我所知,这个事件的间隔大约是250ms,对于15fps的视频几乎是4帧。

所以,第二个解决方案是使用libvlc_video_set_callbacks来自己“锁定,解锁和显示”并在那里计算帧数。这适用于从相机录制,因为没有返回,帧从0开始直到视频停止。问题出在播放视频时。由于没有时间戳,据我所知,我无法知道我在哪个帧号(例如用户可以寻求)。我的“hacky”解决方案是在结构上有一个“lastTime”和“numTimes”我传入这些回调,这就是我所做的:

lastTime表示收到的“上次新时间”,numTimes表示收到lastTime的次数。

get_the_current_time
calculate_frame_num_with_fps
if current_time is equal to lastTime: 
     frameNum += numTimes
     numTimes++
else 
     lastTime = current_time
     numTimes = 1

这种方式有效,但我讨厌解决方案。如果差异小于250毫秒,我不确定是否在寻求时间变化。这可能对用户来说有点困难,但我不想那样实现它。

所以我的问题是,是否还有另一种更好的解决方案?

感谢您的时间。

编辑: 我刚刚意识到我的解决方案不能很好地工作,因为即使视频暂停,处理程序都被调用,导致“current_time == lastTime”,这将保持增加帧,而实际上是相同的。我也没有办法检查它是否是相同的框架。我完全没有想法。

0 个答案:

没有答案