如何以帧而不是秒为单位显示当前媒体播放器位置 - UWP MediaPlayerElement

How to display current media player position in frames rather then seconds - UWP MediaPlayerElement

我在 UWP 应用中使用 MediaPlayerElement。我希望以帧而不是秒为单位转换 TimeElapsedElement 和 TimeRemainingElement 的显示值。

所以目前我收到的值是:hh:mm:ss:ff(ff 秒的分数)

我想要的值是:FFFFF(到目前为止经过的总帧数)或标准时间码值,例如 hh:mm:ss:FF(FF 是当前秒经过的帧数)

我似乎无法访问和修改 TimeElapsed 和 TimeRemaining 元素,但想知道这些值是否适合某种转换,即获取媒体播放的帧速率并将值转换为帧数。

或者,我想知道我是否可以使用 MediaPlayer.PlaybackSession.Position 创建我自己的以帧而不是秒为单位的变量并显示该值。我想已经发生了一些转换,它采用了加载媒体的帧率。

想知道您会推荐什么方法,是否可以为我指明在 c# 中进行时间到帧转换的任何资源的方向?感谢您提供的任何帮助!

目前MediaPlayerElement没有提供多少帧的信息,时间是一个更通用的表达。

如果您需要获取当前通过的帧数,则需要进行一些计算:

Frame rate * Play time

如何获取帧率

List<string> videoProperties = new List<string>();
videoProperties.Add("System.Video.FrameRate");
IDictionary<string, object> retrieveProperties = await file.Properties.RetrievePropertiesAsync(videoProperties);
double frameRate = ((uint)retrieveProperties["System.Video.FrameRate"])/1000.0;

如何过帧

var sec = MyPlayer.MediaPlayer.PlaybackSession.Position.TotalSeconds;
var frameCounts = sec * frameRate;

大部分情况下是适用的,但只能作为参考值。因为有些视频的帧率不固定。

谢谢。