Подтвердить что ты не робот

WebRTC не может получить видеопоток с устройства ввода USB (readyState переходит к завершению)

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

Код, который я отлично работаю для встроенной веб-камеры для ноутбуков, но когда я подключаю внешнее устройство ввода видео (в этом случае старая видеокамера, подключенная через S-Video к входу USB с использованием преобразователя StarTech - номер модели SVID2USB2NS), я ничего не получай. Я пробовал это как в Chrome, так и в FireFox.

Оба браузера находят видеоустройство и предлагают мне выбор моей встроенной веб-камеры или USB-устройства (в данном случае это "USB 2820" ), поэтому в этом случае они знают об этом устройстве.

В Chrome, когда я пытаюсь подключиться, вызывается "успешный" обратный вызов вызова getUserMedia, если я .getVideoTracks() обнаруживаю MediaStreamTrack и момент обратного вызова, MediaStreamTrack возвращает enabled= true и readyState= live. Однако нет видеовхода (только черная видеокамера и маленький красный значок "запись" на вкладке браузера Chrome не отображаются). Если я проведу MediaStreamTrack через секунду, я обнаружил, что readyState now = "ended" (хотя включено все еще верно).

В FireFox снова обнаружено устройство, но любая попытка подключения к нему с помощью getUserMedia просто вызывает обратный вызов ошибки с ошибкой HARDWARE_UNAVAILABLE.

Мой вызов getUserMedia просто:

navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback);

и мой обратный вызов успеха (включая некоторый тестовый код для проверки MediaStreamTrack сразу и спустя одну секунду):

function _webRTCsuccessCallback(stream) {
    window.stream = stream; // stream available to console
    if (window.URL) {
        _video.src = window.URL.createObjectURL(stream);
    } else {
        _video.src = stream;
    }
    var tracks = stream.getVideoTracks();
    if (tracks[0]) {
        console.log(tracks[0]);
        setTimeout(function () { console.log(tracks[0]); }, 1000);
    }
}

(где _video - это объект html5 на странице)

Firefox версии 31.0

версия Chrome 39.0.2171.71 м

Версия ОС: Windows 7 Ultimate (6.1.7601) SP1

Конвертер S-Video в USB: StarTech SVID2USB2NS (http://www.startech.com/AV/Converters/Video/USB-S-Video-Capture-Cable~SVID2USB2NS)

Исходная камера: Panasonic NV-DS35B (цифровая видеокамера)

Есть ли у кого-нибудь идеи, что вызывает это, и почему WebRTC не будет играть в мяч с помощью этого устройства?

(в более общих чертах, я знаю, что устройство отправляет видеосигнал на ПК, так как в IE я разработал элемент управления ActiveX, который использует DirectShow для получения видеопотока, и он собирает фид только отлично - разные технологии Я ценю, но это дает мне доказательства того, что устройство есть и отправляет видео!)

4b9b3361

Ответ 1

В спецификациях Media Capture Streams указано, что в течение жизненного цикла MediaStreamTrack состояние в реальном времени может быть заменено нулевым информационным содержимым, если MST либо "отключен", либо "отключен". Это приведет к рендерингу черные рамки.

Другими словами, носитель может поступать только из источника, если MST является одновременно, не включенным и включенным.

Состояние приглушенное/немытое отражает, если источник предоставляет любой носитель.

Состояние включено/отключено определяет, будет ли трек выводить медиа.

Убедитесь, что другое устройство не использует ваше исходное устройство. В вашем случае преобразователь StarTrack. Закройте все другие приложения, которые могут получить доступ к вашему устройству захвата при попытке getUserMedia в браузере.

Посетите этот Рабочий проект для получения дополнительной информации о жизненном цикле и потоке MST.

Другая проблема может заключаться в том, что ваше устройство не поддерживает носители, которые соответствуют ограничениям, присутствующим на вашем мультимедийном треке. Ваше устройство может передавать видеосигналы NTSC и PAL. Поэтому попробуйте отрегулировать ограничения для getUserMedia, например. для сигнала PAL, например:

{ 
  audio: false,
  video: {
    mandatory: {
      maxWidth: 768,
      maxHeight: 576,
      maxAspectRatio: 1.333,
      maxFrameRate: 25
  }
}

Надеюсь, что так или иначе поможет.