UNPKG

rtc-detect

Version:
245 lines (162 loc) 11.5 kB
<p align="center"> <a href="https://intl.cloud.tencent.com/products/trtc"> <img width="200" src="https://web.sdk.qcloud.com/trtc/webrtc/assets/trtc-logo.png"> </a> </p> <h1 align="center">rtc-detect</h1> <div align="center"> rtc-detect is used to detect whether the current environment is working smoothly in WebRTC application built by TRTC SDK. [![NPM version](https://img.shields.io/npm/v/rtc-detect)](https://www.npmjs.com/package/rtc-detect) [![NPM downloads](https://img.shields.io/npm/dw/rtc-detect)](https://www.npmjs.com/package/rtc-detect) [![trtc.js](https://img.shields.io/bundlephobia/min/rtc-detect)](https://www.npmjs.com/package/rtc-detect) [![Documents](https://img.shields.io/badge/-Documents-blue)](https://github.com/FTTC/rtc-detect) [![Stars](https://img.shields.io/github/stars/FTTC/rtc-detect?style=social)](https://github.com/FTTC/rtc-detect) </div> English | [简体中文](https://github.com/FTTC/rtc-detect/blob/master/README.zh-cn.md) ## Introduction rtc-detect is used to detect whether the current environment is working smoothly in WebRTC application built by TRTC SDK. ## Install ```shell npm install rtc-detect ``` ## How to use ```javascript import RTCDetect from 'rtc-detect'; // init const detect = new RTCDetect(); // get detect result const result = await detect.getReportAsync(); console.log('result is: ' + result); ``` ## API ### (async) isTRTCSupported() This API is used to check whether the current environment supports TRTC. ```javascript const detect = new RTCDetect(); const data = await detect.isTRTCSupported(); if (data.result) { console.log('current browser supports TRTC.') } else { console.log(`current browser does not support TRTC, reason: ${data.reason}.`) } ``` ### getSystem() This API is used to get the current system environment parameters. | Item | Type | Description | |------------------------|----------|---------------------------------------| | UA | string | user agent | | OS | string | system | | browser | object | browser infomation: { name, version } | | displayResolution | object | resulution: { width, height } | | getHardwareConcurrency | number | current device CPU core count | ```javascript const detect = new RTCDetect(); const result = detect.getSystem(); ``` ### getAPISupported() This API is used to get the API support of the current environment. | Item | Type | Description | |------------------------------------|-----------|------------------------------------------------------------------------------------------| | isUserMediaSupported | boolean | whether to support getting user media from media device | | isWebRTCSupported | boolean | whether to support WebRTC | | isWebSocketSupported | boolean | whether to support WebSocket | | isWebAudioSupported | boolean | whether to support WebAudio | | isScreenCaptureAPISupported | boolean | whether to support getting media steam from screen | | isCanvasCapturingSupported | boolean | whether to support getting media stream from canvas element | | isVideoCapturingSupported | boolean | whether to support getting media stream from video element | | isRTPSenderReplaceTracksSupported | boolean | whether to support not renegotiating with peerConnection when replacing track | | isApplyConstraintsSupported | boolean | whether to support changing the resolution of the camera without re-calling getUserMedia | ```javascript const detect = new RTCDetect(); const result = detect.getAPISupported(); ``` ### (async) getDevicesAsync() This API is used to get the available devices in the current environment. | Item | Type | Description | |--------------------------|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | hasWebCamPermissions | boolean | Whether the user camera data can be obtained | | hasMicrophonePermission | boolean | Whether the user mic data can be obtained | | cameras | array<CameraItem> | A list of the user's camera devices, including information on the resolution of supported video streams, maximum aspect and maximum frame rate (maximum frame rate is not supported by some browsers) | | microphones | array<DeviceItem> | A list of user mics | | speakers | array<DeviceItem> | A list of user speakers | **CameraItem** | Item | Type | Description | |------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| | deviceId | string | Device ID, which is usually unique and can be used to capture identifying devices | | groupId | string | Group identifier, two devices have the same group identifier if they belong to the same physical device | | kind | string | Camera device type: 'videoinput' | | label | string | Label describing this device | | resolution | object | Information about the camera's supported resolutions, maximum width and height, and maximum frame rate, eg: {maxWidth: 1280, maxHeight: 720, maxFrameRate: 30} | **DeviceItem** | Item | Type | Description | |----------|----------|---------------------------------------------------------------------------------------------------------| | deviceId | string | Device ID, which is usually unique and can be used to capture identifying devices | | groupId | string | Group identifier, two devices have the same group identifier if they belong to the same physical device | | kind | string | Physical device type, eg: 'audioinput', 'audiooutput' | | label | string | Label describing this device | ```javascript const detect = new RTCDetect(); const result = await detect.getDevicesAsync(); ``` ### (async) getCodecAsync() This API is used to get the codec support of the current environment. | Item | Type | Description | |------------------------|-----------|------------------------------------| | isH264EncodeSupported | boolean | whether to support h264 uplink | | isH264DecodeSupported | boolean | whether to support h264 downlink | | isVp8EncodeSupported | boolean | whether to support vp8 uplink | | isVp8DecodeSupported | boolean | whether to support vp8 downlink | ```javascript const detect = new RTCDetect(); const result = await detect.getCodecAsync(); ``` ### (async) getReportAsync() This API is used to get the detection report of the current environment. | Item | Type | Description | |------------------|-----------|------------------------------------| | system | object | same as getSystem() result | | APISupported | object | same as getAPISupported() result | | codecsSupported | object | same as getCodecAsync() result | | devices | object | same as getDevicesAsync() result | ```javascript const detect = new RTCDetect(); const result = await detect.getReportAsync(); ``` ### (async) isHardWareAccelerationEnabled() This API is used to check whether hardware acceleration is enabled on the Chrome browser. Note: the implementation of this API depends on the native WebRTC API. We recommend you call this API for check after calling `isTRTCSupported`. The check can take up to 30 seconds as tested below: 1. If hardware acceleration is enabled, this API will take about 2 seconds on Windows and 10 seconds on macOS. 2. If hardware acceleration is disabled, this API will take about 30 seconds on both Windows and macOS. ```javascript const detect = new RTCDetect(); const data = await detect.isTRTCSupported(); if (data.result) { const result = await detect.isHardWareAccelerationEnabled(); console.log(`is hardware acceleration enabled: ${result}`); } else { console.log(`hardware acceleration is disabled`) } ``` ## Changelog ### Version 1.0.3 @2023.12.28 **Improvement** - Avoid the problem that navigator.mediaDevices has no method in some browsers. ### Version 1.0.2 @2023.04.24 **Improvement** - Optimising the performance of certain Android devices. ### Version 1.0.1 @2023.04.17 **Improvement** - Optimising performance on Windows. ### Version 1.0.0 @2023.03.17 **Bug Fixed** - Fixed resource usage on Safari. ### Version 0.0.5 @2022.02.11 **Feature** - The `camera` object obtained from the `getDevicesAsync()` method has a new `maxFrameRate` parameter indicating the maximum frame rate supported by the camera. ### Version 0.0.4 @2021.09.06 **Improvement** - Add reasons for detecting when WebRTC is not supported. ### Version 0.0.3 @2021.08.09 **Feature** - Added `isHardWareAccelerationEnable()` method to detect if Chrome has hardware acceleration enabled. ### Version 0.0.2 @2021.07.24 **Improvement** - Optimize the naming of some parameters. ### Version 0.0.1 @2021.07.13 - publish rtc-detect@0.0.1.