背景
我有一个文本,我想显示在文本框,每当视频是在一定的时间间隔,说(00:02:00-00:04:00 "Hello there")。
这些文本框只应在视频以特定时间间隔播放时显示。如果我倒带或跳过视频到不同的时间,则应生成/销毁文本框,具体取决于当前时间是否在间隔内。
我在文档中搜索了ffplay和vlc实现此功能的文档。
我已经尝试过的
播放:我的策略是继续在STDERR中显示视频的当前时间,并检查当前时间是否在间隔之内。
LibVLC: LibVLC支持异步事件,但不支持取决于视频播放时间的那种事件。
我的问题
1.是否应继续轮询当前视频时间或设置回调/触发器功能?
2.是否可以将视频的当前播放时间作为变量,并相应地创建回调函数?
注意:我知道字幕会做同样的事情,但是我希望文本位于不同的窗口。文本框应该与我使用的视频播放器解耦。
发布于 2019-07-01 14:32:51
如果您感兴趣的是当前的视频时间或位置,投票是非常好的。LibVLC确实为Media Player Position Changed和Media Player Time Changed实现了回调,但是对于执行非常有规律的事情(比如每秒钟查询一次),作为异步事件处理它没有多大价值。
设置一个计时器,每秒钟查询一次(或半秒,取决于所需的精度),并调用:
libvlc_time_t current = libvlc_media_player_get_time(my_player);注意,结果以毫秒为单位。显然,您必须保留对您的my_player的引用,但我想您已经这样做了。另外,在我的经验中,libvlc_media_player_get_time报告的时间可能并不总是非常精确。但播放应该没问题。
发布于 2019-07-02 08:35:04
你只需要一个subtitle文件。
一个带有视频名称但以.srt结尾的文件
Myvideo.srt,包含:
1
00:02:00,001 --> 00:04:00,001
Hello There!Vlc应该自动拿起它。
可能需要告诉你这件事。
ffplay -ss 00:01:55.00 -i Myvideo.mp4 -vf subtitles="./Myvideo.srt `
发布于 2022-07-28 13:04:12
我在我的播放器表单中订阅LibVLCSharp.WinForms.VideoView.MediaPlayer实例的LibVLCSharp.WinForms.VideoView.MediaPlayer事件。
首先,我有一个定义如下的对象:
public class VidMark
{
public long Beg { get; set; } //Number of milliseconds of the beginning
public long End { get; set; } //Number of milliseconds of the end
public string Desc { get; set; } //Text to display
public int Rank { get; set; } = 0; //A rank value for how user likes it
}我为每个视频都保留了这些标记的列表。我用彩色标记在视频的时间线上显示他们。在播放视频和发生PositionChanged事件时,我检查当前时间是否在这些标记中。如果是这样的话,我会向用户显示描述和排名。
//longMS = milliseconds into video derived from e.Position of the event
foreach (VidMark VM in _CurrentVidMarks)
{
if (VM.Beg <= longMS && longMS < VM.End)
{
//In a VidMark, so show it in the app
SetCurrentVidMarkAndControls(VM);
break;
}
}https://stackoverflow.com/questions/56833579
复制相似问题