@@ -546,6 +546,156 @@ void media_playlist_parse_test2(void)
546
546
547
547
hlsparse_media_playlist_term (& playlist );
548
548
}
549
+
550
+ void media_playlist_parse_test3 (void )
551
+ {
552
+ media_playlist_t playlist ;
553
+ hlsparse_media_playlist_init (& playlist );
554
+
555
+ const char * src = "#EXTM3U\n\
556
+ #EXT-X-VERSION:3\n\
557
+ #EXT-X-TARGETDURATION:6\n\
558
+ #EXT-X-MEDIA-SEQUENCE:1\n\
559
+ #EXT-X-PLAYLIST-TYPE:VOD\n\
560
+ #EXT-X-PROGRAM-DATE-TIME:2018-08-11T21:42:39.900Z\n\
561
+ #EXT-X-ASSET-START:id=987,pop=\n\
562
+ #EXT-X-KEY:METHOD=AES-128,URI=\"https://key-service.com/key?id=123\",IV=0x3CEA3CC17B919213B8E7CFB5D10D4CAE\n\
563
+ #EXTINF:0.033,\n\
564
+ ADAP/00060/1001_ADAP_00001.ts\n\
565
+ #EXT-X-KEY:METHOD=NONE\n\
566
+ #EXT-X-CUE-OUT:_params=\"abc=d&efg=MIDROLL&pop=1\"\n\
567
+ #EXT-X-CUE-IN\n\
568
+ #EXT-X-KEY:METHOD=AES-128,URI=\"https://key-service.com/key?id=124\",IV=0x3CEA3CC17B919213B8E7CFB5D10D4CAF\n\
569
+ #EXTINF:4.972,\n\
570
+ ADAP/00060/1001_ADAP_00002.ts\n\
571
+ #EXTINF:5.005,\n\
572
+ ADAP/00060/1001_ADAP_00003.ts\n\
573
+ #EXTINF:4.605,\n\
574
+ ADAP/00060/1001_ADAP_00004.ts\n\
575
+ #EXT-X-KEY:METHOD=NONE\n\
576
+ #EXT-X-CUE-OUT:_fw_params=\"abc=a&efg=POSTROLL&pop=4\"\n\
577
+ #EXT-X-CUE-IN\n\
578
+ #EXT-X-ENDLIST\n" ;
579
+
580
+ int res = hlsparse_media_playlist (src , strlen (src ), & playlist );
581
+ CU_ASSERT_EQUAL (res , strlen (src ))
582
+ CU_ASSERT_EQUAL (playlist .m3u , HLS_TRUE );
583
+ CU_ASSERT_EQUAL (playlist .target_duration , 6 );
584
+ CU_ASSERT_EQUAL (playlist .media_sequence , 1 );
585
+ CU_ASSERT_EQUAL (playlist .discontinuity_sequence , 0 );
586
+ CU_ASSERT_EQUAL (playlist .playlist_type , PLAYLIST_TYPE_VOD );
587
+ CU_ASSERT_EQUAL (playlist .independent_segments , HLS_FALSE );
588
+ CU_ASSERT_EQUAL (playlist .iframes_only , HLS_FALSE );
589
+ CU_ASSERT_EQUAL (playlist .start .time_offset , 0.f );
590
+ CU_ASSERT_EQUAL (playlist .start .precise , HLS_FALSE );
591
+ CU_ASSERT_EQUAL (playlist .nb_segments , 5 );
592
+ CU_ASSERT_EQUAL (playlist .nb_maps , 0 );
593
+ CU_ASSERT_EQUAL (playlist .nb_dateranges , 0 );
594
+ CU_ASSERT_EQUAL (playlist .end_list , HLS_TRUE );
595
+
596
+ segment_list_t * seg = & playlist .segments ;
597
+ CU_ASSERT_NOT_EQUAL (seg -> data , NULL );
598
+ assert_string_equal (seg -> data -> uri , "ADAP/00060/1001_ADAP_00001.ts" , __func__ , __LINE__ );
599
+ CU_ASSERT_EQUAL (seg -> data -> sequence_num , 0 );
600
+ CU_ASSERT_EQUAL (seg -> data -> key_index , 0 );
601
+ CU_ASSERT_EQUAL (seg -> data -> map_index , -1 );
602
+ CU_ASSERT_EQUAL (seg -> data -> daterange_index , -1 );
603
+ CU_ASSERT_EQUAL (seg -> data -> title , NULL );
604
+ CU_ASSERT_EQUAL (seg -> data -> discontinuity , HLS_FALSE );
605
+ CU_ASSERT_EQUAL (seg -> data -> pdt_discontinuity , HLS_FALSE );
606
+ CU_ASSERT_EQUAL (seg -> data -> pdt , 1534023759900 );
607
+ CU_ASSERT_EQUAL (seg -> data -> pdt_end , 1534023759933 );
608
+ CU_ASSERT_EQUAL (seg -> data -> duration , 0.033f );
609
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .n , 0 );
610
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .o , 0 );
611
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .o , 0 );
612
+ CU_ASSERT_NOT_EQUAL (seg -> data -> custom_tags .data , NULL );
613
+ assert_string_equal (seg -> data -> custom_tags .data , "EXT-X-ASSET-START:id=987,pop=" , __func__ , __LINE__ );
614
+ CU_ASSERT_EQUAL (seg -> data -> custom_tags .next , NULL );
615
+
616
+ seg = seg -> next ;
617
+ CU_ASSERT_NOT_EQUAL (seg -> data , NULL );
618
+ assert_string_equal (seg -> data -> uri , "ADAP/00060/1001_ADAP_00002.ts" , __func__ , __LINE__ );
619
+ CU_ASSERT_EQUAL (seg -> data -> sequence_num , 1 );
620
+ CU_ASSERT_EQUAL (seg -> data -> key_index , 2 );
621
+ CU_ASSERT_EQUAL (seg -> data -> map_index , -1 );
622
+ CU_ASSERT_EQUAL (seg -> data -> daterange_index , -1 );
623
+ CU_ASSERT_EQUAL (seg -> data -> title , NULL );
624
+ CU_ASSERT_EQUAL (seg -> data -> discontinuity , HLS_FALSE );
625
+ CU_ASSERT_EQUAL (seg -> data -> pdt_discontinuity , HLS_FALSE );
626
+ CU_ASSERT_EQUAL (seg -> data -> pdt , 1534023759933 );
627
+ CU_ASSERT_EQUAL (seg -> data -> pdt_end , 1534023764905 );
628
+ CU_ASSERT_EQUAL (seg -> data -> duration , 4.972f );
629
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .n , 0 );
630
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .o , 0 );
631
+ CU_ASSERT_NOT_EQUAL (seg -> data -> custom_tags .data , NULL );
632
+ assert_string_equal (seg -> data -> custom_tags .data , "EXT-X-CUE-OUT:_params=\"abc=d&efg=MIDROLL&pop=1\"" , __func__ , __LINE__ );
633
+ CU_ASSERT_NOT_EQUAL (seg -> data -> custom_tags .next , NULL );
634
+ assert_string_equal (seg -> data -> custom_tags .next -> data , "EXT-X-CUE-IN" , __func__ , __LINE__ );
635
+ CU_ASSERT_EQUAL (seg -> data -> custom_tags .next -> next , NULL );
636
+
637
+ seg = seg -> next ;
638
+ CU_ASSERT_NOT_EQUAL (seg -> data , NULL );
639
+ assert_string_equal (seg -> data -> uri , "ADAP/00060/1001_ADAP_00003.ts" , __func__ , __LINE__ );
640
+ CU_ASSERT_EQUAL (seg -> data -> sequence_num , 2 );
641
+ CU_ASSERT_EQUAL (seg -> data -> key_index , 2 );
642
+ CU_ASSERT_EQUAL (seg -> data -> map_index , -1 );
643
+ CU_ASSERT_EQUAL (seg -> data -> daterange_index , -1 );
644
+ CU_ASSERT_EQUAL (seg -> data -> title , NULL );
645
+ CU_ASSERT_EQUAL (seg -> data -> discontinuity , HLS_FALSE );
646
+ CU_ASSERT_EQUAL (seg -> data -> pdt_discontinuity , HLS_FALSE );
647
+ CU_ASSERT_EQUAL (seg -> data -> pdt , 1534023764905 );
648
+ CU_ASSERT_EQUAL (seg -> data -> pdt_end , 1534023769910 );
649
+ CU_ASSERT_EQUAL (seg -> data -> duration , 5.005f );
650
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .n , 0 );
651
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .o , 0 );
652
+ CU_ASSERT_EQUAL (seg -> data -> custom_tags .data , NULL );
653
+ CU_ASSERT_EQUAL (seg -> data -> custom_tags .next , NULL );
654
+
655
+ seg = seg -> next ;
656
+ CU_ASSERT_NOT_EQUAL (seg -> data , NULL );
657
+ assert_string_equal (seg -> data -> uri , "ADAP/00060/1001_ADAP_00004.ts" , __func__ , __LINE__ );
658
+ CU_ASSERT_EQUAL (seg -> data -> sequence_num , 3 );
659
+ CU_ASSERT_EQUAL (seg -> data -> key_index , 2 );
660
+ CU_ASSERT_EQUAL (seg -> data -> map_index , -1 );
661
+ CU_ASSERT_EQUAL (seg -> data -> daterange_index , -1 );
662
+ CU_ASSERT_EQUAL (seg -> data -> title , NULL );
663
+ CU_ASSERT_EQUAL (seg -> data -> discontinuity , HLS_FALSE );
664
+ CU_ASSERT_EQUAL (seg -> data -> pdt_discontinuity , HLS_FALSE );
665
+ CU_ASSERT_EQUAL (seg -> data -> pdt , 1534023769910 );
666
+ CU_ASSERT_EQUAL (seg -> data -> pdt_end , 1534023774515 );
667
+ CU_ASSERT_EQUAL (seg -> data -> duration , 4.605f );
668
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .n , 0 );
669
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .o , 0 );
670
+ CU_ASSERT_EQUAL (seg -> data -> custom_tags .data , NULL );
671
+ CU_ASSERT_EQUAL (seg -> data -> custom_tags .next , NULL );
672
+
673
+ seg = seg -> next ;
674
+ CU_ASSERT_NOT_EQUAL (seg -> data , NULL );
675
+ CU_ASSERT_EQUAL (seg -> data -> uri , NULL );
676
+ CU_ASSERT_EQUAL (seg -> data -> sequence_num , 4 );
677
+ CU_ASSERT_EQUAL (seg -> data -> key_index , 3 );
678
+ CU_ASSERT_EQUAL (seg -> data -> map_index , -1 );
679
+ CU_ASSERT_EQUAL (seg -> data -> daterange_index , -1 );
680
+ CU_ASSERT_EQUAL (seg -> data -> title , NULL );
681
+ CU_ASSERT_EQUAL (seg -> data -> discontinuity , HLS_FALSE );
682
+ CU_ASSERT_EQUAL (seg -> data -> pdt_discontinuity , HLS_FALSE );
683
+ CU_ASSERT_EQUAL (seg -> data -> pdt , 1534023774515 );
684
+ CU_ASSERT_EQUAL (seg -> data -> pdt_end , 1534023774515 );
685
+ CU_ASSERT_EQUAL (seg -> data -> duration , 0.f );
686
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .n , 0 );
687
+ CU_ASSERT_EQUAL (seg -> data -> byte_range .o , 0 );
688
+ CU_ASSERT_NOT_EQUAL (seg -> data -> custom_tags .data , NULL );
689
+ assert_string_equal (seg -> data -> custom_tags .data , "EXT-X-CUE-OUT:_fw_params=\"abc=a&efg=POSTROLL&pop=4\"" , __func__ , __LINE__ );
690
+ CU_ASSERT_NOT_EQUAL (seg -> data -> custom_tags .next , NULL );
691
+ assert_string_equal (seg -> data -> custom_tags .next -> data , "EXT-X-CUE-IN" , __func__ , __LINE__ );
692
+ CU_ASSERT_EQUAL (seg -> data -> custom_tags .next -> next , NULL );
693
+
694
+ seg = seg -> next ;
695
+ CU_ASSERT_EQUAL (seg , NULL );
696
+
697
+ hlsparse_media_playlist_term (& playlist );
698
+ }
549
699
void setup (void )
550
700
{
551
701
hlsparse_global_init ();
@@ -558,5 +708,6 @@ void setup(void)
558
708
test ("media_playlist_term" , media_playlist_term_test );
559
709
test ("media_playlist_parse" , media_playlist_parse_test );
560
710
test ("media_playlist_parse2" , media_playlist_parse_test2 );
711
+ test ("media_playlist_parse3" , media_playlist_parse_test3 );
561
712
}
562
713
0 commit comments