javascript - node - WebRTC no puede obtener una transmisión de video desde un dispositivo de entrada USB(ReadyState va a terminar)
simple peer (1)
Estoy tratando de usar WebRTC para mostrar una entrada de video en pantalla como una transmisión en vivo. No estoy tratando de hacer ninguna comunicación de igual a igual ni nada de eso, solo mostrar un video.
El código que tengo funciona bien para mi laptop integrada, pero cuando conecto un dispositivo externo de entrada de video (en este caso una vieja videocámara conectada a través de S-Video a una entrada USB usando un convertidor StarTech - número de modelo SVID2USB2NS) no obtengo nada. Lo intenté tanto en Chrome como en Firefox.
Ambos navegadores encuentran el dispositivo de video y me ofrecen la opción de elegir entre mi cámara web integrada o el dispositivo USB (que en este caso aparece como "USB 2820"), de modo que conocen el dispositivo en este caso.
En Chrome, cuando trato de conectar, se llama a la devolución de llamada "exitosa" de la llamada a getUserMedia, si I .getVideoTracks () encuentro el MediaStreamTrack
, y el momento de la devolución de llamada, MediaStreamTrack
devuelve enabled
= true
y readyState
= live
. Sin embargo, no hay entrada de video (solo un panel de video negro, y el pequeño ícono rojo de "grabación" en la pestaña del navegador Chrome no aparece). Si readyState
MediaStreamTrack un segundo después, me parece que readyState
now = " ended
" (aunque habilitado sigue siendo cierto).
En FireFox, una vez más, se encuentra el dispositivo, pero cualquier intento de conectarse a él usando getUserMedia simplemente dispara la devolución de llamada de error, con un error HARDWARE_UNAVAILABLE.
Mi llamada getUserMedia
es simplemente:
navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback);
y mi exitosa devolución de llamada es (incluyendo algunos códigos de prueba para verificar el MediaStreamTrack
inmediatamente y un segundo después):
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);
}
}
(donde _video es el objeto html5 en la página)
Firefox versión 31.0
Chrome versión 39.0.2171.71 m
Versión del sistema operativo: Windows 7 Ultimate (6.1.7601) SP1
Convertidor S-Video a USB: StarTech SVID2USB2NS ( http://www.startech.com/AV/Converters/Video/USB-S-Video-Capture-Cable~SVID2USB2NS )
Cámara de origen: Panasonic NV-DS35B (Cámara de video digital)
¿Alguien tiene alguna idea de lo que está causando esto, y por qué WebRTC no jugará con este dispositivo?
(en términos más generales, sé que el dispositivo está enviando una señal de video a la PC, como en IE, he desarrollado un control ActiveX que usa DirectShow para obtener la alimentación de video, y recoge la alimentación muy bien, aprecio una tecnología diferente, ¡pero me da evidencia de que el dispositivo está allí y está enviando video!)
Las especificaciones de Media Capture Streams indican que durante el ciclo de vida de un MediaStreamTrack, el estado activo puede reemplazarse por contenido de información cero si el MST ha sido "silenciado" o "deshabilitado". Esto dará como resultado la renderización de cuadros negros.
En otras palabras, los medios solo pueden fluir desde la fuente si el MST es ambos, no silenciado y habilitado.
El estado silenciado / no silenciado refleja si la fuente proporciona algún medio.
El estado habilitado / deshabilitado determina si la pista emite medios.
Asegúrese de que ninguna otra aplicación esté usando su dispositivo fuente. En tu caso, el convertidor StarTrack. Cierre todas las demás aplicaciones que puedan tener acceso a su dispositivo de captura mientras intenta obtener UMedmedia en el navegador.
Visite este Borrador de Trabajo para obtener más información sobre el ciclo de vida y flujo de MST.
Otro problema puede ser que su dispositivo no proporciona medios que cumplan con las limitaciones presentes en su pista de medios. Su dispositivo puede enviar señales de video NTSC y PAL. Por lo tanto, intente ajustar las restricciones para getUserMedia, por ejemplo, para la señal PAL así:
{
audio: false,
video: {
mandatory: {
maxWidth: 768,
maxHeight: 576,
maxAspectRatio: 1.333,
maxFrameRate: 25
}
}
Espero que ayude de alguna manera.