
    VGh(                     x    d dl Z d dlZd dlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZ  G d de      Z G d d	e      Zy)
    N   )InfoExtractor   )ExtractorErrorencode_data_urifloat_or_noneint_or_nonejoin_nonemptymimetype2extstr_or_nonec                       e Zd ZdZdZdgZddddddd	d
ddddddddddddddddiddddddd dd!d"d#d$d%d&id'd(d&d)gZd/d+Zd, Zd- Z	d. Z
y*)0	UstreamIEzfhttps?://(?:www\.)?(?:ustream\.tv|video\.ibm\.com)/(?P<type>recorded|embed|embed/recorded)/(?P<id>\d+)ustreamz_<iframe[^>]+?src=(["\'])(?P<url>https?://(?:www\.)?(?:ustream\.tv|video\.ibm\.com)/embed/.+?)\1z'http://www.ustream.tv/recorded/20274954 088f151799e8f572f84eb62f17d73e5c20274954flvz4Young Americans for Liberty February 7, 2012 2:28 AMiz0O20120207	yaliberty6780869)idexttitledescription	timestampupload_dateuploaderuploader_id)urlmd5	info_dictzfhttp://www.ustream.tv/embed/recorded/59307601?ub=ff0000&lc=ff0000&oc=ffffff&uc=ffffff&v=3&wmode=direct 5a2abf40babeac9812ed20ae12d34e1059307601z"-CG11- Canada Games Figure Skatingsportscanadatv)r   r   r   r   zNThis Pro Broadcaster has chosen to remove this video from the ustream.tv site.)r   r   r    skipz$http://www.ustream.tv/embed/10299409r   10299409   )r   r    playlist_countz'http://www.ustream.tv/recorded/9134326391343263mp4z)GitHub Universe - General Session - Day 120160914iZWwa0dnskeqkr38977840)r   r   r   r   r   r   r   r   skip_downloadT)r   r    paramszVhttps://video.ibm.com/embed/recorded/128240221?&autoplay=true&controls=true&volume=100)r   only_matchingNc                 <   d }d }|sd}| j                  d |d       d| d|d|z   d	|d
   |d    | |d             d | |d             d |d       ||dd      }|d
   d   d
   d   }|d
   d   d
   d   }	| j                  d| d|	 |d|z         S )Nc                     t        |       dd  S )Nr   )hex)ns    a/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/ustream.py
num_to_hexz.UstreamIE._get_stream_info.<locals>.num_to_hexI   s    q6!":    c                 >    t        j                  t        |             S N)random	randrangeint)xs    r4   <lambda>z,UstreamIE._get_stream_info.<locals>.<lambda>L   s    ((Q0 r6    zhttp://rg    חAz-1-z*-recorded-lp-live.ums.ustream.tv/1/ustreamzDownloading connection infoviewerr   r   :z_rpin.g  4&kCrecorded)typeappId
appVersionrsidrpinreferrermediaapplication)notequeryargshostconnectionIdzhttp://z/1/ustream?connectionId=zDownloading stream inforJ   )_download_json)
selfr   video_id
app_id_ver
extra_noter5   rnd	conn_inforM   connection_ids
             r4   _get_stream_infozUstreamIE._get_stream_infoH   s   	 1J''s3xjH:-WX8:E #A(m%c#h/0*SX2F1GH T,!)	 ( 	 |F#A&v.!!V,Q/?""dV3M?C4zA # C 	Cr6   c           	          t        d      D ]B  }| j                  ||||dkD  r	d|dz    dnd      }d|d   d	   d   v s4|d   d	   d   d   c S  g S )
Nr&   r   z (try r   )r>   )rT   streamrL   )rangerX   )rQ   r   rR   rS   trial_countstream_infos         r4   _get_streamszUstreamIE._get_streamse   s     8 	;K//Xz:E/VK!O#4A6r 0 SK ;q>&1!44"1~f-a0::	; 	r6   c                    d }g }|d   D ]m  }|d   d   }d ||d   |d   z   d|d   d         ig}t        |d	   |d
   z        D ];  }|j                  d ||d   |d   z   ||d   t        |dz  dz                 i       = |d   }|j                  d      d   }	t	        d|	t        |j                  d                  dt        dd      t        |      |j                  d      |j                  d      |d}
|	dk(  r4|
j                  |j                  d      d|j                  d      d       n3|
j                  d|j                  d      |j                  d      d       |j                  |
       p |S )Nc                 Z    | j                  dt        |      d      j                  d|      S )N%r   )replacestr)templateidx
chunk_hashs      r4   resolve_dash_templatez=UstreamIE._parse_segmented_mp4.<locals>.resolve_dash_templatep   s(    ##CS15==c:NNr6   streams	providersr   r   initUrlhashes0videoLength	chunkTime
segmentUrl
   contentType/dashbitratehttp_dash_segmentss   <MPD/>ztext/xmlheightwidth)	format_idprotocolr   r   rw   rx   	fragmentsvideocodecnone)vcodecacodecvbr)r   r   abr)
