Skip to content

Commit

Permalink
fix(avcodec): isConfigSupported 兼容抛错
Browse files Browse the repository at this point in the history
  • Loading branch information
zhaohappy committed Feb 19, 2025
1 parent b740229 commit 5ce604e
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 43 deletions.
25 changes: 17 additions & 8 deletions src/avcodec/webcodec/AudioDecoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,16 @@ export default class WebAudioDecoder {
delete config.description
}

const support = await AudioDecoder.isConfigSupported(config)

if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
try {
const support = await AudioDecoder.isConfigSupported(config)
if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
}
}
catch (error) {
logger.error(`${error}`)
return errorType.CODEC_NOT_SUPPORT
}

if (this.decoder && this.decoder.state !== 'closed') {
Expand Down Expand Up @@ -218,8 +223,12 @@ export default class WebAudioDecoder {
delete config.description
}

const support = await AudioDecoder.isConfigSupported(config)

return support.supported
try {
const support = await AudioDecoder.isConfigSupported(config)
return support.supported
}
catch (error) {
return false
}
}
}
26 changes: 17 additions & 9 deletions src/avcodec/webcodec/AudioEncoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,11 +122,16 @@ export default class WebAudioEncoder {
bitrateMode: 'constant'
}

const support = await AudioEncoder.isConfigSupported(config)

if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
try {
const support = await AudioEncoder.isConfigSupported(config)
if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
}
}
catch (error) {
logger.error(`${error}`)
return errorType.CODEC_NOT_SUPPORT
}

if (this.encoder && this.encoder.state !== 'closed') {
Expand Down Expand Up @@ -222,9 +227,12 @@ export default class WebAudioEncoder {
bitrate: static_cast<double>(parameters.bitrate),
bitrateMode: 'constant'
}

const support = await AudioEncoder.isConfigSupported(config)

return support.supported
try {
const support = await AudioEncoder.isConfigSupported(config)
return support.supported
}
catch (error) {
return false
}
}
}
25 changes: 17 additions & 8 deletions src/avcodec/webcodec/VideoDecoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,11 +173,16 @@ export default class WebVideoDecoder {
delete config.description
}

const support = await VideoDecoder.isConfigSupported(config)

if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
try {
const support = await VideoDecoder.isConfigSupported(config)
if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
}
}
catch (error) {
logger.error(`${error}`)
return errorType.CODEC_NOT_SUPPORT
}

if (this.decoder && this.decoder.state !== 'closed') {
Expand Down Expand Up @@ -361,8 +366,12 @@ export default class WebVideoDecoder {
delete config.description
}

const support = await VideoDecoder.isConfigSupported(config)

return support.supported
try {
const support = await VideoDecoder.isConfigSupported(config)
return support.supported
}
catch (error) {
return false
}
}
}
25 changes: 17 additions & 8 deletions src/avcodec/webcodec/VideoEncoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,16 @@ export default class WebVideoEncoder {
}
}

const support = await VideoEncoder.isConfigSupported(config)

if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
try {
const support = await VideoEncoder.isConfigSupported(config)
if (!support.supported) {
logger.error('not support')
return errorType.INVALID_PARAMETERS
}
}
catch (error) {
logger.error(`${error}`)
return errorType.CODEC_NOT_SUPPORT
}

if (this.encoder && this.encoder.state !== 'closed') {
Expand Down Expand Up @@ -372,8 +377,12 @@ export default class WebVideoEncoder {
}
}

const support = await VideoEncoder.isConfigSupported(config)

return support.supported
try {
const support = await VideoEncoder.isConfigSupported(config)
return support.supported
}
catch (error) {
return false
}
}
}
24 changes: 14 additions & 10 deletions src/avplayer/AVPlayer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -603,18 +603,22 @@ export default class AVPlayer extends Emitter implements ControllerObserver {
if (videoStream.codecpar.extradata !== nullptr) {
extradata = mapUint8Array(videoStream.codecpar.extradata, reinterpret_cast<size>(videoStream.codecpar.extradataSize))
}
// 检查视频格式是否支持硬解,不支持使用 mse
const isWebcodecSupport = await VideoDecoder.isConfigSupported({
codec: getVideoCodec(videoStream.codecpar),
codedWidth: videoStream.codecpar.width,
codedHeight: videoStream.codecpar.height,
description: extradata,
hardwareAcceleration: getHardwarePreference(true)
})

if (!isWebcodecSupport.supported) {
return true
try {
// 检查视频格式是否支持硬解,不支持使用 mse
const isWebcodecSupport = await VideoDecoder.isConfigSupported({
codec: getVideoCodec(videoStream.codecpar),
codedWidth: videoStream.codecpar.width,
codedHeight: videoStream.codecpar.height,
description: extradata,
hardwareAcceleration: getHardwarePreference(true)
})

if (!isWebcodecSupport.supported) {
return true
}
}
catch (e) {}
}
else if (videoStream.codecpar.width * videoStream.codecpar.height === 1920 * 1080) {
// safari 1080p@30fps 无法在 worker 中解码
Expand Down

0 comments on commit 5ce604e

Please sign in to comment.