macOS Safari: проблема с (getUserMedia) получением видеопотока с камеры под углом 6 - NotReadableError: сбой операции чтения ввода-вывода - PullRequest
0 голосов
/ 12 сентября 2018

Проблема возникает, когда я пытаюсь получить видео поток с камеры в mac на safari.
Для получения потока я использую функцию navigator.mediaDevices.getUserMedia({video: true})
На chrome это работает хорошо, но в safari иногда выдает ошибку:

NotReadableError: Сбой операции чтения ввода-вывода.

console error screen

Самое странное, что это не стабильно, может появиться ошибка и через некоторое время все будет работать нормально (без изменения кода) ... Я много раз проверял и не нашел Зависимость почему это или работа или нет.

Еще одна странная вещь: ошибка отображается только в угловых значениях , поэтому я подумал, что проблема может быть с zone.js, но я не нашел решения при попытке вынести вызов функции для получения потока из zone (для вывоза из zone я использовал runOutsideAngular и run).

Я пытался использовать некоторые npm библиотеки, такие как ngx-webcam, ack-angular-webcam, но это тоже не помогло, когда ошибка показывает в моем коде, она появляется и в коде плагинов (я думаю, это потому, что они используют одну и ту же функцию). получить поток).

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

Мой вопрос
Как избежать появления этой ошибки, почему она отображается не постоянно и в чем причина этой ошибки?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Может быть связано с zone.js (который является частью angular6)

Попробуйте открыть polyfills.ts и добавить

   // rtc peer connection patch
   import 'zone.js/dist/webapis-rtc-peer-connection';
   // getUserMedia patch
   import 'zone.js/dist/zone-patch-user-media.js';

после

import 'zone.js/dist/zone'; 

пример здесь .Однако теперь это иногда работает в моем приложении.

0 голосов
/ 27 сентября 2018

Не относится к угловой, просто работает:

navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(function(e) {console.log("success",e);}, function(e){console.log("reject",e);})

в консоли javascript, и вы увидите ошибку ввода-вывода, только в Safari. Это похоже на ошибку WebKit.

(я завершу ответ, как только найду более подробную информацию).

...