
    Ği;                         d dl Z d dlZ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mZ  G d d	e          Z G d
 dej                  Zd Zd Zd Zd Zd Zd Zd ZddZd Z G d de          ZdS )    N   )
FragmentFD   )compat_etree_fromstring)	HTTPError)fix_xml_ampersands
xpath_textc                       e Zd ZdS )DataTruncatedErrorN)__name__
__module____qualname__     ZC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/downloader/f4m.pyr   r      s        Dr   r   c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )	FlvReaderzi
    Reader for Flv files
    The file format is documented in https://www.adobe.com/devnet/f4v.html
    c                     |                      |          }t          |          |k     r!t          d|t          |          fz            |S )Nz6FlvReader error: need %d bytes while only %d bytes got)readlenr   )selfndatas      r   
read_byteszFlvReader.read_bytes   sR    yy||t99q==$Hs4yyL" "# # # r   c                 ^    t          j        d|                     d                    d         S )Nz!Q   r   structunpackr   r   s    r   read_unsigned_long_longz!FlvReader.read_unsigned_long_long!   %    }T4??1#5#566q99r   c                 ^    t          j        d|                     d                    d         S )N!I   r   r   r    s    r   read_unsigned_intzFlvReader.read_unsigned_int$   r"   r   c                 ^    t          j        d|                     d                    d         S )Nz!Br   r   r   r    s    r   read_unsigned_charzFlvReader.read_unsigned_char'   r"   r   c                 P    d}	 |                      d          }|dk    rn||z  }"|S )Nr   Tr       )r   )r   reschars      r   read_stringzFlvReader.read_string*   s>    	??1%%Dw4KC		
 
r   c                     |                                  x}}|                     d          }d}|dk    r|                                 }d}|||                     ||z
            fS )z[
        Read a box and return the info as a tuple: (box_size, box_type, box_data)
        r%   r   r      )r&   r   r!   )r   	real_sizesizebox_type
header_ends        r   read_box_infozFlvReader.read_box_info3   sm      11333	D??1%%
1994466IJ(DOOI
4J$K$KKKr   c                    |                                   |                     d           |                                  }t          |          D ]}|                                  |                                 }g }t          |          D ]A}|                                 }|                                 }|                    ||f           Bd|iS )N   segment_run)r(   r   ranger-   r&   append)r   quality_entry_count_segment_run_countsegmentsfirst_segmentfragments_per_segments          r   	read_asrtzFlvReader.read_asrt?   s    !!!"5577*++ 	 	A 2244()) 	D 	DA 2244M$($:$:$<$<!OO],ABCCCC 8
 	
r   c                 .   |                                   |                     d           |                                  |                                  }t          |          D ]}|                                  |                                 }g }t          |          D ]u}|                                 }|                                 }|                                 }|dk    r|                                  }nd }|                    ||||d           vd|iS )Nr6   r   )firsttsdurationdiscontinuity_indicator	fragments)r(   r   r&   r8   r-   r!   r9   )	r   r:   r;   fragments_countrF   rB   first_tsrD   rE   s	            r   	read_afrtzFlvReader.read_afrtT   s?   !!!   "5577*++ 	 	A0022	'' 	 	A**,,E3355H--//H1}}*.*A*A*C*C''*.'$+B	      
 	
r   c                    |                                   |                     d           |                                  |                                  }|dz  dk    }|                                  |                                  |                                  |                                  |                                  }t          |          D ]}|                                  |                                  }t          |          D ]}|                                  |                                  |                                  |                                  }g }t          |          D ]X}|                                 \  }}	}
|	dk    sJ t          |
                                          }|	                    |           Y|                                  }g }t          |          D ]V}|                                 \  }}	}
|	dk    sJ |	                    t          |
          
                                           W|||dS )Nr6       r   s   asrts   afrt)r=   rF   live)r(   r   r&   r!   r-   r8   r4   r   r@   r9   rI   )r   flagsrL   server_countr;   quality_countsegments_countr=   	_box_sizer2   box_datasegmentfragments_run_countrF   s                 r   	read_abstzFlvReader.read_abstv   s^   !!!   ''))t|q    $$&&&$$&&&..00|$$ 	 	A//11}%% 	 	A0022~&& 	% 	%A,0,>,>,@,@)Ixw&&&&))3355GOOG$$$$"5577	*++ 	> 	>A,0,>,>,@,@)Ixw&&&&Yx00::<<==== !"
 
 	
