U
    ðÓÖj�  ã                   @   s>   d dl Z d dlmZ d dlmZ dZdZddd„Zd	d
„ ZdS )é    N)Úurljoin)Úvalidar_destinoi   i  @Úmanifestc                 C   s>  |dkrt nt}t| ƒ}tjdddd���}tdƒD ]ò}t|ƒ | d|¡�Ô}|jdkrŠ|j 	d¡}|spt
d	ƒ‚tt||ƒƒ}W 5 Q R £ q4| ¡  |j 	d
¡}|r¶t|ƒ|kr¶t
dƒ‚tƒ }	| d¡D ]"}
|	 |
¡ t|	ƒ|krÆt
dƒ‚qÆt|	ƒ||j 	dd¡dœW  5 Q R £   W  5 Q R £ S Q R X q4W 5 Q R X t
dƒ‚d S )Nr   é   F©ZtimeoutZfollow_redirectsZ	trust_envé   ÚGET©i-  i.  i/  i3  i4  ÚlocationúRedireccion sin destinoúcontent-lengthzRecurso demasiado grandeé   zLimite de descarga excedidozcontent-typezapplication/octet-stream)Ú	contenidoZ	url_finalÚtipoúDemasiadas redirecciones)ÚMAX_MANIFESTÚMAX_SEGMENTr   ÚhttpxÚClientÚrangeÚstreamÚstatus_codeÚheadersÚgetÚ
ValueErrorr   Úraise_for_statusÚintÚ	bytearrayÚ
iter_bytesÚextendÚlenÚbytes)Úurlr   ZlimiteÚactualÚclienteÚ_Ú	respuestaÚdestinoÚlongitudr   Úbloque© r*   úhermes_hls_fetch.pyÚdescargar_hls	   sD    ý


 ÿý4r,   c           	      c   s  t | ƒ}d}tjtjddd�ddd��ä}tdƒD ]Ô}t |ƒ | d|¡�¶}|jd	kr†|j d
¡}|slt	dƒ‚t t
||ƒƒ}W 5 Q R £ q0| ¡  |j d¡}|r²t|ƒtkr²t	dƒ‚| d¡D ]&}|t|ƒ7 }|tkrÜt	dƒ‚|V  q¼W 5 Q R £  W 5 Q R £ dS Q R X q0W 5 Q R X t	dƒ‚dS )z€
    Generador HLS.
    Valida cada destino y transmite bloques de video
    sin almacenar el segmento completo en memoria.
    r   g      4@g      @)ZconnectFr   r   r   r	   r
   r   r   zSegmento demasiado grander   zLimite de segmento excedidoNr   )r   r   r   ZTimeoutr   r   r   r   r   r   r   r   r   r   r   r    )	r"   r#   Ztotalr$   r%   r&   r'   r(   r)   r*   r*   r+   Útransmitir_segmento;   s@    ý
ÿÿ,r-   )r   )	r   Zurllib.parser   Zhermes_hls_securityr   r   r   r,   r-   r*   r*   r*   r+   Ú<module>   s   
2