使用NetStream类,如何检测是否附加了工作视频?

时间:2011-07-31 18:57:07

标签: flash actionscript-3 netstream videochat

我正在使用闪存构建视频聊天,一切正常,除了我试图检测其他用户是否正在发送有效视频流的部分。

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

  1. 其他用户没有摄像头
  2. 其他用户有相机,但相机目前正被其他应用程序(Skype,Photo Booth,Google Talk等)占用。
  3. 另一位用户拿到相机但未允许使用他/她的相机。
  4. (我猜其他意想不到的问题......)
  5. 那么如何使用NetStream类检测我从其他用户收到的流是否为黑色流(由于上述原因)?

    我最接近的是通过添加一个计时器来轮询我从其他用户收到的流中的currentFps()函数。但到目前为止,这似乎相当不可靠,因为我可能会得到currentFps() == 0并显示错误,因为即使我在某些情况下实际上从流中获得了视频。原因是因为我每4秒轮询一次当前FPS功能的API,让我们说在00:00:04我根据民意调查得到“没有视频”但是在00:00:05视频开始播放,因此我需要等到下一个 tick ,直到错误消息消失

    这是我目前的民意调查结果

    function subscribingStatusPoll(e:TimerEvent):void {
      if (subscribingStream.currentFPS == 0){
        error.text = "No video found from the other user..."
      } else {
        error.text = "";
      }
    }
    

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

2 个答案:

答案 0 :(得分:3)

虽然我同意不从服务器端发送“空白”流,但您可能无法访问服务器端,因此它不适用于您的情况。在客户端,您可以间隔从流中获取一个帧并检查更改,或者只查看时间戳(查找随时间增加的值)。这些选项可能看起来很糟糕,但它们肯定适用于Flash。

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

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

答案 1 :(得分:1)

错误的做法。
验证接收端的数据是一个好主意,没有办法检测流是否是真实数据。
在您的情况下,正在发送的流不是真正的相机流,但它是一个非常小的流 没有检测到这一点 为什么不在发送客户端处理验证呢?