
    V|h(                     x    S SK r S SKrS SKrSSKJr  SSKJrJrJ	r	J
r
JrJrJr   " S S\5      r " S S	\5      rg)
    N   )InfoExtractor   )ExtractorErrorencode_data_urifloat_or_noneint_or_nonejoin_nonemptymimetype2extstr_or_nonec                       \ rS rSrSrSrS/rSSSSS	S	S
SSSS.S.SSSSSSS.SS.SSS0SS.SSSS S!S S"S#S$S%.S&S'0S(.S)S'S*./rS1S, jrS- r	S. r
S/ rS0rg+)2	UstreamIE   zfhttps?://(?: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                 :   S nS nU(       d  SnU R                  SU" S5       SU S3USU-   S	US
   US   U" U" S5      5       SU" U" S5      5       3SU" S5       3UUSS.S9nUS
   S   S
   S   nUS
   S   S
   S   n	U R                  SU SU	 3USU-   S9$ )Nc                     [        U 5      SS  $ )Nr   )hex)ns    R/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/ustream.py
num_to_hex.UstreamIE._get_stream_info.<locals>.num_to_hexI   s    q6!":    c                 @    [         R                  " [        U 5      5      $ N)random	randrangeint)xs    r5   <lambda>,UstreamIE._get_stream_info.<locals>.<lambda>L   s    ((Q0r8    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rM   )_download_json)
selfr   video_id
app_id_ver
extra_noter6   rnd	conn_inforP   connection_ids
             r5   _get_stream_info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r8   c           	          [        S5       HB  nU R                  XUUS:  a	  SUS-    S3OSS9nSUS   S	   S   ;   d  M4  US   S	   S   S   s  $    / $ )
Nr'   r   z (try r   )rA   )rW   streamrO   )ranger[   )rT   r   rU   rV   trial_countstream_infos         r5   _get_streamsUstreamIE._get_streamse   s|     8K//z:E/VK!O#4A6r 0 SK ;q>&1!44"1~f-a0:: $ 	r8   c                    S n/ nUS    GHq  nUS   S   nSU" US   US   -   SUS   S   5      0/n[        US	   US
   -  5       H<  nUR                  SU" US   US   -   UUS   [        US-  S-  5         5      05        M>     US   nUR                  S5      S   n	[	        SU	[        UR                  S5      5      5      S[        SS5      [        U5      UR                  S5      UR                  S5      US.n
U	S:X  a4  U
R                  UR                  S5      SUR                  S5      S.5        O3U
R                  SUR                  S5      UR                  S5      S.5        UR                  U
5        GMt     U$ )Nc                 Z    U R                  S[        U5      S5      R                  SU5      $ )N%r   )replacestr)templateidx
chunk_hashs      r5   resolve_dash_template=UstreamIE._parse_segmented_mp4.<locals>.resolve_dash_templatep   s(    ##CS15==c:NNr8   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   r}   r~   	fragmentsvideocodecnone)vcodecacodecvbr)r   r   abr)
r`   appendri   splitr
   r   getr   r   update)rT   dash_stream_inform   formatsr_   providerr   rk   content_typekindfs              r5   _parse_segmented_mp4UstreamIE._parse_segmented_mp4o   s   	O &y1F'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 2N r8   c                 ^  ^  T R                  U5      nUR                  S5      nUR                  S5      S:X  a(  UR                  S5      nSU-   nT R                  US5      $ UR                  S5      S:X  aa  UR                  S5      nT R                  X5      nT R	                  T R                  SUS5      U5      nT R                  U 4S	 jU 5       U5      $ T R                  S
U S3U5      nUR                  S5      nU(       a  [        T R                   SU 3SS9eUS   n	U	S   n
[        U	R                  S5      5      nU	S   R                  5        VVs/ s H  u  pU(       d  M  UUUUS.PM     nnnU(       d?  T R                  XSS9nU(       a'  UR                  T R                  US   S   USSS95         U	R                  S5      n[!        U	R                  S5      5      n[        U	R                  S5      5      n[!        U	R                  S5      5      nU	R                  S 0 5      R                  S!5      nU	R                  S 0 5      R                  S5      nU	R                  S"0 5      R                  5        VVs/ s H  u  nnUUS#.PM     nnnUU
UUUUUUUUS$.
$ s  snnf s  snnf )%Nr   rE   zembed/recordedhttp://www.ustream.tv/recorded/Ustreamembedz-ustream\.vars\.offAirContentVideoIds=([^;]+);zcontent video IDsc              3   N   >#    U  H  nTR                  S U-   S5      v   M     g7f)r   r   N)
url_result).0urT   s     r5   	<genexpr>*UstreamIE._real_extract.<locals>.<genexpr>   s(     n\mWX!BQ!F	RR\ms   "%zhttps://api.ustream.tv/videos/z.jsonerrorz returned error: T)expectedr   r   	file_size
media_urls)r   r   r   filesize)   r   )rV   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_resultrS   r   r   IE_NAMEr   itemsrc   extend_extract_m3u8_formatsr	   )rT   r   mrU   desktop_urlwebpagecontent_video_idsr/   r   r   r   r   r   	video_urlr   hls_streamsr   r   r   r   r   r   thumbnail_idthumbnail_urlr   s   `                        r5   _real_extract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
 'B"iY
 	

 'B 	 P ++Cg+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 .P)lM  
 .P 	 Q &$" $ &
 	
EP:Qs   J#)J#J) r:   )__name__
__module____qualname____firstlineno__
_VALID_URLr   _EMBED_REGEX_TESTSr[   rc   r   r   __static_attributes__r   r8   r5   r   r      s    zJGvwL81KQ#%#$	
  x19(	
 a 6*
  9@%F#%%	
 T
  h]1FfC:,\M
r8   r   c                   2    \ rS rSrSrSrSSS0SS.rS	 rS
rg)UstreamChannelIE   z3https?://(?:www\.)?ustream\.tv/channel/(?P<slug>.+)zustream:channelz*http://www.ustream.tv/channel/channeljapanr   10874166r   )r   r!   playlist_mincountc                    U R                  U5      nUR                  S5      nU R                  X5      nU R                  SU5      nSnSU S3n/ nU(       au  U R	                  [
        R                  R                  Xg5      US[        U5      S-    S3S	9n	UR                  [        R                  " S
U	S   5      5        U	S   nU(       a  Mu  U V
s/ s H  n
U R                  SU
-   S5      PM     nn
SUUUS.$ s  sn
f )Nslugzustream:channel_idzhttp://www.ustream.tvz/ajax/socialstream/videos/z/1.jsonz%Downloading video information (next: r   r^   rR   zdata-content-id="(\d.*)"datanextUrlr   r   playlist)_typer   
display_identries)r   r   r   _html_search_metarS   urllibparseurljoinlenr   refindallr   )rT   r   r   r   r   
channel_idBASEnext_url	video_idsreplyvidr   s               r5   r   UstreamChannelIE._real_extract   s   !!#&WWV_
((9++,@'J
&/
|7C	''$$T4j<S^a=O<PPQR ( TE RZZ(CU6]STY'H h !"  OO=CYO  	 "  $	
 	
"s   C8r   N)	r   r   r   r   r   r   _TESTr   r   r   r8   r5   r   r      s*    GJG;*
  E
r8   r   )r;   r   urllib.parser   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r8   r5   <module>r      s;     	  !  Y
 Y
x#
} #
r8   