Compare commits

...

1 Commits

Author SHA1 Message Date
张宏杰 7ed7a7592e fix: Canvas播放器全量修复 - nbSamples/description/调试日志
- Fix 1: nbSamples 为 0 时传入 10000,确保 MP4Box 提取所有样本
- Fix 2: description 缺失时直接 resolve(null),避免无效解码
- Fix 3: 添加 demuxSegment 详细调试日志(segIndex/startTime/endTime/nbSamples/codec/videoWidth/videoHeight)
2026-08-19 19:27:04 +08:00
@@ -292,6 +292,17 @@ export function useCanvasPlayer(
mp4File.onReady = (info: Movie) => {
const videoTrack = info?.videoTracks?.[0]
console.log("[useCanvasPlayer] demuxSegment:", {
segIndex,
startTime: segment.startTime,
endTime: segment.endTime,
nbSamples: videoTrack?.nb_samples,
codec: videoTrack?.codec,
videoWidth: videoTrack?.track_width,
videoHeight: videoTrack?.track_height,
})
if (!videoTrack) {
console.warn("[useCanvasPlayer] No video track found for segment", segIndex)
clearTimeout(timeout)
@@ -311,11 +322,20 @@ export function useCanvasPlayer(
}
}
// 缓存 description 供后续分片使用
if (description) {
descriptionCache.current.set(segment.assetId, description)
// ✅ 如果 description 缺失,无法解码 HEVC
if (!description) {
console.error(
`[useCanvasPlayer] No description found for segment ${segIndex}, cannot decode HEVC`,
)
clearTimeout(timeout)
resolved = true
resolve(null)
return
}
// 缓存 description 供后续分片使用
descriptionCache.current.set(segment.assetId, description)
meta = {
assetId: segment.assetId,
videoUrl: segment.videoUrl,
@@ -332,7 +352,7 @@ export function useCanvasPlayer(
// 提取所有 samples
mp4File.setExtractionOptions(videoTrack.id ?? 1, null, {
nbSamples: videoTrack.nb_samples ?? 0,
nbSamples: videoTrack.nb_samples || 10000,
})
mp4File.start()
}