rtc-detect
Version:
245 lines (162 loc) • 11.5 kB
Markdown
<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.
[](https://www.npmjs.com/package/rtc-detect) [](https://www.npmjs.com/package/rtc-detect) [](https://www.npmjs.com/package/rtc-detect) [](https://github.com/FTTC/rtc-detect) [](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.