r   c                     |                                  \  }}}|dk    sJ t          |                                          S )Ns   abst)r4   r   rU   )r   r;   r2   rR   s       r   read_bootstrap_infozFlvReader.read_bootstrap_info   sE     $ 2 2 4 48X7"""""",,...r   N)r   r   r   __doc__r   r!   r&   r(   r-   r4   r@   rI   rU   rW   r   r   r   r   r      s         
  : : :: : :: : :  
L 
L 
L
 
 
* 
  
  
D1
 1
 1
f/ / / / /r   r   c                 D    t          |                                           S N)r   rW   )bootstrap_bytess    r   rW   rW      s    _%%99;;;r   c                 ^   g }| d         d         }| d         d         d         }|d         d         }t          j        |          }|d         D ]K\  }}|dk    r
| d         rd}t          |          D ]&}|                    |t	          |          f           'L| d         r
|d	d
         }|S )zE Return a list of (segment, fragment) for each fragment in the video r=   r   rF   rB   r7   l    rL   r   N)	itertoolscountr8   r9   next)		boot_infor+   segment_run_tablefragment_run_entry_tablefirst_frag_numberfragments_counterrS   rG   r;   s	            r   build_fragments_listrf      s    
C!*-a0(5a8E03G<!(9::$5m$D ; ;  j((Yv->(O'' 	; 	;AJJ&7!8!89::::	;  "##hJr   c                 V    |                      t          j        d|                     d S )Nr$   writer   packstreamvals     r   write_unsigned_intrn      s&    
LLT3''(((((r   c                 f    |                      t          j        d|          dd                     d S )Nr$   r   rh   rk   s     r   write_unsigned_int_24rp      s/    
LLT3''+,,,,,r   c                     |                      d           |                      d           |                      d           |                      d           dS )zWrites the FLV header to streams   FLV   s      	s       N)ri   )rl   s    r   write_flv_headerrs      sT     LL
LL
LL$%%%
LL$%%%%%r   c                    d}d}|r~|                      |           t          | t          |                     |                      d           |                      |           t          | |t          |          z              dS dS )z&Writes optional metadata tag to stream      s          N)ri   rp   r   rn   )rl   metadata
SCRIPT_TAGFLV_TAG_HEADER_LENs       r   write_metadata_tagrz      s    J GZ   fc(mm4444555X6#5H#EFFFFFG Gr   c                 >    t          t          d |                     S )Nc                 &    d| j         vod| j         vS )NdrmAdditionalHeaderIddrmAdditionalHeaderSetId)attrib)es    r   <lambda>z(remove_encrypted_media.<locals>.<lambda>   s!    !8!H "P%?qx%O r   )listfilter)medias    r   remove_encrypted_mediar      s/     P P    r   c                     d|| fz  S )Nz {http://ns.adobe.com/f4m/%d.0}%sr   )propvers     r   _add_nsr      s    -d;;r   c                     t          | t          d          t          dd          gdd           }|r|                                }|S )NbaseURLr   zbase URL)default)r	   r   strip)manifestbase_urls     r   get_base_urlr      sU    79%%wy!'<'<=D" " "H  $>>##Or   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )F4mFDz5
    A downloader for f4m manifests or AdobeHDS.
    c                    |                     t          d                    }|s|                     d           | j                            d          su|                     t          d                    |                     t          d                    z   D ] }d|j        vr|                     d           !t          |          }|s|                     d           |S )	Nr   zNo media foundallow_unplayable_formatsdrmAdditionalHeaderdrmAdditionalHeaderSetidzMissing ID in f4m DRMzUnsupported DRM)findallr   report_errorparamsgetr   r   )r   docr   r   s       r   _get_unencrypted_mediazF4mFD._get_unencrypted_media   s    GG,,-- 	0.///{9:: 	2kk'*?"@"@AAG,D$E$EFFG ? ? qx''%%&=>>>*511E 	1/000r   c                 x    | j                             |                                          }t          |          S rZ   )ydlurlopenr   rW   )r   bootstrap_url	bootstraps      r   _get_bootstrap_from_urlzF4mFD._get_bootstrap_from_url  s1    H$$]3388::	"9---r   c                     g }d}|s[|dk    rU|                      |          }t          |          }fd|D             }|st          j        d           |dz  }|s|dk    U|s|                     d           |S )N   r   c                 ,    g | ]}|d          k    |S r   r   ).0flatest_fragments     r   
<listcomp>z0F4mFD._update_live_fragments.<locals>.<listcomp>  s'    RRRA1Q4/;Q;Qa;Q;Q;Qr   g      @r   zFailed to update fragments)r   rf   timesleepr   )r   r   r   fragments_listretriesra   s     `   r   _update_live_fragmentszF4mFD._update_live_fragments  s    ! 	!44]CCI1)<<NRRRRRRRN! 
31 " 	!  	<:;;;r   c                     |                     d          }|r6t          j                            ||          }|                     |          }n*d }t          j        |j                  }t          |          }||fS )Nurl)	r   urllibparseurljoinr   base64	b64decodetextrW   )r   noder   r   ra   r   s         r   _parse_bootstrap_nodezF4mFD._parse_bootstrap_node$  s{      	7"L00-) )M44]CCII M(33I+I66I-''r   c                 
  & |d         }|                     d          &|                     d| j         d           | j                            |                     ||                    }|j        }t          |                                	                    dd                    
                                }t          |          }d |                     |          D             }&t          |          dk    rt          |d	 
          }|d         \  }}	n#t          t!          &fd|                    \  }}	t#          |          p|}
