aws / amazon-chime-sdk-js

A JavaScript client library for integrating multi-party communications powered by the Amazon Chime service.
Apache License 2.0
704 stars 475 forks source link

several audioInputFailed exceptions thrown due to TypeError: undefined is not an object (evaluating 'navigator.mediaDevices.getSupportedConstraints') #2721

Open phienledev opened 1 year ago

phienledev commented 1 year ago

What happened and what did you expect to happen?

Our Angular/Ionic app was tested on iPhone models from 8 to 13 Pro Max without any issues during development. However, after launching it, we started seeing 'audioInputFailed' exceptions. These were especially prominent among users on the latest iOS 16.1 and Webkit 605.1.15, with numerous instances per user.

Interestingly, our server logs showed these exceptions were linked to devices lacking WebRTC support. This is surprising as, according to information available, iOS has been compatible with WebRTC from version 14.3 onwards.

The impact of these exceptions on the user experience is yet unclear, but the frequency has caused our executive team to express concerns about the app's performance.

Have you reviewed our existing documentation?

Reproduction steps

I can't reproduce this bug by myself or by development team but this exceptions was thrown in production CloudWatch so the team is unable to narrow down to specific reason to fix it.

Amazon Chime SDK for JavaScript version

3.15.0

What browsers are you seeing the problem on?

WebKit

Browser version

605.1.15

Meeting and Attendee ID Information.

attributes Value
@ingestionTime 1690574785740
-- --
attributes.attendeeId 3535058b-3ada-ef1b-3560-6eeefa8c1ad4
-- --
attributes.audioInputErrorMessage TypeError: undefined is not an object (evaluating 'navigator.mediaDevices.getSupportedConstraints')
-- --
attributes.browserMajorVersion 605
-- --
attributes.browserName WebKit
-- --
attributes.browserVersion 605.1.15
-- --
attributes.deviceName Apple iPhone
-- --
attributes.meetingId c842efc4-73c9-4ec5-9145-90525cd80706
-- --
attributes.osName iOS
-- --
attributes.osVersion 16.5
-- --
attributes.sdkVersion 3.15.0
-- --
name audioInputFailed
-- --
sessionId c77a2158-812d-ee11-8315-1246ea233f87
-- --

Browser console logs

331160937790:/aws/events/Chime /prod/meeting-events/c842efc4-73c9-4ec5-9145-90525cd80706/attendees/3535058b-3ada-ef1b-3560-6eeefa8c1ad4/638261712816188155 {"sessionId":"c77a2158-812d-ee11-8315-1246ea233f87","appointmentRid":116177800,"name":"audioInputFailed","attributes":{"attendeeId":"3535058b-3ada-ef1b-3560-6eeefa8c1ad4","browserMajorVersion":"605","browserName":"WebKit","browserVersion":"605.1.15","deviceName":"Apple iPhone","externalMeetingId":"","externalUserId":"","meetingId":"c842efc4-73c9-4ec5-9145-90525cd80706","osName":"iOS","osVersion":"16.5","sdkName":"amazon-chime-sdk-js","sdkVersion":"3.15.0","timestampMs":1690574475703,"audioInputErrorMessage":"TypeError: undefined is not an object (evaluating \u0027navigator.mediaDevices.getSupportedConstraints\u0027)","meetingHistory":[{"name":"meetingStartRequested","timestampMs":1690574471761},{"name":"audioInputFailed","timestampMs":1690574471767},{"name":"videoInputUnselected","timestampMs":1690574472276},{"name":"audioInputFailed","timestampMs":1690574472598},{"name":"audioInputFailed","timestampMs":1690574474076},{"name":"audioInputFailed","timestampMs":1690574475703}]},"additional":[]} 1690574481633 116177800 3535058b-3ada-ef1b-3560-6eeefa8c1ad4 TypeError: undefined is not an object (evaluating 'navigator.mediaDevices.getSupportedConstraints') 605 WebKit 605.1.15 Apple iPhone meetingStartRequested 1690574471761 audioInputFailed 1690574471767 videoInputUnselected 1690574472276 audioInputFailed 1690574472598 audioInputFailed 1690574474076 audioInputFailed 1690574475703 c842efc4-73c9-4ec5-9145-90525cd80706 iOS 16.5 amazon-chime-sdk-js 3.15.0 1690574475703 audioInputFailed c77a2158-812d-ee11-8315-1246ea233f87

michhyun1 commented 1 year ago

I think I've seen this before - but could you take a look at this related issue?: https://github.com/MABelanger/jslib-html5-camera-photo/issues/12

phienledev commented 1 year ago

The issue mentioned above concern ensuring the page is in secure context for webRTC support. I've double-checked this my self by verifying window.isSecureContext() which returns true. It seems the issue occurs only under specific conditions, but so far, I've been unable to reproduce it. FYI, one of the device I can capture from prod logs that indicates the webRTC is not supported is from iPad Pro (12.9-inch) (3rd generation). Look forward to your advices,