o
    i                     @   s|   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 dd	lmZ G d
d deZdS )    N   )FileDownloader)FFmpegFD   )Request)WebSocketResponse)DownloadErrorstr_or_nonetruncate_string)traverse_objc                   @   s   e Zd ZdZdd ZdS )NiconicoLiveFDz/ Downloads niconico live without being stopped c                    s   |d |d }|d |d |d t jjpi }| }d|d< fdd	  fd
d}tj|dd}|  |||S )Niddownloader_optionsmax_qualitywsws_urlm3u8protocolc                    st  | st ts9jtddid}jjddr d |t	
dddd	d
ddd dddd n}|s 	 | }|sFq>t	|}|rRt |tsSq>|ddkre|d |d nJ|ddkrz| 	 W d    dS |ddkr| t|ddthf|d}t|W  d    S jjddrdt|d  q?1 sw   Y  d S )NOriginzhttps://live.nicovideo.jp)headersverboseFzSending startWatching requestT	webSocket)commentabler   single_cookiehighhls)accessRightMethod	chasePlaylatencyr   quality)	reconnectroomstreamstartWatching)datatyper%   pingz{"type":"pong"}z{"type":"keepSeat"}
disconnecterrorbodycode)defaultzServer response: d   )
isinstancer   ydlurlopenr   paramsgetwrite_debugsendjsondumpsrecvloadsdictr   r	   r   r
   )r    r   r6   r$   message)r   selfws_extractorr    N/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/downloader/niconico.pycommunicate_ws   sZ   




z4NiconicoLiveFD.real_download.<locals>.communicate_wsc               
      s   d} 	 z:z | }|du rW W d} d S W n% t y9 } zd d|  td W Y d }~W d} qd }~ww W d} nd} w q)NFTz[niconico:live] z;: Connection error occured, reconnecting after 10 seconds: 
   )BaseException	to_screentimesleep)r    rete)r>   r:   video_idr<   r=   ws_mainH   s(   
z-NiconicoLiveFD.real_download.<locals>.ws_mainT)targetdaemon)r   r.   r0   copy	threadingThreadstartdownload)r:   filename	info_dictoptsdlnew_info_dictrG   threadr<   )r>   r   r:   rF   r;   r   r=   real_download   s   /zNiconicoLiveFD.real_downloadN)__name__
__module____qualname____doc__rU   r<   r<   r<   r=   r      s    r   )r4   rK   rB   commonr   externalr   
networkingr   networking.websocketr   utilsr   r	   r
   utils.traversalr   r   r<   r<   r<   r=   <module>   s    