U
    ‹¾úgn-  ã                   @   s  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	 e 
d¡Ze 
d¡Ze 
d	¡Ze 
d
¡Ze 
d¡Ze 
d¡Ze 
d¡Ze 
d¡Ze 
d¡Ze 
d¡Ze d¡e d ¡d  d e d¡ ZdZdZdZdZdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZdS )é    Né   )Ú
FragmentFDé   )Ú	HTTPError)ÚRetryManagerz>Bz>Bxz>Hz>Hxxz>Iz>Qz>bxz>hz>hxxz>ii   é   i   @é   c                 C   s   t  dt|ƒ ¡|  | S )Né   )Úu32ÚpackÚlen)Úbox_typeÚpayload© r   ú9/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/downloader/ism.pyÚbox   s    r   c                 C   s&   t | t |¡t |¡dd …  | ƒS )Nr   )r   Úu8r   r
   )r   ÚversionÚflagsr   r   r   r   Úfull_box#   s    r   c           (      C   sô  |d }|d }|d }|  dd¡}|  dd¡}|  dd	¡}|  d
d	¡}|d }	tt ¡ ƒ }
}d}|t d¡7 }|d7 }|  td|ƒ¡ t |
¡}|t |¡7 }|t |¡7 }|t |¡7 }|t d¡7 }|t	 d¡7 }|t
 d	¡7 }|t d	¡d 7 }|t7 }|t d	¡d 7 }|t d¡7 }tddd	|ƒ}t |
¡}|t |¡7 }|t |¡7 }|t d	¡7 }|t |¡7 }|t d	¡d 7 }|t d	¡7 }|t d	¡7 }|t	 |	dkr´dnd	¡7 }|t
 d	¡7 }|t7 }|t |¡7 }|t |¡7 }tddttB tB |ƒ}t |
¡}|t |¡7 }|t |¡7 }|t |¡7 }|t
 t|d	 ƒd d> t|d ƒd d> B t|d ƒd B ¡7 }|t
 d	¡7 }tddd	|ƒ}t d	¡}|	dkrÎ|d7 }|t d	¡d 7 }|d7 }nf|	dkrü|d7 }|t d	¡d 7 }|d7 }n8|	d kr*|d!7 }|t d	¡d 7 }|d"7 }n
d#s4t‚|td$d	d	|ƒ7 }|	dkrxt	 d	¡}|t
 d	¡7 }td%d	d	|ƒ}nZ|	dkr®t
 d	¡}|t
 d	¡d 7 }td&d	d|ƒ}n$|	d krÈtd'd	d	d(ƒ}n
d#sÒt‚|}t d¡}|td)d	td(ƒ7 }td*d	d	|ƒ}|td+|ƒ7 }t d¡}t d	¡d }|t
 d¡7 }|	dkrÖ|t d	¡d 7 }|t
 |  d,d¡¡7 }|t
 |  d-d.¡¡7 }|t
 d	¡7 }|t
 d	¡7 }|t |d/ ¡7 }|d0kr¾td1|ƒ}|d2krÄtd3|ƒ}nî|	dkrv|t
 d	¡7 }|t
 d	¡7 }|t d	¡d 7 }|t
 |¡7 }|t
 |¡7 }|t d4¡7 }|t d4¡7 }|t d	¡7 }|t
 d¡7 }|t d	¡d5 7 }|t
 d6¡7 }|t d7¡7 }t |d8  ¡ ¡}|d9krj| t d¡¡dd … \}}t d¡} | |dd:… 7 } | t d;|  d<d:¡d B ¡7 } | t d¡7 } | t
 t|ƒ¡7 } | |7 } | t d¡7 } | t
 t|ƒ¡7 } | |7 } |td=| ƒ7 }td>|ƒ}n