t$          j                            |
|	j        d                   }|                    t/          d                    }|                     ||
          \  }}|d         }|	                    t/          d                    }|t3          j        |j                  }nd }t9          |          }| j                             dd          }|r
|d d         }t          |          }t=          |t/          d                    }||t?          |          d}|                      |           |d         }|d         dk    r!tC          |           |stE          ||           t$          j        #                    |          }| $                    ||           d}|rW|%                    d          \  }}|dz  }||d         k    r-d||fz  }g }|j&        r|'                    |j&                   |r(|'                    |
                    d                     |                     d          r|'                    |d                    |(                    |j)        |z   d*                    |                    }	 | +                    ||,                                |          }|sdS | -                    |          } t]          |           }!	 	 |!/                                \  }}"}#n(# t`          $ r |r|1                    |            Y n# w xY w|"dk    r| 2                    ||#           n`nM# tf          $ r@}$|r3|$j4        dk    s|$j4        d k    rd!|z  }%| 5                    |%           g }n Y d }$~$nd }$~$ww xY w|sq|so|rm|rk| 6                    ||          }|t          |          z  }|rA|d         d         |dz   k    r,d"|d         d         |dz   z
  z  }%| 5                    |%           |W| 7                    ||          S )#Nr   tbr[z] Downloading f4m manifestzutf-8ignorec                 b    g | ],}t          |j                            d d                    |f-S )bitrate)intr   r   )r   r   s     r   r   z'F4mFD.real_download.<locals>.<listcomp>B  sE     > > > Y3344a8 > > >r   r   c                     | d         S Nr   r   )r   s    r   r   z%F4mFD.real_download.<locals>.<lambda>F  s
    AaD r   )keyr   c                 6    t          | d                   k    S r   )r   )r   requested_bitrates    r   r   z%F4mFD.real_download.<locals>.<lambda>J  s    #ad))'88 r   bootstrapInforL   rw   testFzpv-2.0)filenametotal_fragsrL   dest_streamcomplete_frags_downloaded_bytesr   fragment_indexzSeg%d-Frag%d;extra_param_to_segment_url&)pathqueryTs   mdati  i  zFragment %d unavailablezMissed %d fragments)8r   	to_screenFD_NAMEr   r   _prepare_urlr   r   r   decoder   r   r   r   sortedr`   r   r   r   r   r   r   findr   r   r   r   r   rf   r   r	   bool_prepare_frag_downloadrs   rz   urlparse_start_frag_downloadpopr   r9   _replacer   join_download_fragmentgeturl_read_fragmentr   r4   r   ri   _append_fragmentr   statusreport_warningr   _finish_frag_download)'r   r   	info_dictman_urlurlhr   r   formatsr;   r   man_base_urlr   bootstrap_nodera   r   rL   metadata_noderw   r   r   r   	akamai_pvctxr   base_url_parsed
frag_indexseg_ifrag_inamer   
url_parsedsuccess	down_datareaderr2   rR   errmsgr   s'                                         @r   real_downloadzF4mFD.real_download5  s   E"%MM%00C4<CCCDDDx 1 1)W E EFF( &diikk&8&8(&K&KLLRRTT%h//> > 77<<> > >$G(9(9W..999Gr{HAuuF8888'C C D DHAu $C((3G<''el56IJJ'/":":;;#'#=#=L$* $* 	= 

7:#6#677$'(:;;HHH-i88{vu-- 	0+BQB/N.))sGH$5$566	 !&JJ
 
 	##C(((-(01Q66[))) :";999 ,//99!!#y111
 2	-*..q11ME6!OJS!1222!UFO3DE$ 4_2333 3Y__S11222}}9:: FY'CDEEE(117Kd7RZ]ZbZbchZiZi1jjJ11#z7H7H7J7JIVV ! 5 //44	"9--
060D0D0F0F-8XX-    "
 (--i888!E  7**--c8<<<     SZ3..#*2C2C 4f<C'',,,%'NN #NNNN " -$ -4 -M -!%!<!<]F!S!Ss>222! -~a'8';fqj'H'H/>!3DQ3G6TU:3VWC'',,,e  2	-h ))#y999sB   +R	 %R	 )Q R	 !Q'#R	 %Q''!R	 	
S6SSN)	r   r   r   rX   r   r   r   r   r   r   r   r   r   r      sn            . . .  "( ( ("v: v: v: v: v:r   r   r   )r   ior^   r   r   urllib.parser   fragmentr   compatr   networking.exceptionsr   utilsr   r	   	Exceptionr   BytesIOr   rW   rf   rn   rp   rs   rz   r   r   r   r   r   r   r   <module>r     s    				                       , , , , , , - - - - - - 2 2 2 2 2 2 2 2	 	 	 	 	 	 	 	Z/ Z/ Z/ Z/ Z/
 Z/ Z/ Z/z< < <  ,) ) )- - -& & &
G 
G 
G  < < < <  q: q: q: q: q:J q: q: q: q: q:r   