@@ -404,18 +404,25 @@ private bool readPhysicalData(EBMLReader reader)
404
404
405
405
// Find AudioDataOffset using Clusters' timecodes
406
406
reader . seek ( segmentOffset ) ;
407
- // Cluster with Timecode 0
407
+ // Seek Cluster with Timecode 0
408
408
crits = new HashSet < Tuple < long , int > >
409
409
{
410
410
new Tuple < long , int > ( ID_TIMESTAMP , 0 ) , // Timestamp
411
411
} ;
412
- res = reader . seekElement ( ID_CLUSTER , crits ) ; // Cluster
412
+ res = reader . seekElement ( ID_CLUSTER , crits ) ;
413
413
if ( res != EBMLReader . SeekResult . FOUND_MATCH )
414
414
{
415
415
LogDelegator . GetLogDelegate ( ) ( Log . LV_WARNING , "Couldn't locate Cluster for timestamp 0" ) ;
416
- return false ;
416
+ // Seek first cluster instead
417
+ reader . seek ( segmentOffset ) ;
418
+ if ( ! reader . seekElement ( ID_CLUSTER ) )
419
+ {
420
+ LogDelegator . GetLogDelegate ( ) ( Log . LV_WARNING , "Couldn't locate any Cluster!" ) ;
421
+ return false ;
422
+ }
417
423
}
418
- long zeroClusterOffset = reader . Position ;
424
+
425
+ long firstClusterOffset = reader . Position ;
419
426
420
427
long blockAudioSize = - 1 ;
421
428
while ( - 1 == AudioDataOffset )
@@ -440,7 +447,7 @@ private bool readPhysicalData(EBMLReader reader)
440
447
else break ;
441
448
}
442
449
443
- reader . seek ( zeroClusterOffset ) ;
450
+ reader . seek ( firstClusterOffset ) ;
444
451
while ( - 1 == AudioDataOffset )
445
452
{
446
453
if ( reader . seekElement ( ID_SIMPLEBLOCK ) ) // SimpleBlock
0 commit comments