我正在 Flash 中构建视频聊天,一切都运行良好,除了我试图检测其他用户是否正在发送工作视频流的部分。
其他用户不发送视频有几个原因。
- 另一个用户没有相机
- 另一个用户有一个摄像头,但该摄像头当前正被另一个应用程序(Skype、Photo Booth、Google Talk 等)占用。
- 另一个用户有相机,但不允许使用他/她的相机。
- (我猜还有其他意想不到的问题......)
那么如何使用 NetStream 类检测我从其他用户收到的流是否是黑流(由于上述原因)?
我想出的最接近的方法是添加一个计时器,该计时器从我从其他用户收到的流中轮询 currentFps() 函数。但是到目前为止,这似乎很不可靠,因为currentFps() == 0
即使在某些情况下我实际上从流中获取了视频,我也可能因此得到并显示错误。这样做的原因是因为我每 4 秒轮询一次 API 以获取 currentFPS 函数,假设在 00:00:04 根据轮询我得到“无视频”,但在 00:00:05 视频开始播放,因此我需要等到下一个滴答声,直到错误消息消失
这就是我目前的民意调查的样子
function subscribingStatusPoll(e:TimerEvent):void {
if (subscribingStream.currentFPS == 0){
error.text = "No video found from the other user..."
} else {
error.text = "";
}
}
这是我能想出的唯一一种方法来检测这一点,但这是不可靠的,我实际上更喜欢一种方法来立即检测我收到的流是否附加了一个工作视频而没有这个丑陋的民意调查。