3
b`F)                 @   s   d dl mZ d dlZd dlZd dlZddlmZ ddlmZ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jdejd d  d ej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 )    )unicode_literalsN   )
FragmentFD   )compat_Structcompat_urllib_errorz>Bz>Bxz>Hz>Hxxz>Iz>Qz>bxz>hz>hxxz>ii      i   @   c             C   s   t jdt| |  | S )N   )u32packlen)box_typepayload r   JC:\Users\Broad\Desktop\BeinConnetFix\binaries\youtube_dl\downloader\ism.pybox#   s    r   c             C   s&   t | tj|tj|dd   | S )Nr   )r   u8r   r   )r   versionflagsr   r   r   r   full_box'   s    r   c       (      C   s  |d }|d }|d }|j dd}|j dd}|j dd	}|j d
d	}|d	koV|d	k}	ttj  }
}d}|tjd7 }|dD7 }| jtd| tj|
}|tj|7 }|tj|7 }|tj|7 }|tjd7 }|t	jd7 }|t
jd	7 }|tjd	d 7 }|t7 }|tjd	d 7 }|tjd7 }tddd	|}tj|
}|tj|7 }|tj|7 }|tjd	7 }|tj|7 }|tjd	d 7 }|tjd	7 }|tjd	7 }|t	j|	rdnd	7 }|t
jd	7 }|t7 }|tj|7 }|tj|7 }tddttB tB |}tj|
}|tj|7 }|tj|7 }|tj|7 }|t
jt|d	 d d> t|d d d> B t|d d B 7 }|t
jd	7 }tddd	|}tjd	}||	rdnd7 }|tjd	d 7 }||	rdndd 7 }|tdd	d	|7 }|	rt	jd	}|t
jd	7 }td d	d	|}n*t
jd	}|t
jd	d 7 }td!d	d|}|}tjd}|td"d	td#7 }td$d	d	|}|td%|7 }tjd}tjd	d }|t
jd7 }|	r4|tjd	d 7 }|t
j|j d&d7 }|t
j|j d'd(7 }|t
jd	7 }|t
jd	7 }|tj|d) 7 }|d*krtd+|}n|t
jd	7 }|t
jd	7 }|tjd	d 7 }|t
j|7 }|t
j|7 }|tjd,7 }|tjd,7 }|tjd	7 }|t
jd7 }|tjd	d- 7 }|t
jd.7 }|tjdE7 }tj|d/ jd0}|dFkr|jtjddd  \}}tjd} | |dd3 7 } | tjd4|j d5d3d B 7 } | tjd7 } | t
jt|7 } | |7 } | tjd7 } | t
jt|7 } | |7 } |td6| 7 }td7|}||7 }td8d	d	|}!tjd	}"|!td9d	d	|"7 }!tjd	}#|!td:d	d	|#7 }!tjd	}$|!td;d	d	|$7 }!|td<|!7 }|td=|7 }|td>|7 }|td?|7 }tj|}%td@dd	|%}&tj|}'|'tjd7 }'|'tjd	7 }'|'tjd	7 }'|'tjd	7 }'|&tdAd	d	|'7 }&|tdB|&7 }| jtdC| d S )GNtrack_idfourccduration	timescalei languageZundheightr   widths   ismlr   s   piffs   iso2s   ftypr      l    s   mvhds   tkhd`   
      s   mdhds   souns   vider   s   Sounds   Videos   Handler s   hdlrs   smhds   vmhds   url     s   drefs   dinfZchannelsZbits_per_sample   Zsampling_rateZAACLs   mp4aH          codec_private_datazutf-8H264AVC1r	      Znal_unit_length_fields   avcCs   avc1s   stsds   sttss   stscs   stcos   stbls   minfs   mdias   traks   mehds   trexs   mvexs   moovs   piffiso2)r(   r)   )getinttimer   r   writer   u64s1616s88u16unity_matrixr   s16u1616TRACK_ENABLEDTRACK_IN_MOVIETRACK_IN_PREVIEWordSELF_CONTAINEDr   binascii	unhexlifyencodesplitr   )(streamparamsr   r   r   r   r   r   r   Zis_audioZ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













rB   c             C   s~   t j| }xntj|jdd }|jd}||d krf|j|d }t|dkrT|S t||dd  S |j|d d qW d S )Nr	   r   r
   r   )ioBytesIOr   unpackreadr   extract_box_dataseek)dataZbox_sequenceZdata_readerbox_sizer   box_datar   r   r   rG      s    

rG   c               @   s   e Zd ZdZdZdd ZdS )IsmFDz-
    Download segments in a ISM manifest
    ismc             C   s  | j jddr|d d d n|d }|t|d}| j| | j jdd}| j jdd	}d}d}x0t|D ]"\}	}
|d7 }||d
 krqnd}x||krdyz| j||
d |\}}|sdS |st|dddg}tj|dd d |d d< t	|d |d  d	}| j
|| P W q tjk
r` } z(|d7 }||krP| j|||| W Y d d }~X qX qW ||krn|r| j| qn| jd|  dS qnW | j| d	S )NtestF	fragmentsr   )filenametotal_fragsfragment_retriesr   skip_unavailable_fragmentsTfragment_indexurls   moofs   trafs   tfhdr	   r
   Z_download_paramsr   dest_streamz#giving up after %s fragment retries)rA   r,   r    _prepare_and_start_frag_download	enumerate_download_fragmentrG   r   rE   rB   _append_fragmentr   	HTTPErrorreport_retry_fragmentreport_skip_fragmentreport_error_finish_frag_download)selfrP   	info_dictsegmentsctxrR   rS   Ztrack_written
frag_indexisegmentcountsuccessfrag_contentZ	tfhd_dataerrr   r   r   real_download   sL     

&

zIsmFD.real_downloadN)__name__
__module____qualname____doc__FD_NAMErk   r   r   r   r   rL      s   rL   )
__future__r   r.   r<   rC   fragmentr   compatr   r   r   Zu88r3   r6   r   r0   r2   r5   r1   Zs32r   r4   r7   r8   r9   r;   r   r   rB   rG   rL   r   r   r   r   <module>   s4   & 