@@ -24,6 +24,8 @@ struct flv_muxer_t
24
24
flv_muxer_handler handler ;
25
25
void * param ;
26
26
27
+ int enhanced_rtmp ; // support enhance rtmp extension
28
+
27
29
uint8_t audio_sequence_header ;
28
30
uint8_t video_sequence_header ;
29
31
@@ -59,6 +61,9 @@ struct flv_muxer_t* flv_muxer_create(flv_muxer_handler handler, void* param)
59
61
flv_muxer_reset (flv );
60
62
flv -> handler = handler ;
61
63
flv -> param = param ;
64
+ #ifdef FLV_ENHANCE_RTMP
65
+ flv -> enhanced_rtmp = 1 ;
66
+ #endif
62
67
return flv ;
63
68
}
64
69
@@ -82,6 +87,11 @@ int flv_muxer_reset(struct flv_muxer_t* flv)
82
87
return 0 ;
83
88
}
84
89
90
+ void flv_muxer_set_enhanced_rtmp (flv_muxer_t * muxer , int enable )
91
+ {
92
+ muxer -> enhanced_rtmp = enable ;
93
+ }
94
+
85
95
static int flv_muxer_alloc (struct flv_muxer_t * flv , size_t bytes )
86
96
{
87
97
void * p ;
@@ -261,6 +271,7 @@ static int flv_muxer_h264(struct flv_muxer_t* flv, uint32_t pts, uint32_t dts)
261
271
struct flv_video_tag_header_t video ;
262
272
263
273
video .codecid = FLV_VIDEO_H264 ;
274
+ video .enhanced_rtmp = flv -> enhanced_rtmp ;
264
275
if ( /*0 == flv->video_sequence_header &&*/ flv -> update && flv -> v .avc .nb_sps > 0 && flv -> v .avc .nb_pps > 0 )
265
276
{
266
277
video .cts = 0 ;
@@ -313,6 +324,7 @@ static int flv_muxer_h265(struct flv_muxer_t* flv, uint32_t pts, uint32_t dts)
313
324
struct flv_video_tag_header_t video ;
314
325
315
326
video .codecid = FLV_VIDEO_H265 ;
327
+ video .enhanced_rtmp = flv -> enhanced_rtmp ;
316
328
if ( /*0 == flv->avc_sequence_header &&*/ flv -> update && flv -> v .hevc .numOfArrays >= 3 ) // vps + sps + pps
317
329
{
318
330
video .cts = 0 ;
@@ -351,9 +363,8 @@ int flv_muxer_hevc(struct flv_muxer_t* flv, const void* data, size_t bytes, uint
351
363
}
352
364
353
365
flv -> bytes = 5 ;
354
- #ifdef FLV_ENHANCE_RTMP
355
- flv -> bytes += dts == pts ? 0 : 3 ;
356
- #endif
366
+ if (flv -> enhanced_rtmp )
367
+ flv -> bytes += dts == pts ? 0 : 3 ;
357
368
flv -> bytes += h265_annexbtomp4 (& flv -> v .hevc , data , bytes , flv -> ptr + flv -> bytes , flv -> capacity - flv -> bytes , & flv -> vcl , & flv -> update );
358
369
if (flv -> bytes <= 5 )
359
370
return - ENOMEM ;
@@ -368,6 +379,7 @@ static int flv_muxer_h266(struct flv_muxer_t* flv, uint32_t pts, uint32_t dts)
368
379
struct flv_video_tag_header_t video ;
369
380
370
381
video .codecid = FLV_VIDEO_H266 ;
382
+ video .enhanced_rtmp = flv -> enhanced_rtmp ;
371
383
if ( /*0 == flv->avc_sequence_header &&*/ flv -> update && flv -> v .vvc .numOfArrays >= 3 ) // vps + sps + pps
372
384
{
373
385
video .cts = 0 ;
@@ -406,9 +418,8 @@ int flv_muxer_vvc(struct flv_muxer_t* flv, const void* data, size_t bytes, uint3
406
418
}
407
419
408
420
flv -> bytes = 5 ;
409
- #ifdef FLV_ENHANCE_RTMP
410
- flv -> bytes += dts == pts ? 0 : 3 ;
411
- #endif
421
+ if (flv -> enhanced_rtmp )
422
+ flv -> bytes += dts == pts ? 0 : 3 ;
412
423
flv -> bytes += h266_annexbtomp4 (& flv -> v .vvc , data , bytes , flv -> ptr + flv -> bytes , flv -> capacity - flv -> bytes , & flv -> vcl , & flv -> update );
413
424
if (flv -> bytes <= 5 )
414
425
return - ENOMEM ;
@@ -429,6 +440,7 @@ int flv_muxer_av1(flv_muxer_t* flv, const void* data, size_t bytes, uint32_t pts
429
440
}
430
441
431
442
video .codecid = FLV_VIDEO_AV1 ;
443
+ video .enhanced_rtmp = flv -> enhanced_rtmp ;
432
444
if (0 == flv -> video_sequence_header )
433
445
{
434
446
// load av1 information
@@ -476,6 +488,7 @@ int flv_muxer_avs3(flv_muxer_t* flv, const void* data, size_t bytes, uint32_t pt
476
488
}
477
489
478
490
video .codecid = FLV_VIDEO_H266 ; // codec 14, same as H.266
491
+ video .enhanced_rtmp = flv -> enhanced_rtmp ;
479
492
if (0 == flv -> video_sequence_header )
480
493
{
481
494
// load avs information
0 commit comments