@@ -1684,6 +1684,164 @@ QUnit.test('refreshXml_: updates media playlist reference if master changed', fu
16841684 ) ;
16851685} ) ;
16861686
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+
16871845QUnit . test ( 'addSidxSegments_: updates master with sidx information' , function ( assert ) {
16881846 const loader = new DashPlaylistLoader ( 'dash.mpd' , this . fakeVhs ) ;
16891847 const sidxData = sidxResponse ( ) ;
0 commit comments