我使用计时器来获取刻度并计算我所在的帧,但它似乎非常不准确.
如何可靠地计算我所在的框架?
有谁知道一个免费的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媒体播放器与帧计数器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)