@@ -41,7 +41,7 @@ protected virtual void UnmangleEntries(List<KeyValuePair<string, string>> entrie
4141 {
4242 sb . Clear ( ) ;
4343 var currentKey = pair . Key ;
44- foreach ( var ch in pair . Value . Concat ( new [ ] { '\0 ' } ) )
44+ foreach ( var ch in pair . Value . Concat ( new [ ] { '\0 ' } ) )
4545 {
4646 switch ( ch )
4747 {
@@ -118,7 +118,7 @@ void Feed(string key, string value)
118118
119119 case "type" :
120120 draft . Type = value ;
121- var parts = value . Split ( new [ ] { ';' } , 2 , StringSplitOptions . RemoveEmptyEntries ) ;
121+ var parts = value . Split ( new [ ] { ';' } , 2 , StringSplitOptions . RemoveEmptyEntries ) ;
122122 draft . Mime = parts [ 0 ] ;
123123 break ;
124124
@@ -192,7 +192,7 @@ void Feed(string key, string value)
192192
193193 case "type" :
194194 draft . Type = value ;
195- var parts = value . Split ( new [ ] { ';' } , 2 , StringSplitOptions . RemoveEmptyEntries ) ;
195+ var parts = value . Split ( new [ ] { ';' } , 2 , StringSplitOptions . RemoveEmptyEntries ) ;
196196 draft . Mime = parts [ 0 ] ;
197197 break ;
198198
@@ -268,8 +268,8 @@ protected virtual YouTubeMuxedStream TranslateMuxedStream(JObject input)
268268 } ;
269269 result . Mime = ExtractActualMime ( result . Type ) ;
270270
271- // get cipher info
272- var cipher = input . Value < string > ( "cipher" ) ;
271+ // get cipher info (+signatureCipher)
272+ var cipher = input . Value < string > ( "cipher" ) ?? input . Value < string > ( "signatureCipher" ) ;
273273 if ( ! string . IsNullOrEmpty ( cipher ) )
274274 UpdateStreamCipherInfo ( result , cipher ) ;
275275
@@ -301,7 +301,7 @@ protected virtual YouTubeAdaptiveStream TranslateAdaptiveStream(JObject input)
301301 result . Mime = ExtractActualMime ( result . Type ) ;
302302
303303 // get cipher info
304- var cipher = input . Value < string > ( "cipher" ) ;
304+ var cipher = input . Value < string > ( "cipher" ) ?? input . Value < string > ( "signatureCipher" ) ;
305305 if ( ! string . IsNullOrEmpty ( cipher ) )
306306 UpdateStreamCipherInfo ( result , cipher ) ;
307307
@@ -376,7 +376,7 @@ protected virtual YouTubePlayerResponse ExtractPlayerResponseMetadata(JToken pla
376376 /// </summary>
377377 protected virtual async Task < YouTubeMetadata > DownloadMetadata ( string id , CancellationToken cancellationToken )
378378 {
379- var rawMetadata = new Dictionary < string , string > ( ) ;
379+ IDictionary < string , string > rawMetadata ;
380380 Status . Update ( null , "Downloading metadata..." , WorkStatusType . DownloadingFile ) ;
381381
382382 // make http client
@@ -387,15 +387,7 @@ protected virtual async Task<YouTubeMetadata> DownloadMetadata(string id, Cancel
387387 {
388388 // decode metadata into rawMetadata
389389 var content = await response . Content . ReadAsStringAsync ( ) ;
390- var @params = content . Split ( '&' ) ;
391- foreach ( var param in @params )
392- {
393- var pair = param . Split ( '=' )
394- . Select ( Uri . UnescapeDataString )
395- . ToArray ( ) ;
396-
397- rawMetadata . Add ( pair [ 0 ] , pair [ 1 ] ) ;
398- }
390+ rawMetadata = YouTubeUtils . ExtractUrlEncodedParamMap ( content ) ;
399391 }
400392
401393 // extract metadata
0 commit comments