r\   appendrd   splitr
   r   getr   r   update)rQ   dash_stream_inforh   formatsr[   providerr{   rf   content_typekindfs              r4   _parse_segmented_mp4zUstreamIE._parse_segmented_mp4o   s   	O &y1 &	F'4Q7H,UOfY&77<LX<VWZ<[] I -m<@PQ\@]]^   0 &*>>(23sby2~3FGI"  "-0L%%c*1-D*D+fjj.C"DF0&y*=#L1 **X.G,&
A w$jj1$!::i0  $$jj1!::i0 
 NN1M&	N r6   c                 8     j                  |      }|j                  d      }|j                  d      dk(  r(|j                  d      }d|z   } j                  |d      S |j                  d      dk(  ra|j                  d      } j                  ||      } j	                   j                  d|d      |      } j                   fd	|D        |      S  j                  d
| d|      }|j                  d      }|rt         j                   d| d      |d   }	|	d   }
t        |	j                  d            }|	d   j                         D cg c]  \  }}|r||||d }}}|sA j                  ||d      }|r*|j                   j                  |d   d   |dd             	 |	j                  d      }t!        |	j                  d            }t        |	j                  d            }t!        |	j                  d            }|	j                  d i       j                  d!      }|	j                  d i       j                  d      }|	j                  d"i       j                         D cg c]
  \  }}||d# }}}||
||||||||d$
S c c}}w c c}}w )%Nr   rB   zembed/recordedhttp://www.ustream.tv/recorded/Ustreamembedz-ustream\.vars\.offAirContentVideoIds=([^;]+);zcontent video IDsc              3   H   K   | ]  }j                  d |z   d        yw)r   r   N)
url_result).0urQ   s     r4   	<genexpr>z*UstreamIE._real_extract.<locals>.<genexpr>   s#     nWX!BQ!F	Rns   "zhttps://api.ustream.tv/videos/z.jsonerrorz returned error: T)expectedr|   r   	file_size
media_urls)r   r   r   filesize)   r   )rS   r   r   r)   hls)r   m3u8_idr   
created_atlengthviewsownerusername	thumbnail)r   r   )
r   r   r   
thumbnailsr   duration
view_countr   r   r   )_match_valid_urlgroupr   _download_webpage_parse_json_search_regexplaylist_resultrP   r   r   IE_NAMEr   itemsr_   extend_extract_m3u8_formatsr	   )rQ   r   mrR   desktop_urlwebpagecontent_video_idsr.   r   r|   r   r   ry   	video_urlr   hls_streamsr   r   r   r   r   r   thumbnail_idthumbnail_urlr   s   `                        r4   _real_extractzUstreamIE._real_extract   s   !!#&774= 776?..wwt}H;hFK??;	::776?g%wwt}H,,S(;G $ 0 01C1C@'#2%&.!0 ''n\mn  $$,XJe<hH 

7# <<. 1%9DJ J wg ;!78 ',L&9&?&?&AP
 #iY	  	
 P P ++Cg+NKt99N5)8  :  O P ii.		, 78	 8!45 7!34
99Wb)--j9ii,006
 .3YY{B-G-M-M-OQ *lM  
 Q
 Q &$" $ &
 	
EP:Qs   J1Jr8   )__name__
__module____qualname__
_VALID_URLr   _EMBED_REGEX_TESTSrX   r_   r   r    r6   r4   r   r      s    zJGvwL81KQ#%#$	
  x19(	
 a 6*
  9@%F#%%	
 T
  h]1FfC:,\M
r6   r   c                   *    e Zd ZdZdZdddiddZd Zy	)
UstreamChannelIEz3https?://(?:www\.)?ustream\.tv/channel/(?P<slug>.+)zustream:channelz*http://www.ustream.tv/channel/channeljapanr   10874166   )r   r    playlist_mincountc                    | j                  |      }|j                  d      }| j                  ||      }| j                  d|      }d}d| d}g }|rr| j	                  t
        j                  j                  ||      |dt        |      dz    d	      }	|j                  t        j                  d
|	d                |	d   }|rr|D 
cg c]  }
| j                  d|
z   d       }}
d|||dS c c}
w )Nslugzustream:channel_idzhttp://www.ustream.tvz/ajax/socialstream/videos/z/1.jsonz%Downloading video information (next: r   rZ   rO   zdata-content-id="(\d.*)"datanextUrlr   r   playlist)_typer   
display_identries)r   r   r   _html_search_metarP   urllibparseurljoinlenr   refindallr   )rQ   r   r   r   r   
channel_idBASEnext_url	video_idsreplyvidr   s               r4   r   zUstreamChannelIE._real_extract   s   !!#&WWV_
((j9++,@'J
&/
|7C	''$$T84j<S^a=O<PPQR ( TE RZZ(CU6]STY'H  !" OO=CYO" "  $	
 	
"s   	C.N)r   r   r   r   r   _TESTr   r   r6   r4   r   r      s*    GJG;*
  E
r6   r   )r9   r   urllib.parser   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r6   r4   <module>r      s;     	  !  Y
 Y
x#
} #
r6   