Silverlight媒体播放器与帧计数器

Silverlight媒体播放器与帧计数器,第1张

概述我正在尝试编写一个简单的Silverlight媒体播放器,但我需要时间戳为hh:mm:ss:ff其中FF是帧数. 我使用计时器来获取刻度并计算我所在的帧,但它似乎非常不准确. 如何可靠地计算我所在的框架? 有谁知道一个免费的Silverlight播放器会这样做吗? Silverlight旨在以不规则的间隔进行更新,并将任何动画或媒体播放追溯到渲染下一帧时的当前经过时间. 要计算当前帧(帧只是一秒的 我正在尝试编写一个简单的Silverlight媒体播放器,但我需要时间戳为hh:mm:ss:ff其中FF是帧数.

我使用计时器来获取刻度并计算我所在的帧,但它似乎非常不准确.
如何可靠地计算我所在的框架?

有谁知道一个免费的Silverlight播放器会这样做吗?

解决方法 Silverlight旨在以不规则的间隔进行更新,并将任何动画或媒体播放追溯到渲染下一帧时的当前经过时间.

要计算当前帧(帧只是一秒的特定部分),只需将播放开始时的总经过时间乘以视频中编码的每秒帧数,然后找到余数在那一秒内的帧来获得当前帧.

例如
当前帧=(Elapsed-Time-in-seconds * FramesPerSecond)%FramesPerSecond;

因此,如果20.12秒已经过去,在每秒24帧的视频上,你在第482帧(实际上是482.88,但只有整帧很重要).

取每秒帧数的模数,你得到剩余的帧数(例如2),这样你就在第二个数字20(或00:00:20:02)的第2帧.

您需要使用双精度(或浮点数)和整数值的最终模数进行乘法运算,因此它在C#代码中将如下所示:

int framesPerSecond = 24; // for exampledouble elapsedtimeInSeconds = ...; /// Get the elapsed time...int currentFrame = ((int)(elapsedtimeInSeconds * (double)framesPerSecond)) % framesPerSecond;

由于问题已经(在评论中)改变为分数帧速率,因此数学将按照此控制台应用程序进行:

using System;namespace TimeTest{    class Program    {        static voID Main(string[] args)        {            double framesPerSecond = 29.97;            for (double elapsedtime = 0; elapsedtime < 5; elapsedtime+=0.01)            {                int currentFrame = (int)((elapsedtime*framesPerSecond) % framesPerSecond);                Console.Writeline("Time: {0} = Frame: {1}",elapsedtime,currentFrame);            }        }    }}

注意:您无法保证显示每个帧编号,因为帧速率并不完美,但您只能看到渲染帧,因此无关紧要.您看到的帧将具有正确的帧编号.

总结

以上是内存溢出为你收集整理的Silverlight媒体播放器与帧计数器全部内容,希望文章能够帮你解决Silverlight媒体播放器与帧计数器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1078853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存