
    yf                         d dl Z d dlZd dl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mZ  G d	 d
e      Z G d de      Zy)    N   )get_suitable_downloader)FileDownloader)FFmpegFD   )Request)DownloadErrorstr_or_nonetry_getc                       e Zd ZdZd Zy)NiconicoDmcFDz4 Downloading niconico douga from DMC with heartbeat c                    
 ddl m}  j                  d j                  z          | j                        }|j                  |      \  }} t        | j                         j                   j                        }dx}
d gt        j                         |d   }|d   j                         }	|j                  dd	      t        ||	      
 fd
 |d            j                  d j                  fz         	          t        |      j                  dk(  r*|j                  |j!                  |d   |d         d          |j#                  ||      }r"5  d   j%                          d
d d d        |S |S # 1 sw Y   |S xY w# r-5  d   j%                          d
d d d        w # 1 sw Y   w xY ww xY w)Nr   )
NiconicoIEz[%s] Downloading from DMC)paramsFurldatainterval   c                  >   	 j                   j                        j                          5   s,t        j                        d<   d   j                          d d d        y # t        $ r! j	                  dj
                  z         Y cw xY w# 1 sw Y   y xY w)Nz[%s] Heartbeat failedr   )	ydlurlopenread	Exception	to_screenFD_NAME	threadingTimerstart)download_complete	heartbeatheartbeat_intervalheartbeat_lockrequestselftimers   </usr/lib/python3/dist-packages/yt_dlp/downloader/niconico.pyr    z.NiconicoDmcFD.real_download.<locals>.heartbeat!   s    G  )..0   %((/A9ME!H!HNN$% %  G6EFG% %s   )A& /B&'BBBpingz*[%s] Heartbeat with %d second interval ...HlsFDidr   T)extractor.niconicor   r   r   r   _get_heartbeat_infor   r   r   Lockencodegetr   type__name__update_extract_m3u8_formatsreal_downloadcancel)r$   filename	info_dictr   ieheartbeat_info_dictfdsuccessheartbeat_urlheartbeat_datar   r    r!   r"   r#   r%   s   `         @@@@@@r&   r3   zNiconicoDmcFD.real_download   s   32T\\AB!)+)?)?	)J&	&C$Yt{{CDHHdkkZ&++#")+E2,V4;;=044ZD-8		% 		% 	$F#%Ct||UgFhhi		-KBx  G+  !9!9)E:JIVZO!\]^!_`&&x;G# -!HOO%(,%- w- 	 # -!HOO%(,%- - - s1   AF *FFG
F=4	G
=GG
Nr0   
__module____qualname____doc__r3        r&   r   r      s
    >)rB   r   c                       e Zd ZdZd Zy)NiconicoLiveFDz/ Downloads niconico live without being stopped c                    	
 |d   
|d   |d   |d   |j                  dd      	|j                  dd      t         j                   j                  xs i       }|j	                         }|j                  dd	i       	 fd
 
fd}t        j                  |d      }|j                          |j                  ||      S )Nvideo_idr   wsoriginlive_qualityhighlive_latencyprotocolm3u8c           
         | rj                   j                  t        
dd	 i            }j                   j                  j	                  dd      rj                  d       |j                  t        j                  dddd	d
ddddd             n}|5  	 |j                         }|st        j                  |      }|rt        |t              s<|j	                  d      dk(  r#|j                  d       |j                  d       n|j	                  d      dk(  rj                  |       	 d d d        y|j	                  d      dk(  r;j                  |       t        |d t              xs |}t!        |      cd d d        S j                   j                  j	                  dd      r*t#        |      dkD  r|d d dz   }j                  d|z         B# 1 sw Y   y xY w)NOriginzhttps://)headersverboseFz%[debug] Sending startWatching requeststartWatchingzhls+fmp4)qualityrL   latency	chasePlay	webSocketT)rL   commentable)streamroom	reconnect)r/   r   r/   r'   z{"type":"pong"}z{"type":"keepSeat"}
disconnecterrorc                     | d   d   S )NbodycoderA   )xs    r&   <lambda>zFNiconicoLiveFD.real_download.<locals>.communicate_ws.<locals>.<lambda>t   s    !F)F:K rB   d   z...z[debug] Server said: %s)r   r   r   r   r.   r   sendjsondumpsrecvloads
isinstancedictwrite_debugr   strr	   len)rZ   rG   rf   r   messagerK   rI   r$   ws_extractorws_origin_hostws_urls        r&   communicate_wsz4NiconicoLiveFD.real_download.<locals>.communicate_wsL   s   XX%%gfx8TbScId>e&fg88??&&y%8NN#JK

+ (4(2'3).	# )4+/! &*$  " " I779D ::d+Dz$'= xx'61 23 67&)\9((.#I I &)W4((.")$0KS"Q"YUY,W5%I I& ,,Y>t9s?#':#5D'@4'GH+ I Is   BG"AG"AG""G+c                      d} 	 	  |       }|du r	 d} y 	 d} # t         $ rD}j                  ddddt        |             t        j                  d       Y d }~d} ^d }~ww xY w# d} w xY w)NFT[zniconico:livez] z;: Connection error occured, reconnecting after 10 seconds: 
   )BaseExceptionr   r
   timesleep)rZ   reterq   r$   rF   s      r&   ws_mainz-NiconicoLiveFD.real_download.<locals>.ws_main{   s    I	%(3Cd{ !%I # !%I 
 % NNm|  G  IT  UV  IW  $X  YJJrN $I
 !%Is&    	A'8A"A* "A''A* *A.T)targetdaemon)
r.   r   r   r   copyr1   r   Threadr   download)r$   r5   r6   dlnew_info_dictrz   threadrq   rK   rI   rF   rn   ro   rp   s   `      @@@@@@@r&   r3   zNiconicoLiveFD.real_download>   s    Z(5! "8, }}^V< }}^V<dhh 1r2!(
 	-	I -	I^	% !!>{{8]33rB   Nr=   rA   rB   r&   rD   rD   ;   s    9N4rB   rD   )rd   r   rv    r   commonr   externalr   
networkingr   utilsr	   r
   r   r   rD   rA   rB   r&   <module>r      s;       % "    7 7,N ,^Q4^ Q4rB   