U
    ì±×jÒ  ã                   @   sò   d dl Z d dlmZ d dlmZmZ d dlmZ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 d d
lmZmZ d dlmZ d dlmZ edd�Zedd�Zdd„ Zdd„ Ze d¡eedœdd„ƒZ e d¡edœdd„ƒZ!dS )é    N)Úurlsplit)Ú	APIRouterÚHTTPException)ÚResponseÚStreamingResponse)Úrun_in_threadpool)ÚHLSRegistryV2)Útransformar_manifest)Útransformar_manifest_v4)Údescargar_hls)Úpreparar_segmentoÚtransmitir_preparado)Úvalidar_destino)Úresolver_canalz/api/player)ÚprefixiX  )Zttlc                 C   s$   t | ƒ} ||f}t | |¡}d| S )Nz/api/player/resource/)r   ÚregistroÚ	registrar)ÚurlÚ	identidadÚcanalZclaveÚtoken© r   ú#hermes_player_v4_final_candidate.pyr      s    r   c           	      ƒ   sÆ   t | ƒ} t| ƒj d¡sBt| ƒI d H \}}tt||ƒdddid�S tt| dƒI d H }|d }|d }| 	d	¡svt
d
ƒ‚| d¡}d|kr t||‡ fdd„ˆ ƒ}nt||‡ fdd„ƒ}t|dddid�S )Nz.m3u8z
video/mp2tzCache-Controlzno-store)Ú
media_typeÚheadersÚmanifestÚ	contenidoZ	url_finals   #EXTM3UzManifiesto HLS invalidoz	utf-8-sigz#EXT-X-MEDIA-SEQUENCE:c                    s   t | d|fˆ ƒS )NZsegmento©r   )ÚuÚi©r   r   r   Ú<lambda>8   ó    zresponder.<locals>.<lambda>c                    s   t | d| fˆ ƒS )Nr   r   )r   r    r   r   r!   ?   r"   zapplication/vnd.apple.mpegurl)Zcontentr   r   )r   r   ÚpathÚendswithr   r   r   r   r   Ú
startswithÚ
ValueErrorÚdecoder
   r	   r   )	r   r   ZclienteZ	respuestaZ	resultador   ZorigenZtextoZtransformador   r    r   Ú	responder   sF    ý  ÿ



ü
ýýr(   z/play/{liga}/{equipo}.m3u8)ÚligaÚequipoc                 Ã   sn   |   ¡ r|  ¡ stddd�‚z,tt| |ƒI d H }t|| d | ƒI d H W S  tk
rh   tddd�‚Y nX d S )Ni�  zCanal invalido©Zstatus_codeZdetailú/éö  zNo se pudo iniciar reproduccion)Úisalnumr   r   r   r(   Ú	Exception)r)   r*   r   r   r   r   Ú
reproducirI   s"    þ  ÿ
þr0   z/resource/{identificador})Úidentificadorc              	   Ã   s˜   zt  | ¡\}}|d }W n$ ttfk
r>   tddd�‚Y nX zt||ƒI d H W S  tjk
rt   tddd�‚Y n  tk
r’   tddd�‚Y nX d S )Nr   i”  zRecurso no disponibler+   r-   zOrigen HLS no disponiblezError al recuperar recurso)	r   Zresolver_completor&   ÚKeyErrorr   r(   ÚhttpxZHTTPStatusErrorr/   )r1   r   r   r   r   r   r   Úrecurso^   s(    þþ
þr4   )"r3   Zurllib.parser   Zfastapir   r   Zfastapi.responsesr   r   Zstarlette.concurrencyr   Z hermes_hls_registry_v4_candidater   Zhermes_hls_manifestr	   Zhermes_hls_manifest_v4_labr
   Zhermes_hls_fetchr   Zhermes_hls_stream_v3r   r   Zhermes_hls_securityr   Zhermes_player_gatewayr   Zrouterr   r   r(   ÚgetÚstrr0   r4   r   r   r   r   Ú<module>   s&   

	-