feat: Add extra-low
and extra-high
bit-rate options (#2225)
This commit is contained in:
parent
d7f7095d1a
commit
a28135da20
@ -127,13 +127,18 @@ export class Camera extends React.PureComponent<CameraProps> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private getBitRateMultiplier(bitRate: RecordVideoOptions['videoBitRate']): number {
|
private getBitRateMultiplier(bitRate: RecordVideoOptions['videoBitRate']): number {
|
||||||
|
if (typeof bitRate === 'number' || bitRate == null) return 1
|
||||||
switch (bitRate) {
|
switch (bitRate) {
|
||||||
|
case 'extra-low':
|
||||||
|
return 0.6
|
||||||
case 'low':
|
case 'low':
|
||||||
return 0.8
|
return 0.8
|
||||||
|
case 'normal':
|
||||||
|
return 1
|
||||||
case 'high':
|
case 'high':
|
||||||
return 1.2
|
return 1.2
|
||||||
default:
|
case 'extra-high':
|
||||||
return 1
|
return 1.4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,14 +164,12 @@ export class Camera extends React.PureComponent<CameraProps> {
|
|||||||
throw new CameraRuntimeError('parameter/invalid-parameter', 'The onRecordingError or onRecordingFinished functions were not set!')
|
throw new CameraRuntimeError('parameter/invalid-parameter', 'The onRecordingError or onRecordingFinished functions were not set!')
|
||||||
|
|
||||||
const nativeOptions: NativeRecordVideoOptions = passThruOptions
|
const nativeOptions: NativeRecordVideoOptions = passThruOptions
|
||||||
if (typeof videoBitRate === 'string') {
|
if (typeof videoBitRate === 'number') {
|
||||||
// If the user passed 'low'/'normal'/'high', we need to apply this as a multiplier to the native bitrate instead of absolutely setting it
|
|
||||||
delete nativeOptions.videoBitRateOverride
|
|
||||||
nativeOptions.videoBitRateMultiplier = this.getBitRateMultiplier(videoBitRate)
|
|
||||||
} else {
|
|
||||||
// If the user passed an absolute number as a bit-rate, we just use this as a full override.
|
// If the user passed an absolute number as a bit-rate, we just use this as a full override.
|
||||||
delete nativeOptions.videoBitRateOverride
|
|
||||||
nativeOptions.videoBitRateOverride = videoBitRate
|
nativeOptions.videoBitRateOverride = videoBitRate
|
||||||
|
} else if (typeof videoBitRate === 'string' && videoBitRate !== 'normal') {
|
||||||
|
// If the user passed 'low'/'normal'/'high', we need to apply this as a multiplier to the native bitrate instead of absolutely setting it
|
||||||
|
nativeOptions.videoBitRateMultiplier = this.getBitRateMultiplier(videoBitRate)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onRecordCallback = (video?: VideoFile, error?: CameraCaptureError): void => {
|
const onRecordCallback = (video?: VideoFile, error?: CameraCaptureError): void => {
|
||||||
|
@ -21,20 +21,26 @@ export interface RecordVideoOptions {
|
|||||||
/**
|
/**
|
||||||
* The Video Codec to record in.
|
* The Video Codec to record in.
|
||||||
* - `h264`: Widely supported, but might be less efficient, especially with larger sizes or framerates.
|
* - `h264`: Widely supported, but might be less efficient, especially with larger sizes or framerates.
|
||||||
* - `h265`: The HEVC (High-Efficient-Video-Codec) for higher efficient video recordings.
|
* - `h265`: The HEVC (High-Efficient-Video-Codec) for higher efficient video recordings. Results in up to 50% smaller file-sizes.
|
||||||
*/
|
*/
|
||||||
videoCodec?: 'h264' | 'h265'
|
videoCodec?: 'h264' | 'h265'
|
||||||
/**
|
/**
|
||||||
* The bit-rate for encoding the video into a file, in Mbps (Megabits per second).
|
* The bit-rate for encoding the video into a file, in Mbps (Megabits per second).
|
||||||
*
|
*
|
||||||
* Bit-rate is dependant on various factors such as resolution, FPS, pixel format (whether it's 10 bit HDR or not), and codec.
|
* Bit-rate is dependant on various factors such as resolution, FPS, pixel format (whether it's 10 bit HDR or not), and video codec.
|
||||||
*
|
*
|
||||||
* By default, it will be calculated using those factors.
|
* By default, it will be calculated by the hardware encoder, which takes all those factors into account.
|
||||||
* For example, at 1080p, 30 FPS, H.264 codec, without HDR it will result to 10 Mbps.
|
*
|
||||||
|
* * `extra-low`: 40% lower than whatever the hardware encoder recommends.
|
||||||
|
* * `low`: 20% lower than whatever the hardware encoder recommends.
|
||||||
|
* * `normal`: The recommended value by the hardware encoder.
|
||||||
|
* * `high`: 20% higher than whatever the hardware encoder recommends.
|
||||||
|
* * `extra-high`: 40% higher than whatever the hardware encoder recommends.
|
||||||
|
* * `number`: Any custom number for the bit-rate, in Mbps.
|
||||||
*
|
*
|
||||||
* @default 'normal'
|
* @default 'normal'
|
||||||
*/
|
*/
|
||||||
videoBitRate?: 'low' | 'normal' | 'high' | number
|
videoBitRate?: 'extra-low' | 'low' | 'normal' | 'high' | 'extra-high' | number
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user