d#sÄt‚nN|	d krº|d?kr®|d@7 }|dA7 }|dA7 }tdB|ƒ}n
d#sÄt‚n
d#sÄt‚||7 }tdCd	d	|ƒ}!t d	¡}"|!tdDd	d	|"ƒ7 }!t d	¡}#|!tdEd	d	|#ƒ7 }!t d	¡}$|!tdFd	d	|$ƒ7 }!|tdG|!ƒ7 }|tdH|ƒ7 }|tdI|ƒ7 }|tdJ|ƒ7 }t |¡}%tdKdd	|%ƒ}&t |¡}'|'t d¡7 }'|'t d	¡7 }'|'t d	¡7 }'|'t d	¡7 }'|&tdLd	d	|'ƒ7 }&|tdM|&ƒ7 }|  tdN|ƒ¡ d S )ONÚtrack_idÚfourccÚdurationÚ	timescalei€–˜ ÚlanguageZundÚheightr   ÚwidthÚstream_types   ismlr   s   piffiso2s   ftypr   é   l   ÿÿ s   mvhdÚaudios   tkhdé`   é
   é   s   mdhds   sounr   s   SoundHandler Úvideos   vides   VideoHandler Útexts   subts   SubtitleHandler Fs   hdlrs   smhds   vmhds   sthdó    s   url s   drefs   dinfZchannelsZbits_per_sampleé   Zsampling_rateZAACLs   mp4azEC-3s   ec-3éH   é    é   éÿÿÿÿÚcodec_private_data)ZH264ZAVC1r   éü   Znal_unit_length_fields   avcCs   avc1ZTTMLs   http://www.w3.org/ns/ttml ó    s   stpps   stsds   sttss   stscs   stcos   stbls   minfs   mdias   traks   mehds   trexs   mvexs   moov)ÚgetÚintÚtimer
   r   Úwriter   Úu64Ús1616Ús88Úu16Úunity_matrixr   Ús16Úu1616ÚTRACK_ENABLEDÚTRACK_IN_MOVIEÚTRACK_IN_PREVIEWÚordÚAssertionErrorÚSELF_CONTAINEDr   ÚbinasciiÚ	unhexlifyÚencodeÚsplitr   )(ÚstreamÚparamsr   r   r   r   r   r   r   r   Zcreation_timeZmodification_timeZftyp_payloadZmvhd_payloadZmoov_payloadZtkhd_payloadZtrak_payloadZmdhd_payloadZmdia_payloadZhdlr_payloadZsmhd_payloadZmedia_header_boxZvmhd_payloadZminf_payloadZdref_payloadZdinf_payloadZstsd_payloadZsample_entry_payloadZsample_entry_boxr+   ZspsZppsZavcc_payloadZstbl_payloadZstts_payloadZstsc_payloadZstco_payloadZmehd_payloadZmvex_payloadZtrex_payloadr   r   r   Úwrite_piff_header'   s*   


B






























rE   c                 C   sz   t  | ¡}t | d¡¡d }| d¡}||d krd| |d ¡}t|ƒdkrR|S t||dd … ƒS | |d d¡ q
d S )Nr   r   r	   r   )ÚioÚBytesIOr
   ÚunpackÚreadr   Úextract_box_dataÚseek)ÚdataZbox_sequenceZdata_readerZbox_sizer   Zbox_datar   r   r   rJ   Ú   s    

rJ   c                   @   s   e Zd ZdZdd„ ZdS )ÚIsmFDz-
    Download segments in a ISM manifest
    c                 C   s’  | j  dd¡r|d d d… n|d }|t|ƒdœ}|  ||¡ | dddi¡}| j  dd	¡}d
}|D ]}|d7 }||d kr‚qft| j  d¡| j|| d}	|	D ]Ä}
zŒ|  ||d |¡}|sÈW   dS |  |¡}|d s$t	|dddgƒ}t
 |dd… ¡d
 |d d< t|d |d ƒ d	|d< |  ||¡ W q¢ tk
rd } z||
_W Y ¢q¢W 5 d }~X Y q¢X q¢|	jrf|sz dS |  |¡ qf|  ||¡S )NÚtestFZ	fragmentsr   )ÚfilenameZtotal_fragsÚextra_stateZism_track_writtenÚskip_unavailable_fragmentsTr   Zfragment_indexZfragment_retries)Ú
frag_indexÚfatalÚurls   moofs   trafs   tfhdr   r	   Z_download_paramsr   Zdest_stream)rD   r.   r   Z _prepare_and_start_frag_downloadÚ
setdefaultr   Zreport_retryZ_download_fragmentZ_read_fragmentrJ   r
   rH   rE   Z_append_fragmentr   ÚerrorZreport_skip_fragmentZ_finish_frag_download)ÚselfrO   Z	info_dictÚsegmentsÚctxrP   rQ   rR   ÚsegmentZretry_managerÚretryÚsuccessZfrag_contentZ	tfhd_dataÚerrr   r   r   Úreal_downloadì   sX     ÿÿþ ÿ
 ÿ


zIsmFD.real_downloadN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r^   r   r   r   r   rM   ç   s   rM   ) r?   rF   Ústructr0   Úfragmentr   Znetworking.exceptionsr   Úutilsr   ÚStructr   Zu88r5   r8   r
   r2   r4   r7   r3   Zs32r   r6   r9   r:   r;   r>   r   r   rE   rJ   rM   r   r   r   r   Ú<module>   s6   









& 4