我正在开发一个应用程序,该应用程序需要将视频从一台计算机(我们称之为视频计算机)流式传输到另一台计算机(用户计算机)。流模型是这样的,视频文件字节“按原样”从视频计算机发送到用户计算机,并在用户端完成解码。
在用户端接收到的字节存储在一个System.IO.FileStream
对象中。对象的长度fileStream
(以字节为单位)在缓冲开始时设置(因为在开始时提供了发送有关视频文件的元数据)。
当缓冲开始时,对象的源System.Windows.Controls.MediaElement
被设置为filestream
对象。
如果用户不想寻找视频并且缓冲率保持高于播放率,则一切顺利。然而,一个人不能依赖运气。我需要一种机制来检查缓冲的视频持续时间是否小于当前播放时间......以便视频必须暂停(当用户在很早的时间寻找视频时,或者缓冲速度很慢时,可能会发生这种情况)。然后应该采取纠正措施,并且只有在缓冲了最短持续时间时才应该开始播放。
因此,我需要一种机制来“以秒为单位确定缓冲持续时间(即以秒为单位查找缓冲区指针的位置)给定缓冲区指针在缓冲时间线上的字节位置,或确定给定当前已播放(或在播放指针后面传递)的字节数以秒为单位播放指针位置”。
在任何时刻,以下数量是已知的:
- 缓冲区指针的位置(以字节为单位)
- 播放指针的位置(以秒为单位)
- 视频时长
- 视频长度(以字节为单位)
可以在几秒钟内暂停/播放mediaElement
或将其定位到某个位置。
任何帮助将不胜感激。
[请注意,不能这样说bufferPositionInSeconds
= bufferPositionInBits/videoBitRate,因为实际上比特率对于大多数视频都是可变的,而且还因为文件中存在元数据。]