U
    Zýj…  ã                	   @   sf  d dl Z d dlmZ d dlZd dlZd dlZd dlmZ i Ze	ddƒ�FZ
e e
¡ZeD ]0Zeeƒd krhqVed  Zed Ze eei¡ qVW 5 Q R X G dd„ dƒZeƒ Zejed	gd
d	gd	gd� e ¡ D ]\ZZeeeƒ eed� qÈejZedƒ eeƒ edƒ e d¡dd„ ƒZe d¡dd„ ƒZe d¡dd„ ƒZe d¡edœdd„ƒZdd„ Zdd„ ZdS )é    N)ÚFastAPI)ÚCORSMiddlewarezall_channels.csvÚré   c                   @   s(   e Zd Zg Zdd„ Zdd„ Zdd„ ZdS )Ú
AddChannelc                 C   sœ   t j | ¡ || _t | j¡| _d| _t ¡ | _	t
d | j¡ƒ t d¡}| ¡ | _| j d¡sl| j d¡r|| j | j¡ n| j d¡r˜| j | jd¡ d S )Nr   zNew channel: {0}ze--no-audio --no-video --vout dummy --quiet --ts-csa2-ck=0000000000000000 --ts-csa-ck=0000000000000001ÚhttpÚhttpsúudp://)r   Úchannels_listÚappendÚnameÚchannels_dictÚgetÚlinkÚlast_discontinuityÚtimeÚlast_checked_timeÚprintÚformatÚvlcZInstanceZmedia_player_newÚplayerÚ
startswithZset_mrl)Úselfr   Zvlc_instance© r   ú</home/user/RIDSYSPACKAGE/riptv/live/STATS_AUTOSCRIPT/main.pyÚ__init__   s    


zAddChannel.__init__c                 C   s   t dƒ | j ¡  d S )NZ
playerPlay)r   r   Úplay)r   r   r   r   r   ,   s    zAddChannel.playc           	   
   C   sÒ   t dƒ t ¡ }| j ¡ }| |¡ t ¡ }|| j }|j}|| j	 }|dkrZ|| _|| _	|dkrhd}n"d|  kr|dkr†n nd}nd}t
|jd	 ƒ|j||jt
|jd	 ƒ|jt
| j ¡ d
 d ƒ||dœ	}|S )NZgetStatsé<   r   ZHealthyr   é
   zModerate DropzHighly Droppedi@  i`ê  )	Údemux_bitrateÚdemux_corruptedÚdemux_discontinuityÚdemux_read_bytesÚinput_bitrateÚ
read_bytesr   Zdrop_diff_1minÚstatus)r   r   Z
MediaStatsr   Z	get_mediaÚ	get_statsr   r   r!   r   Úintr   r    r"   r#   r$   Zget_time)	r   ÚsÚmÚcurrent_timeÚelapsedZ	drops_nowZ	drop_diffr%   Údatar   r   r   r&   0   s6    



÷zAddChannel.get_statsN)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r&   r   r   r   r   r      s   r   Ú*T)Zallow_originsZallow_credentialsZallow_methodsZallow_headers)r   z'-------------All Channels--------------z'---------------------------------------Ústartupc                  C   s   t D ]} |  ¡  qd S )N)r
   r   )Úeach_channelr   r   r   r   n   s    r   c                  Ã   s<   d} t D ]}d|jkrd} q| r,t tƒ ¡ t tƒ ¡ d S )NFr	   T)r
   r   ÚasyncioÚcreate_taskÚclear_bufferÚmonitor_channels)Zcontain_udpr2   r   r   r   Ústartup_eventv   s    
r7   z/statsc                   C   s   dd„ t D ƒS )Nc                 S   s   g | ]}|j | ¡ g‘qS r   )r   r&   )Ú.0Zchannelr   r   r   Ú
<listcomp>…   s     zget_stats.<locals>.<listcomp>)r
   r   r   r   r   r&   ƒ   s    r&   z/stats/{channel_name})Úchannel_namec                 C   sB   d }t D ]}|j| kr|}q|d kr4dd| › d�iS |j| ¡ fS )NÚERRORzThe channel 'z6' is not in the list. Please check your configuration.)r
   r   r&   )r:   Z	outputOBJÚ
channelOBJr   r   r   Úget_specific_stats‰   s    
 
ÿr=   c                  Ã   sh   t dƒ tD ]D} |  ¡ }|d }|dkr| j ¡  | j ¡  t d t| jƒ¡ƒ qt	 
d¡I d H  q d S )Nz_____Clearing the buffer______r$   éd   zBuffer of {0} has been clearedé   )r   r
   r&   r   Ústopr   r   Ústrr   r3   Úsleep)r<   Zchannel_statsZchannel_bufferr   r   r   r5   ™   s    

r5   c                  Ã   sÈ   t D ]¬} |  ¡ }|d }| j ¡ }|tjjtjjfkrrtd| j	› d|› �ƒ | j 
¡  t d¡I d H  | j ¡  q|dkrtd| j	› d�ƒ | j 
¡  t d¡I d H  | j ¡  qt d¡I d H  q d S )Nr   z
[RESTART] z bad state: r   r   z stalled (demux_bitrate=0)é   )r
   r&   r   Z	get_stater   ÚStateZPlayingZ	Bufferingr   r   r@   r3   rB   r   )r<   Zstatsr   Ústater   r   r   r6   ¦   s     



r6   ) r   Zfastapir   r3   Zcsvr   Zfastapi.middleware.corsr   r   ÚopenÚfileÚreaderZeachLineÚlenZch_nameZch_linkÚupdater   ÚappZadd_middlewareÚitemsr   r
   Zon_eventr   r7   r   r&   rA   r=   r5   r6   r   r   r   r   Ú<module>   sP   
Dû	



