U
    
×jÙ  ã                   @   s  d dl mZ d dlmZmZ d dlmZ d dl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mZ d dlmZ e	ddgd�Zedd�Zdd„ Zdd„ Zdd„ Ze d¡eedœdd„ƒZ e d¡edœdd„ƒZ!e d¡d d!„ ƒZ"dS )"é    )Úrun_in_threadpool)Úpreparar_segmentoÚtransmitir_preparado)Úabrir_segmentoN)Ú	APIRouterÚHTTPException)ÚResponseÚStreamingResponse)Úurlsplit)ÚHLSRegistry)Útransformar_manifest)Údescargar_hlsÚtransmitir_segmento)Úvalidar_destinoz/api/playerúHermes Web Player)ÚprefixZtagsi,  )Zttlc              	   C   s‚   |   ¡ r|  ¡ stdƒ‚d|  d | d }tjddd��}| |¡}W 5 Q R X |jdkrbtd	ƒ‚|j d
¡}|sztdƒ‚t|ƒS )NzIdentificador invalidozhttp://127.0.0.1:8005/live/ú/ú.m3u8é
   F)ZtimeoutZfollow_redirectsi.  zCanal no disponibleÚlocationzCanal sin destino)ÚisalnumÚ
ValueErrorÚhttpxZClientÚgetÚstatus_codeÚheadersr   )ÚligaÚequipoZrutaÚclienteÚrÚdestino© r!   úhermes_player_gateway_v4_lab.pyÚresolver_canal   s0    ÿÿÿÿÿþ
r#   c                 C   s   t | ƒ t | ¡}d| S )Nz/api/player/resource/)r   ÚregistroZ	registrar)ÚurlÚidentificadorr!   r!   r"   Úenlace_privado1   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
ƒ‚t| d¡|tƒ}t|dddid�S )Nr   z
video/mp2tzCache-Controlzno-store)Ú
media_typer   ZmanifestÚ	contenidoÚ	url_finals   #EXTM3UzManifiesto HLS invalidoz	utf-8-sigzapplication/vnd.apple.mpegurl)Zcontentr(   r   )r   r
   ÚpathÚendswithr   r	   r   r   r   Ú
startswithr   r   Údecoder'   r   )r%   r   Z	respuestaZ	resultador)   r*   Ztransformador!   r!   r"   Úresponder_recurso7   s6    ý  ÿ

ýýr/   z/play/{liga}/{equipo}.m3u8)r   r   c                 Ã   sH   z"t t| |ƒI d H }t|ƒI d H W S  tk
rB   tddd�‚Y nX d S )Néö  z"No se pudo iniciar la reproduccion©r   Zdetail)r   r#   r/   Ú	Exceptionr   )r   r   r    r!   r!   r"   Úiniciar_reproduccionZ   s    þr3   z/resource/{identificador})r&   c                 Ã   s^   zt  | ¡}t|ƒI d H W S  tk
r:   tddd�‚Y n  tk
rX   tddd�‚Y nX d S )Ni”  zRecurso no disponibler1   r0   zError al recuperar recurso HLS)r$   Zresolverr/   r   r   r2   )r&   r%   r!   r!   r"   Úobtener_recursof   s    
þ
þr4   z/healthc                   C   s   ddddœS )Nr   ZlaboratorioT)ZservicioZestadoZreproduccionr!   r!   r!   r!   r"   Úplayer_healthw   s    ýr5   )#Zstarlette.concurrencyr   Zhermes_hls_stream_v3r   r   Zhermes_hls_stream_v2r   r   Zfastapir   r   Zfastapi.responsesr   r	   Zurllib.parser
   Zhermes_hls_registryr   Zhermes_hls_manifestr   Zhermes_hls_fetchr   r   Zhermes_hls_securityr   Zrouterr$   r#   r'   r/   r   Ústrr3   r4   r5   r!   r!   r!   r"   Ú<module>   s0   þ
#