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)
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user