如何在 VLC 视频过滤器模块中检索当前播放时间
How can I retrieve current playback time in VLC video filter module
我想操作位于预定义播放时间集内的图像(例如从 3 秒标记到 6 秒标记)。但是,我无法在视频过滤器模块中检索播放时间。结构 picture_t 包含一个成员 "date",它保存显示日期但不保存播放开始时从零开始的时间戳。显然我无法确定当前播放位置是什么,尤其是在用户使用搜索栏执行搜索操作之后。
那么,如何确定 "video filter" 模块中的当前播放位置,即使在搜索操作后仍保持一致?
非常感谢任何帮助!
编辑:
下面是简单地将帧从 60 秒丢到 120 秒的示例代码。如果我做seek操作,60秒和120秒这些标记就不再有效了。
picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
{
filter_sys_t *p_sys = p_filter->p_sys;
// save the start date
if ( p_sys->start == -1 )
p_sys->start = p_pic->date;
if ( p_pic->date > p_sys->start + 60000000 && p_pic->date < p_sys->start + 120000000)
{
picture_Release( p_pic );
return NULL;
}
return p_pic;
}
我发布答案是为了其他人的利益。
目前,这在 VLC 中是不可能的。相反,这可以使用解复用器模块来完成,因为解复用器知道正在播放的曲目的播放位置。它还可以使用 VLCcore 中实现的观察者模式与任何其他模块(例如视频过滤器 2)通信。关注 here 以获取有关 VLC 对象变量的更多信息。
希望对您有所帮助!
对于你的问题,我有不同的解决方案。
但这并不能直接获取播放时间。但它将帧数转换为时间。
所以你不必导入任何函数。
目前我在下面的实现中尝试过,它正在运行:
filter_sys_t *p_sys = (filter_sys_t *)p_filter->p_sys;
strm_time = 0.04 * (double)(p_sys->i_frames);
// 0.04 implies the 25 frames per minute
我想操作位于预定义播放时间集内的图像(例如从 3 秒标记到 6 秒标记)。但是,我无法在视频过滤器模块中检索播放时间。结构 picture_t 包含一个成员 "date",它保存显示日期但不保存播放开始时从零开始的时间戳。显然我无法确定当前播放位置是什么,尤其是在用户使用搜索栏执行搜索操作之后。
那么,如何确定 "video filter" 模块中的当前播放位置,即使在搜索操作后仍保持一致?
非常感谢任何帮助!
编辑: 下面是简单地将帧从 60 秒丢到 120 秒的示例代码。如果我做seek操作,60秒和120秒这些标记就不再有效了。
picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
{
filter_sys_t *p_sys = p_filter->p_sys;
// save the start date
if ( p_sys->start == -1 )
p_sys->start = p_pic->date;
if ( p_pic->date > p_sys->start + 60000000 && p_pic->date < p_sys->start + 120000000)
{
picture_Release( p_pic );
return NULL;
}
return p_pic;
}
我发布答案是为了其他人的利益。
目前,这在 VLC 中是不可能的。相反,这可以使用解复用器模块来完成,因为解复用器知道正在播放的曲目的播放位置。它还可以使用 VLCcore 中实现的观察者模式与任何其他模块(例如视频过滤器 2)通信。关注 here 以获取有关 VLC 对象变量的更多信息。
希望对您有所帮助!
对于你的问题,我有不同的解决方案。
但这并不能直接获取播放时间。但它将帧数转换为时间。 所以你不必导入任何函数。
目前我在下面的实现中尝试过,它正在运行:
filter_sys_t *p_sys = (filter_sys_t *)p_filter->p_sys;
strm_time = 0.04 * (double)(p_sys->i_frames);
// 0.04 implies the 25 frames per minute