@@ -199,6 +199,7 @@ SrsAvcAacCodec::SrsAvcAacCodec()
199
199
pictureParameterSetLength = 0 ;
200
200
pictureParameterSetNALUnit = NULL ;
201
201
202
+ payload_format = SrsAvcPayloadFormatGuess;
202
203
stream = new SrsStream ();
203
204
}
204
205
@@ -469,20 +470,42 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample
469
470
srs_error (" avc decode failed, sequence header not found. ret=%d" , ret);
470
471
return ret;
471
472
}
472
-
473
- // One or more NALUs (Full frames are required)
474
- // try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
475
- if ((ret = avc_demux_annexb_format (stream, sample)) != ERROR_SUCCESS) {
476
- // stop try when system error.
477
- if (ret != ERROR_HLS_AVC_TRY_OTHERS) {
478
- srs_error (" avc demux for annexb failed. ret=%d" , ret);
479
- return ret;
473
+
474
+ // guess for the first time.
475
+ if (payload_format == SrsAvcPayloadFormatGuess) {
476
+ // One or more NALUs (Full frames are required)
477
+ // try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
478
+ if ((ret = avc_demux_annexb_format (stream, sample)) != ERROR_SUCCESS) {
479
+ // stop try when system error.
480
+ if (ret != ERROR_HLS_AVC_TRY_OTHERS) {
481
+ srs_error (" avc demux for annexb failed. ret=%d" , ret);
482
+ return ret;
483
+ }
484
+
485
+ // try "ISO Base Media File Format" from H.264-AVC-ISO_IEC_14496-15.pdf, page 20
486
+ if ((ret = avc_demux_ibmf_format (stream, sample)) != ERROR_SUCCESS) {
487
+ return ret;
488
+ } else {
489
+ payload_format = SrsAvcPayloadFormatIbmf;
490
+ srs_info (" hls guess avc payload is ibmf format." );
491
+ }
492
+ } else {
493
+ payload_format = SrsAvcPayloadFormatAnnexb;
494
+ srs_info (" hls guess avc payload is annexb format." );
480
495
}
481
-
496
+ } else if (payload_format == SrsAvcPayloadFormatIbmf) {
482
497
// try "ISO Base Media File Format" from H.264-AVC-ISO_IEC_14496-15.pdf, page 20
483
498
if ((ret = avc_demux_ibmf_format (stream, sample)) != ERROR_SUCCESS) {
484
499
return ret;
485
500
}
501
+ srs_info (" hls decode avc payload in ibmf format." );
502
+ } else {
503
+ // One or more NALUs (Full frames are required)
504
+ // try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
505
+ if ((ret = avc_demux_annexb_format (stream, sample)) != ERROR_SUCCESS) {
506
+ return ret;
507
+ }
508
+ srs_info (" hls decode avc payload in annexb format." );
486
509
}
487
510
} else {
488
511
// ignored.
0 commit comments