mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-10-02 21:33:52 +02:00
Add onEncodedChunk callback
This commit is contained in:
+15
-4
@@ -122,7 +122,8 @@ export type VideoCodecConfig = {
|
|||||||
bitrate: number;
|
bitrate: number;
|
||||||
latencyMode?: VideoEncoderConfig['latencyMode'];
|
latencyMode?: VideoEncoderConfig['latencyMode'];
|
||||||
keyFrameInterval?: number;
|
keyFrameInterval?: number;
|
||||||
onEncodingError?: (error: Error) => void;
|
onEncodedChunk?: (chunk: EncodedVideoChunk, meta: EncodedVideoChunkMetadata | undefined) => unknown;
|
||||||
|
onEncodingError?: (error: Error) => unknown;
|
||||||
};
|
};
|
||||||
|
|
||||||
const validateVideoCodecConfig = (config: VideoCodecConfig) => {
|
const validateVideoCodecConfig = (config: VideoCodecConfig) => {
|
||||||
@@ -144,6 +145,9 @@ const validateVideoCodecConfig = (config: VideoCodecConfig) => {
|
|||||||
) {
|
) {
|
||||||
throw new TypeError('config.keyFrameInterval, when provided, must be a non-negative number.');
|
throw new TypeError('config.keyFrameInterval, when provided, must be a non-negative number.');
|
||||||
}
|
}
|
||||||
|
if (config.onEncodedChunk !== undefined && typeof config.onEncodedChunk !== 'function') {
|
||||||
|
throw new TypeError('config.onEncodedChunk, when provided, must be a function.');
|
||||||
|
}
|
||||||
if (config.onEncodingError !== undefined && typeof config.onEncodingError !== 'function') {
|
if (config.onEncodingError !== undefined && typeof config.onEncodingError !== 'function') {
|
||||||
throw new TypeError('config.onEncodingError, when provided, must be a function.');
|
throw new TypeError('config.onEncodingError, when provided, must be a function.');
|
||||||
}
|
}
|
||||||
@@ -206,7 +210,10 @@ class VideoEncoderWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.encoder = new VideoEncoder({
|
this.encoder = new VideoEncoder({
|
||||||
output: (chunk, meta) => void this.muxer!.addEncodedVideoChunk(this.source._connectedTrack!, chunk, meta),
|
output: (chunk, meta) => {
|
||||||
|
this.codecConfig.onEncodedChunk?.(chunk, meta);
|
||||||
|
void this.muxer!.addEncodedVideoChunk(this.source._connectedTrack!, chunk, meta);
|
||||||
|
},
|
||||||
error: this.codecConfig.onEncodingError ?? (error => console.error('VideoEncoder error:', error)),
|
error: this.codecConfig.onEncodingError ?? (error => console.error('VideoEncoder error:', error)),
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -403,7 +410,8 @@ export class EncodedAudioChunkSource extends AudioSource {
|
|||||||
export type AudioCodecConfig = {
|
export type AudioCodecConfig = {
|
||||||
codec: AudioCodec;
|
codec: AudioCodec;
|
||||||
bitrate: number;
|
bitrate: number;
|
||||||
onEncodingError?: (error: Error) => void;
|
onEncodedChunk?: (chunk: EncodedAudioChunk, meta: EncodedAudioChunkMetadata | undefined) => unknown;
|
||||||
|
onEncodingError?: (error: Error) => unknown;
|
||||||
};
|
};
|
||||||
|
|
||||||
const validateAudioCodecConfig = (config: AudioCodecConfig) => {
|
const validateAudioCodecConfig = (config: AudioCodecConfig) => {
|
||||||
@@ -469,7 +477,10 @@ class AudioEncoderWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.encoder = new AudioEncoder({
|
this.encoder = new AudioEncoder({
|
||||||
output: (chunk, meta) => void this.muxer!.addEncodedAudioChunk(this.source._connectedTrack!, chunk, meta),
|
output: (chunk, meta) => {
|
||||||
|
this.codecConfig.onEncodedChunk?.(chunk, meta);
|
||||||
|
void this.muxer!.addEncodedAudioChunk(this.source._connectedTrack!, chunk, meta);
|
||||||
|
},
|
||||||
error: this.codecConfig.onEncodingError ?? (error => console.error('AudioEncoder error:', error)),
|
error: this.codecConfig.onEncodingError ?? (error => console.error('AudioEncoder error:', error)),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user