@@ -1684,6 +1684,164 @@ QUnit.test('refreshXml_: updates media playlist reference if master changed', fu
1684
1684
) ;
1685
1685
} ) ;
1686
1686
1687
+ QUnit . test ( 'refreshXml_: updates playlists if segment uri changed, but media sequence did not' , function ( assert ) {
1688
+ const loader = new DashPlaylistLoader ( 'dash.mpd' , this . fakeVhs ) ;
1689
+
1690
+ loader . load ( ) ;
1691
+ this . standardXHRResponse ( this . requests . shift ( ) ) ;
1692
+
1693
+ const oldMaster = loader . master ;
1694
+ const oldMedia = loader . media ( ) ;
1695
+
1696
+ // change segment uris
1697
+ const newMasterXml = loader . masterXml_
1698
+ . replace ( / \$ R e p r e s e n t a t i o n I D \$ / g, '$RepresentationID$-foo' )
1699
+ . replace ( 'media="segment-$Number$.mp4"' , 'media="segment-foo$Number$.mp4"' ) ;
1700
+
1701
+ loader . refreshXml_ ( ) ;
1702
+
1703
+ assert . strictEqual ( this . requests . length , 1 , 'manifest is being requested' ) ;
1704
+
1705
+ this . requests . shift ( ) . respond ( 200 , null , newMasterXml ) ;
1706
+
1707
+ const newMaster = loader . master ;
1708
+ const newMedia = loader . media ( ) ;
1709
+
1710
+ assert . notEqual ( newMaster , oldMaster , 'master changed' ) ;
1711
+ assert . notEqual ( newMedia , oldMedia , 'media changed' ) ;
1712
+ assert . equal (
1713
+ newMedia ,
1714
+ newMaster . playlists [ newMedia . id ] ,
1715
+ 'media from updated master'
1716
+ ) ;
1717
+ } ) ;
1718
+
1719
+ QUnit . test ( 'refreshXml_: updates playlists if sidx changed' , function ( assert ) {
1720
+ const loader = new DashPlaylistLoader ( 'dash-sidx.mpd' , this . fakeVhs ) ;
1721
+
1722
+ loader . load ( ) ;
1723
+ this . standardXHRResponse ( this . requests . shift ( ) ) ;
1724
+ this . standardXHRResponse ( this . requests . shift ( ) , mp4VideoInitSegment ( ) . subarray ( 0 , 10 ) ) ;
1725
+ this . standardXHRResponse ( this . requests . shift ( ) , sidxResponse ( ) ) ;
1726
+
1727
+ const oldMaster = loader . master ;
1728
+ const oldMedia = loader . media ( ) ;
1729
+
1730
+ const newMasterXml = loader . masterXml_
1731
+ . replace ( / i n d e x R a n g e = " 2 0 0 - 3 9 9 " / g, 'indexRange="500-699"' ) ;
1732
+
1733
+ loader . refreshXml_ ( ) ;
1734
+
1735
+ assert . strictEqual ( this . requests . length , 1 , 'manifest is being requested' ) ;
1736
+
1737
+ this . standardXHRResponse ( this . requests . shift ( ) , newMasterXml ) ;
1738
+
1739
+ const newMaster = loader . master ;
1740
+ const newMedia = loader . media ( ) ;
1741
+
1742
+ assert . notEqual ( newMaster , oldMaster , 'master changed' ) ;
1743
+ assert . notEqual ( newMedia , oldMedia , 'media changed' ) ;
1744
+ assert . equal (
1745
+ newMedia ,
1746
+ newMaster . playlists [ newMedia . id ] ,
1747
+ 'media from updated master'
1748
+ ) ;
1749
+ } ) ;
1750
+
1751
+ QUnit . test ( 'refreshXml_: updates playlists if sidx removed' , function ( assert ) {
1752
+ const loader = new DashPlaylistLoader ( 'dash-sidx.mpd' , this . fakeVhs ) ;
1753
+
1754
+ loader . load ( ) ;
1755
+ this . standardXHRResponse ( this . requests . shift ( ) ) ;
1756
+ this . standardXHRResponse ( this . requests . shift ( ) , mp4VideoInitSegment ( ) . subarray ( 0 , 10 ) ) ;
1757
+ this . standardXHRResponse ( this . requests . shift ( ) , sidxResponse ( ) ) ;
1758
+
1759
+ const oldMaster = loader . master ;
1760
+ const oldMedia = loader . media ( ) ;
1761
+
1762
+ const newMasterXml = loader . masterXml_
1763
+ . replace ( / i n d e x R a n g e = " 2 0 0 - 3 9 9 " / g, '' ) ;
1764
+
1765
+ loader . refreshXml_ ( ) ;
1766
+
1767
+ assert . strictEqual ( this . requests . length , 1 , 'manifest is being requested' ) ;
1768
+
1769
+ this . standardXHRResponse ( this . requests . shift ( ) , newMasterXml ) ;
1770
+
1771
+ const newMaster = loader . master ;
1772
+ const newMedia = loader . media ( ) ;
1773
+
1774
+ assert . notEqual ( newMaster , oldMaster , 'master changed' ) ;
1775
+ assert . notEqual ( newMedia , oldMedia , 'media changed' ) ;
1776
+ assert . equal (
1777
+ newMedia ,
1778
+ newMaster . playlists [ newMedia . id ] ,
1779
+ 'media from updated master'
1780
+ ) ;
1781
+ } ) ;
1782
+
1783
+ QUnit . test ( 'refreshXml_: updates playlists if only segment byteranges change' , function ( assert ) {
1784
+ const loader = new DashPlaylistLoader ( 'dashByterange.mpd' , this . fakeVhs ) ;
1785
+
1786
+ loader . load ( ) ;
1787
+ this . standardXHRResponse ( this . requests . shift ( ) ) ;
1788
+
1789
+ const oldMaster = loader . master ;
1790
+ const oldMedia = loader . media ( ) ;
1791
+
1792
+ const newMasterXml = loader . masterXml_
1793
+ . replace ( 'mediaRange="12883295-13124492"' , 'mediaRange="12883296-13124492"' ) ;
1794
+
1795
+ loader . refreshXml_ ( ) ;
1796
+
1797
+ assert . strictEqual ( this . requests . length , 1 , 'manifest is being requested' ) ;
1798
+
1799
+ this . standardXHRResponse ( this . requests . shift ( ) , newMasterXml ) ;
1800
+
1801
+ const newMaster = loader . master ;
1802
+ const newMedia = loader . media ( ) ;
1803
+
1804
+ assert . notEqual ( newMaster , oldMaster , 'master changed' ) ;
1805
+ assert . notEqual ( newMedia , oldMedia , 'media changed' ) ;
1806
+ assert . equal (
1807
+ newMedia ,
1808
+ newMaster . playlists [ newMedia . id ] ,
1809
+ 'media from updated master'
1810
+ ) ;
1811
+ } ) ;
1812
+
1813
+ QUnit . test ( 'refreshXml_: updates playlists if sidx removed' , function ( assert ) {
1814
+ const loader = new DashPlaylistLoader ( 'dash-sidx.mpd' , this . fakeVhs ) ;
1815
+
1816
+ loader . load ( ) ;
1817
+ this . standardXHRResponse ( this . requests . shift ( ) ) ;
1818
+ this . standardXHRResponse ( this . requests . shift ( ) , mp4VideoInitSegment ( ) . subarray ( 0 , 10 ) ) ;
1819
+ this . standardXHRResponse ( this . requests . shift ( ) , sidxResponse ( ) ) ;
1820
+
1821
+ const oldMaster = loader . master ;
1822
+ const oldMedia = loader . media ( ) ;
1823
+
1824
+ const newMasterXml = loader . masterXml_
1825
+ . replace ( / i n d e x R a n g e = " 2 0 0 - 3 9 9 " / g, '' ) ;
1826
+
1827
+ loader . refreshXml_ ( ) ;
1828
+
1829
+ assert . strictEqual ( this . requests . length , 1 , 'manifest is being requested' ) ;
1830
+
1831
+ this . standardXHRResponse ( this . requests . shift ( ) , newMasterXml ) ;
1832
+
1833
+ const newMaster = loader . master ;
1834
+ const newMedia = loader . media ( ) ;
1835
+
1836
+ assert . notEqual ( newMaster , oldMaster , 'master changed' ) ;
1837
+ assert . notEqual ( newMedia , oldMedia , 'media changed' ) ;
1838
+ assert . equal (
1839
+ newMedia ,
1840
+ newMaster . playlists [ newMedia . id ] ,
1841
+ 'media from updated master'
1842
+ ) ;
1843
+ } ) ;
1844
+
1687
1845
QUnit . test ( 'addSidxSegments_: updates master with sidx information' , function ( assert ) {
1688
1846
const loader = new DashPlaylistLoader ( 'dash.mpd' , this . fakeVhs ) ;
1689
1847
const sidxData = sidxResponse ( ) ;
0 commit comments