2

我正在 Flash 中构建视频聊天,一切都运行良好,除了我试图检测其他用户是否正在发送工作视频流的部分。

其他用户不发送视频有几个原因。

  1. 另一个用户没有相机
  2. 另一个用户有一个摄像头,但该摄像头当前正被另一个应用程序(Skype、Photo Booth、Google Talk 等)占用。
  3. 另一个用户有相机,但不允许使用他/她的相机。
  4. (我猜还有其他意想不到的问题......)

那么如何使用 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 = "";
  }
}

这是我能想出的唯一一种方法来检测这一点,但这是不可靠的,我实际上更喜欢一种方法来立即检测我收到的流是否附加了一个工作视频而没有这个丑陋的民意调查。

4

2 回答 2

3

虽然我同意不从服务器端发送“空白”流,但您可能无法访问服务器端,因此它不适用于您的情况。在客户端,您可以每隔一段时间从流中抓取一帧并检查更改,或者只查看时间戳(寻找随时间增加的情况)。这些选项可能看起来很老套,但它们绝对应该在 Flash 中工作。

如果我必须自己开发这个,我会从这个边缘检测代码开始,然后用播放流中的帧抓取替换网络摄像头抓取。

http://www.laserpirate.com/as3edgeandmotion/

于 2011-08-12T15:16:49.130 回答
1

错误的做法。
尽管在接收端验证数据是一个好主意,但没有办法检测流是否是真实数据。
在您的情况下,正在发送的流不是真正的相机流,但它仍然是一个流。
对此没有检测。
为什么不只处理发送客户端的验证?

于 2011-08-09T20:24:59.083 回答