
    ĞigL                         d dl Z d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZmZmZmZmZmZ dd
lmZ  G d de
          ZdS )    N   )get_suitable_downloader)FFmpegFD)
FragmentFD   )webvtt)
Cryptodome)bug_reports_messageparse_m3u8_attributesremove_starttraverse_objupdate_url_queryurljoin)_request_dump_filenamec                   J    e Zd ZdZdZed             Zedd            Zd Z	dS )	HlsFDz
    Download segments in a m3u8 manifest. External downloaders can take over
    the fragment downloads by supporting the 'm3u8_frag_urls' protocol and
    re-defining 'supports_manifest' function
    	hlsnativec                 l    t          t          j        d                    d          |                     S )N|)z&#EXT-X-(?:SESSION-)?KEY:.*?URI="skd://zG#EXT-X-(?:SESSION-)?KEY:.*?KEYFORMAT="com\.apple\.streamingkeydelivery"z@#EXT-X-(?:SESSION-)?KEY:.*?KEYFORMAT="com\.microsoft\.playready"z#EXT-X-FAXS-CM:)boolresearchjoin)manifests    ZC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/downloader/hls.py_has_drmzHlsFD._has_drm   s<    BIchh (
  
     	    Fc                 `     g sdgz   fd}t           |                      S )Nz"#EXT-X-KEY:METHOD=(?!NONE|AES-128)c               3      K                        d           V  D ]} t          j        |            V  s                               V  d S d S )Nis_live)getr   r   r   )featureUNSUPPORTED_FEATURESallow_unplayable_formatscls	info_dictr   s    r   check_resultsz)HlsFD.can_download.<locals>.check_resultsB   s      mmI....../ 7 7)GX6666666+ 1,,x000000001 1r   )all)r%   r   r&   r$   r'   r#   s   ```` @r   can_downloadzHlsFD.can_download(   so     
& ( 	 5%  	1 	1 	1 	1 	1 	1 	1 	1 	1 ==??###r   c           	      L   / |d         }|                     d          }|r                      d j         d           n%                     d j         d            j                                                 ||                    }|j        }|                                } j                             d          rt          ||d         d  j                             d          	          }                     d j         d
|            t          |d          5 }|                    |           d d d            n# 1 swxY w Y   |                    dd          }                     || j                             d                    d }
}	|	rt          j                    }t           j        sDd|v r@t%          |dt&          f           }d                    |r|sdnd          }
|r|rd}	n@|
dz  }
n:|                     d          dk    r!t+          j        d|          r|rdnd}d| d}
|	s                     |          r j                             d          si|                     d          r; j                             d          r!                     d j         dd !           n                     d"d#           dS |
pd$}
t           j         j                  }                     |
 d%|                                            |                    ||          S |
r                     |
           |d&         d'k    }|rd }nt9          | j        d d(|d)k    *          }|r|                    |          sd }|r2                     d j         d+|                                            d, }d- }g }d.}d.}d}|                                D ]W}|                                }|s|                     d/          r ||          rd }n ||          rd}J|r|d0z  }R|d0z  }X|||d1}|r !                    |           n "                    ||           |#                    d2i           /|                     d3          }d }|                     d4          x}rtH          j%        &                    |          }d }|                     d5          x}rtH          j%        &                    |          }d.}d.}d6d7i} t%          |d8          }!|!r=tO          j(        tS          |!d9                    }!tU          |!          d:v s
J d;            t%          |d<          }"|"r5tO          j(        tS          |"d9          +                    d=                    }"i }#d.}$d.}%d.}&d}|                                D ]}|                                }|r{|                     d/          sn||%|k    r8|r;|&d0z  }&|&|d>         k    rMtY          ||          }'|rt[          |'|          }'|.                    |&|'| |#|d?           |d0z  }|#r
|#d@         }$i }#n|                     dA          r||%|k    r|&d.k    r                     dB            dS |&d0z  }&t_          |dCd                    }(tY          ||(                     dD                    }'|rt[          |'|          }'i })|(                     dE          rm|(                     dE          0                    dF          }*tU          |*          dGk    rtc          |*d0                   nd.}+|+|+tc          |*d.                   z   dH})|.                    |&|'| |)|d?           |d0z  }n|                     dI          r|                      dD          },t_          |dCd                    } | d6         dJk    r|"r|"| dK<   n<dK| v r8tO          j(        | dK         dGd          +                    d=                    | dK<   |!r|!| dL<   n%tY          || dD                   | dD<   |s|rt[          | dD         |p|          | dD<   |,| dD         k    rd | dL<   n|                     dM          rtc          |dNd                    }n|                     dO          rc|dPd          0                    dF          }*tU          |*          dGk    rtc          |*d0                   n|$}+|+|+tc          |*d.                   z   dH}#n6 ||          rd }n( ||          rd}n|                     dQ          r|%d0z  }%|d0z  } j                             dd          r|r|d.         nd g}|r1||dR<    | j         j                  }|                    ||          S |rS/ fdS}-/fdT}.tU          |          d0k    r 2                    |||           d S  2                    ||||-|.U           d S  2                    |||          S )VNurlhls_media_playlist_data[z)] Using m3u8 manifest from extracted infoz] Downloading m3u8 manifestwrite_pagesidtrim_file_name)trim_lengthz] Saving request to wbzutf-8ignorer$   z#EXT-X-KEY:METHOD=AES-128)extra_param_to_segment_urlextra_param_to_key_urlr,   )hls_aes)urikeyivz2The stream has AES-128 encryption and {} availablez$neither ffmpeg nor pycryptodomex arezpycryptodomex is notFzC; decryption will be performed natively, but will be extremely slowextractor_keyGenericz (?m)#EXT-X-MEDIA-SEQUENCE:(?!0$) zinstall ffmpeg and z]Live HLS streams are not supported by the native downloader. If this is a livestream, please z:add "--downloader ffmpeg --hls-use-mpegts" to your commandhas_drmtestz] This format is DRM protectedT)skip_eolzThis format is DRM protected; Try selecting another format with --format or add --check-formats to automatically fallback to the next best format)tbz'Unsupported features have been detectedz"; extraction will be delegated to extvttm3u8_frag_urls-)protocol	to_stdoutz*] Fragment downloads will be delegated to c                     |                      d          rd| v p)|                      d          o|                     d          S )N#ANVATO-SEGMENT-INFOztype=ad#UPLYNK-SEGMENTz,ad
startswithendswithss    r   is_ad_fragment_startz1HlsFD.real_download.<locals>.is_ad_fragment_start   sH    \\"899Li1n O%677MAJJu<M<MPr   c                     |                      d          rd| v p)|                      d          o|                     d          S )NrH   ztype=masterrI   z,segmentrJ   rM   s    r   is_ad_fragment_endz/HlsFD.real_download.<locals>.is_ad_fragment_end   sI    \\"899Pmq>P T%677RAJJz<R<RUr   r   #r   )filenametotal_fragsad_fragsextra_stateformat_indexr4   r5   METHODNONE)r6   r8   0x)          z"Invalid length for HLS AES-128 key)r6   r9   r]   fragment_index)
frag_indexr+   decrypt_info
byte_rangemedia_sequenceendz
#EXT-X-MAPzGInitialization fragment found after media fragments, unable to download   URI	BYTERANGE@r   )startrc   z
#EXT-X-KEYzAES-128IVKEYz#EXT-X-MEDIA-SEQUENCE   z#EXT-X-BYTERANGE   z#EXT-X-DISCONTINUITY	fragmentsc           	      .   t          j                    }d}d}d }t          j        |           D ]}t	          |t          j                  r8|d<   |rdxx         dz  cc<   d}|xj        |z  c_        |xj        |z  c_                            dg           }g }d}	d}
|	t          |          k     r||	         }t          j        
                    |          }|	dz  }	|                    |          r|j        |d<   d}
a||k    rd}
j|j        |j        k    r{|                    |           |	dz  }	||	= |	t          |          k     |
r|                    |j                   |D ]}|                    |           Vt	          |t          j                  r|j        d|_                            dd           |xj        d         d	z  z  c_        |j                            dd          k     rd}|xj        d
z  c_        |j        }|dk    r|j        pdd<   |j        pdd<   n|j        D|j        =|j                            dd          z
  |j                            dd          z
  z
  }Qt	          |t          j                  r@|dk    r:                    t+          dt-          |          j         d                     |                    |           |                                                                S )Nr   Fwebvtt_mpegts_lastwebvtt_mpegts_adjustr   webvtt_dedup_windowTrc   !   l        webvtt_mpegtswebvtt_localzDiscarding a zO block found in the middle of the stream; if the subtitles display incorrectly,)ioStringIOr   parse_fragment
isinstanceCueBlockrh   rc   
setdefaultlen	from_jsonhingesappendas_json
write_intoMagicmpegtsr!   localHeaderBlockreport_warningr
   type__name__getvalueencode)frag_contentr_   outputadjustoverflowmpegts_lastblockdedup_windowreadyiis_newwcuewblockrV   selfs                r   pack_fragmentz*HlsFD.real_download.<locals>.pack_fragment:  s    "#2<@@ E- E-E!%99 C%<G$89# -'(>???1D???',Hv-		V+		'2'='=>SUW'X'X "!%#l"3"333#/?D%+_%>%>t%D%DFFA%}}U33 ).3iU). (%). (%zEK77 (!LL000FA ,Q  #l"3"333" " ?(//>>>%* 5 5E!,,V4444 !#E6<88 % </+,EL#../EqIII4J(Kr(QQ <+//:NPQ*R*RRR'+H!LLG3LL&+l%??;@<;L1K8:?+:JK77  %|7EK<S%*\KOOOUV4W4W%W',{[__^UV5W5W'W%Y !' %#E6+=>> %%?? !//0C!HU0D !H !H !H1I 1I J J J %$$V,,,,((//111r   c                                          d          } | sdS t          j                    }| D ]4}t          j                            |                              |           5|                                                                S )Nrq   r   )	r!   ru   rv   r   ry   r|   r   r   r   )r   r   cuerV   s      r   fin_fragmentsz*HlsFD.real_download.<locals>.fin_fragments  s    */DEE# 3' F FCO--c22==fEEEE((//111r   )	pack_funcfinish_func)3r!   	to_screenFD_NAMEydlurlopen_prepare_urlr+   readparamsr   openwritedecoder)   r   	availabler	   AESr   anyformatr   r   r   report_errorr   get_basenamereal_downloadr   supports_manifest
splitlinesstriprK   _prepare_external_frag_download _prepare_and_start_frag_downloadrz   urllibparseparse_qsbinascii	unhexlifyr   r{   zfillr   r   r~   r   splitintdownload_and_append_fragments)0r   rS   r&   man_urlrN   urlhs_bytesdump_filenameoutfr)   message
has_ffmpegffmpeg_can_dlinstall_ffmpegfd	is_webvttreal_downloaderrO   rQ   rm   media_fragsrU   ad_frag_nextlinectxrW   extra_segment_queryr4   extra_key_queryr5   r   rb   r`   external_aes_keyexternal_aes_ivra   byte_range_offsetdiscontinuity_countr_   frag_urlmap_infomap_byte_rangesplitted_byte_rangesub_range_startdecrypt_urlr   r   rV   s0   `                                              @r   r   zHlsFD.real_downloadJ   s    E"MM344 	2NNVt|VVVWWWWNNHt|HHHIII8##D$5$5i$I$IJJDhGiikkG{}-- ( 6Yt_d $0@ A A!C !C !C T4<TT]TTUUU-.. ($JJw'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (w11A $ 1 1!YPj@k@k l lnrg 	q!+--J> q&AQ&F&F$0 > = % % ! OUU>K +T^ +::*, ,  e- e#(LLddGG//9<<KnpqArAr<'1!L7Lp%3p p p 	)}}Q 8R(S(S ==++ k0G0G kNN#St|#S#S#S^bNcccc%%`di & k k k uJ!JG$(DK00B7 a abooN_N_ a abbb##Hi888 	)(((e$-	 	f"OO54;7GT\`cTcf f fO 	#?#D#DQ#G#G 	#"O 	yNNwt|wwWfWsWsWuWuwwxxx	P 	P 	P	U 	U 	U 	LLNN 	 	D::<<D s## ''-- )#'LL''-- )#(L A1KK !& 
 
  	B00555511#yAAAnn]B77 }}^44")27S)T)TT% 	T"(,"7"78R"S"S%.]]3K%L%LL! 	L$l334JKKO &)'	3EFF 	_'1,?OQU2V2VWW'((L888:^888&y2CDD 	`&0ot1T1T1Z1Z[]1^1^__O

LLNN _	 _	D::<<D ]s++ [-#/4G<4W4W # ! !OJ!S)9%::: &w55H* S#3H>Q#R#R$$&0'(4&0*8& &    #a'N " (,6u,=)%'
__\22 A-#/4G<4W4W !A~~))eg g g$uu!OJ4T"##Y??H&wU0C0CDDH* S#3H>Q#R#R%'N||K00 .6ll;.G.G.M.Mc.R.R+ILM`IaIaefIfIf#.A!.D*E*E*Elm%4#2S9LQ9O5P5P#P* *
 $$&0'(4&4*8& &    #a'NN__\22 !-"."2"25"9"9K#8bcc#C#CL#H-::* f1@L..!\11191CLQUDVWXWYWYDZD`D`acDdDd1e1eL.+ 	;2BL//29'<PUCV2W2WL/. a2E a6F$0$79_L_7a 7aU 3*l5.AAA6:U 3__%<== -%(bcc^^NN__%788 -*.rss)//#*>*>'EHI\E]E]abEbEbc*=a*@&A&A&AhyO!0.5H5K1L1LL" "JJ *)$// -#'LL''-- -#(LL__%;<< -'1,'Q ;??65)) 	>)2<1=I 	9%.Ik" 4;77B ##Hi888 `	QL2 L2 L2 L2 L2 L2\	2 	2 	2 	2 	2 9~~""223	9MMMMM22ITa 3 c c c c c 55c9iPPPs   $EE
E
N)F)
r   
__module____qualname____doc__r   staticmethodr   classmethodr)   r    r   r   r   r      sx          G  \ $ $ $ [$BOQ OQ OQ OQ OQr   r   )r   ru   r   urllib.parser   r<   r   externalr   fragmentr   r   dependenciesr	   utilsr
   r   r   r   r   r   utils._utilsr   r   r   r   r   <module>r      s2    				 				     % % % % % %                         % % % % % %                2 1 1 1 1 1CQ CQ CQ CQ CQJ CQ CQ CQ CQ CQr   