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