Используя класс NetStream, как я могу определить, есть ли к нему рабочее видео? - PullRequest
2 голосов
/ 31 июля 2011

Я создаю видеочат во флэш-памяти, и все работает очень хорошо, за исключением части, в которой я пытаюсь определить, отправляет ли другой пользователь рабочий видеопоток.

Есть парапричины, по которым другой пользователь не отправляет видео.

  1. Другой пользователь не получил камеру
  2. Другой пользователь получил камеру, но камера в настоящее время занята другим приложением (Skype, Photo Booth, Google Talk и т. Д.)
  3. Другой пользователь получил камеру, но не разрешил использовать его / ее камеру.
  4. (Другие неожиданные проблемы, с которыми я столкнулся)угадайте ...)

Итак, как мне определить, является ли поток, который я получаю от другого пользователя, черным потоком (по вышеуказанным причинам) с использованием класса NetStream?

Самое близкое, что я придумал, - это добавление таймера, который опрашивает функцию currentFps () из потока, который я получаю от другого пользователя.Но пока это кажется довольно ненадежным, потому что я мог бы получить currentFps() == 0 и показать ошибку из-за этого, даже если в некоторых случаях я действительно получал видео из потока.Причина в том, что я опрашиваю API каждые 4 секунды для функции 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 = "";
  }
}

Это единственный хак Я могу придумать, чтобы обнаружить это, но это ненадежно, и я на самом деле предпочел бы способ мгновенно определить, получил ли поток, который я получаю, рабочее видео, прикрепленное к нему, без этого уродливого опроса.

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Хотя я бы согласился не отправлять «пустой» поток со стороны сервера, у вас может не быть доступа к стороне сервера, и, следовательно, он не будет применяться в вашей ситуации. На стороне клиента вы можете взять кадр из потока с интервалом и проверить изменения или просто посмотреть на временные метки (посмотрите на увеличение с течением времени). Эти параметры могут показаться взломанными, но они определенно должны работать во Flash.

Если бы мне пришлось разрабатывать это самостоятельно, я бы начал с этого кода обнаружения края и заменил захват веб-камеры захватом кадров из потока воспроизведения.

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

1 голос
/ 10 августа 2011

Неправильный подход.
Несмотря на то, что проверка данных на принимающей стороне является хорошей идеей, невозможно определить, является ли поток реальными данными или нет.
В вашем случае отправляемый поток не является истинным потоком с камеры, но, тем не менее, является потоком.
Там нет обнаружения для этого.
Почему бы просто не обработать проверку на отправляющем клиенте?

...