Ë
    ¾�jà   ã                   ó(  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	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mZ ddlmZ  G d„ d	ej.                  «      Z G d
„ de«      Z G d„ de«      Z G d„ d«      Z G d„ de«      Zy)z3Created on Sun Apr 07 2024 19:29:55 by codeskyblue
é    N)Úretry)ÚAdbError)Úadb_path)ÚAdbConnectionÚNetwork)ÚAbstractDevicec                   óÀ   — e Zd Zej                  defd„«       Zej                  defd„«       Zej                  defd„«       Z	ej                  d„ «       Z
defd„Zd„ Zy	)
ÚAbstractScreenrecordÚreturnc                  ó   — y)zreturn whether recordingN© ©Úselfs    úV/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/adbutils/screenrecord.pyÚis_recordingz!AbstractScreenrecord.is_recording   ó   � ó    c                  ó   — y)zcheck if environment if validNr   r   s    r   Ú	check_envzAbstractScreenrecord.check_env!   r   r   Úfilenamec                  ó   — y ©Nr   ©r   r   s     r   Ú_startzAbstractScreenrecord._start%   ó   € àr   c                  ó   — y r   r   r   s    r   Ú_stopzAbstractScreenrecord._stop)   r   r   c                 ó^   — | j                  «       rt        d«       y | j                  |«       y )Nzrecording already running)r   Úprintr   r   s     r   Ústart_recordingz$AbstractScreenrecord.start_recording-   s&   € Ø×ÑÔÜÐ-Ô.ØØ�‰�HÕr   c                 ó\   — | j                  «       st        d«       y | j                  «        y )Nzrecording alreay stopped)r   r   r   r   s    r   Ústop_recordingz#AbstractScreenrecord.stop_recording3   s#   € Ø× Ñ Ô"ÜÐ,Ô-ØØ�
‰
�r   N)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodÚboolr   r   Ústrr   r   r    r"   r   r   r   r
   r
      sŽ   „ Ø×Ñð'˜dò 'ó ð'ð 	×Ñð,˜4ò ,ó ð,ð 	×Ñð˜sò ó ðð 	×Ññó ðð¨ó ór   r
   c                   ó<   — e Zd Zd„ Zdefd„Zd„ Zdefd„Zde	fd„Z
y)	ÚScreenrecordExtensionc                 ó   — d | _         y r   )Ú_record_clientr   s    r   Ú__init__zScreenrecordExtension.__init__;   s
   € Ø"ˆÕr   r   c                 óB   — | j                  «       j                  |«       y)z\start video recording

        Raises:
            AdbError (when no record client)
        N)Ú-_ScreenrecordExtension__get_screenrecord_implr    r   s     r   r    z%ScreenrecordExtension.start_recording>   s   € ð 	×$Ñ$Ó&×6Ñ6°xÕ@r   c                 ó>   — | j                  «       j                  «       S )zstop video recording)r0   r"   r   s    r   r"   z$ScreenrecordExtension.stop_recordingF   s   € à×+Ñ+Ó-×<Ñ<Ó>Ð>r   r   c                 ó>   — | j                  «       j                  «       S )zis recording)r0   r   r   s    r   r   z"ScreenrecordExtension.is_recordingJ   s   € à×+Ñ+Ó-×:Ñ:Ó<Ð<r   c                 óØ   — | j                   r| j                   S t        | «      }|j                  «       r	|| _         |S t        | «      }|j                  «       r	|| _         |S t	        d«      ‚)Nzno valid screenrecord client)r-   Ú_ScrcpyScreenRecordr   Ú_AdbScreenRecordr   )r   Úr1Úr2s      r   Ú__get_screenrecord_implz-ScreenrecordExtension.__get_screenrecord_implN   sc   € Ø×ÒØ×&Ñ&Ð&Ü  Ó&ˆØ�<‰<Œ>Ø"$ˆDÔØˆIÜ˜dÓ#ˆØ�<‰<Œ>Ø"$ˆDÔØˆIÜÐ5Ó6Ð6r   N)r#   r$   r%   r.   r)   r    r"   r(   r   r
   r0   r   r   r   r+   r+   :   s3   „ ò#ðA¨ó Aò?ð=˜dó =ð7Ð)=ô 7r   r+   c                   óB   — e Zd Zdefd„Zdefd„Zdefd„Zdefd„Z	d„ Z
y	)
r4   Údc                 ó‚   — || _         t        j                  dk(  rdnd}t        j                  |«      | _        d | _        y )NÚposixÚscrcpyz
scrcpy.exe)Ú_dÚosÚnameÚshutilÚwhichÚ_scrcpy_pathÚ_p)r   r:   Úbin_names      r   r.   z_ScrcpyScreenRecord.__init__^   s3   € ØˆŒÜ!Ÿw™w¨'Ò1‘8°|ˆÜ"ŸL™L¨Ó2ˆÔØ$(ˆ�r   r   c                 óh   — t        | j                  xr | j                  j                  «       d u «      S r   )r(   rD   Úpollr   s    r   r   z _ScrcpyScreenRecord.is_recordingd   s%   € Ü�D—G‘GÒ6 §¡§¡£°$Ð 6Ó7Ð7r   c                 ó   — | j                   d uS r   )rC   r   s    r   r   z_ScrcpyScreenRecord.check_envg   s   € Ø× Ñ ¨Ð,Ð,r   r   c                 ó’  — t         j                  j                  «       }t        «       |d<   | j                  j
                  |d<   t        j                  | j                  dddd|gt        j                  t        j                  |¬«      | _
        t        j                  | j                  | j                  j                  «      | _        y )NÚADBÚANDROID_SERIALz--no-controlz--no-windowz--no-playbackz--record)ÚstdinÚstdoutÚenv)r?   ÚenvironÚcopyr   r>   ÚserialÚ
subprocessÚPopenrC   ÚDEVNULLrD   ÚweakrefÚfinalizeÚkillÚ
_finalizer)r   r   rN   s      r   r   z_ScrcpyScreenRecord._startj   s‘   € Ü�j‰j�o‰oÓˆÜ“ZˆˆE‰
Ø $§¡§¡ˆÐÑÜ×"Ñ"Ø×Ñ °¸ÐPZÐ\dÐeÜ×$Ñ$Ü×%Ñ%Øô	
ˆŒô "×*Ñ*¨4¯7©7°D·G±G·L±LÓAˆ�r   c                 óž  — | j                   j                  «        | j                  j                  t        j
                  «       	 | j                  j                  d¬«      }|dk(  ry |dk(  rt        d«      ‚|dk(  rt        d«      ‚t        d|«      ‚# t        j                  $ r& | j                  j                  «        t        d	«      ‚w xY w)
Né   ©Útimeoutr   é   zscrcpy error: start failureé   z/scrcpy error: device disconnected while runningzscrcpy errorz!scrcpy not handled SIGINT, killed)rX   ÚdetachrD   Úsend_signalÚsignalÚSIGINTÚwaitr   rR   ÚTimeoutExpiredrW   )r   Ú
returncodes     r   r   z_ScrcpyScreenRecord._stopv   s¯   € Ø�‰×ÑÔ Ø�‰×ÑœFŸM™MÔ*ð	@ØŸ™Ÿ™¨a˜Ó0ˆJØ˜QŠØØ˜q’ÜÐ<Ó=Ð=Ø˜q’ÜÐPÓQÐQä˜~¨zÓ:Ð:øÜ×(Ñ(ò 	@Ø�G‰G�L‰LŒNÜÐ>Ó?Ð?ð	@ús   Á!B Á',B Â9CN)r#   r$   r%   r   r.   r(   r   r   r)   r   r   r   r   r   r4   r4   \   s:   „ ð)˜.ó )ð8˜dó 8ð-˜4ó -ð
B˜só 
Bó@r   r4   c                   óÜ   — e Zd ZdZddedefd„Zdefd„Zdefd	„Z	 e
ed
dd¬«      dej                  fd„«       Zdej                  fd„Zdej                  dej                   fd„Zdefd„Zy)Ú_ScrcpyJarScreenrecordu�  
    # -y  overwrite output files
    ffmpeg -i "output.h264" -c:v copy -f mp4 -y "video.mp4"

    é�—ç•™é—®é¢˜ï¼šç§’è¡¨è§†é¢‘ï¼Œè½¬åŒ–å�Žçš„è§†é¢‘æ—¶é•¿ä¸�å¯¹å•Šï¼ˆæœ¬æ�¥5sçš„ï¼Œè½¬åŒ–å�Žå�˜æˆ�äº†20sï¼‰

    https://stackoverflow.com/questions/21263064/how-to-wrap-h264-into-a-mp4-container

    å��è®®æ²¡æœ‰å®Œå…¨ç�†è§£ï¼ŒFrameçš„ptsä¹Ÿæ²¡æœ‰ã€‚è¿˜æ˜¯éœ€è¦�å¤šçœ‹çœ‹scrcpyçš„ä»£ç �æ‰�è¡Œã€‚
    Nr:   Úh264_filenamec                 ó`   — || _         || _        d | _        t        j                  «       | _        y r   )r>   Ú	_filenameÚ_connÚ	threadingÚEventÚ_done_event)r   r:   rh   s      r   r.   z_ScrcpyJarScreenrecord.__init__”   s&   € ØˆŒØ&ˆŒØ$(ˆŒ
Ü$Ÿ?™?Ó,ˆÕr   r   c                 óL   — | j                   xr | j                   j                   S r   )rk   Úclosedr   s    r   r   z#_ScrcpyJarScreenrecord.is_recordingš   s   € Ø�z‰zÒ3 $§*¡*×"3Ñ"3Ð3Ð3r   r   c                 ól  — || _         t        j                  t        «      j	                  «       j
                  }d}|j                  d«      }|j                  «       sJ ‚| j                  j                  j                  ||«       g d¢}d|z   ddddd	g|z   }| j                  j                  |d
¬«      }|}~|j                  j                  d«      j                  d«      }	t        d|	«       || _        t#        j$                  d| j&                  |j                  fd
¬«      j)                  «        t+        j,                  d«       | j/                  «       }
t        j                  | j                   «      j1                  d«      }t#        j$                  d| j2                  |
|fd
¬«      j)                  «        y )Nz!/data/local/tmp/scrcpy-server.jarzbinaries/scrcpy-server-1.24.jar)zcontrol=falsezbit_rate=8000000ztunnel_forward=truezlock_video_orientation=-1zsend_dummy_byte=falsezsend_device_meta=falsezsend_frame_meta=truezdownsize_on_error=truez
CLASSPATH=Úapp_processú/z--nice-name=scrcpy-serverzcom.genymobile.scrcpy.Serverz1.24T©Ústreaméd   úutf-8zScrcpy:Úscrcpy_main)r@   ÚtargetÚargsÚdaemonçš™™™™™¹?ÚwbÚsocket_copy)rj   ÚpathlibÚPathÚ__file__ÚabsoluteÚparentÚjoinpathÚexistsr>   ÚsyncÚpushÚshellÚconnÚrecvÚdecoder   rk   rl   ÚThreadÚ
_copy2nullÚstartÚtimeÚsleepÚ_safe_dial_scrcpyÚopenÚ
_copy2file)r   r   ÚcurdirÚdevice_jar_pathÚscrcpy_server_jar_pathÚoptsÚcmdÚ_cÚcÚmessageÚstream_sockÚfhs               r   r   z_ScrcpyJarScreenrecord._start�   sq  € Ø!ˆŒÜ—‘œhÓ'×0Ñ0Ó2×9Ñ9ˆØ=ˆð "(§¡Ð1RÓ!SÐØ%×,Ñ,Ô.Ð.Ð.à�‰�‰×ÑÐ0°/ÔBò	
ˆð ˜?Ñ*ØØØ'Ø*Øð
ð ñˆð �W‰W�]‰]˜3 tˆ]Ó,ˆØˆØØ—&‘&—+‘+˜cÓ"×)Ñ)¨'Ó2ˆÜˆi˜Ô!ØˆŒ
Ü×ÑØ t§¡¸a¿f¹f¸YÈtô	
ç
‰%Œ'Ü�
‰
�3ŒØ×,Ñ,Ó.ˆÜ�\‰\˜$Ÿ.™.Ó)×.Ñ.¨tÓ4ˆÜ×ÑØØ—?‘?Ø˜rÐ"Øô		
÷
 ‰%�'r   é
   r|   g{®Gáz„?)ÚtriesÚdelayÚjitterc                 óV   — | j                   j                  t        j                  d«      S )Nr=   )r>   Úcreate_connectionr   ÚLOCAL_ABSTRACTr   s    r   r‘   z(_ScrcpyJarScreenrecord._safe_dial_scrcpyÍ   s   € à�w‰w×(Ñ(¬×)?Ñ)?ÀÓJÐJr   Úsc                 ó”   — 	 	 |j                  d«      }|dk(  rt        d|j                  d«      «       n	 Œ5t        d«       y #  Y ŒxY w)Ni   r   zO:rw   zScrcpy mainThread stopped)rŠ   r   r‹   )r   r¥   Úchunks      r   r�   z!_ScrcpyJarScreenrecord._copy2nullÑ   sS   € ØðØŸ™˜t›�Ø˜C’<Ü˜$ §¡¨WÓ 5Ô6Øð  ð ô 	Ð)Õ*øðÙús   ƒ1A ÁAr�   c                 óÀ   — 	 |j                  d«      }|sn|j                  |«       Œ&|j                  «        t        dd¬«       | j                  j                  «        y )NTi   zCopy h264 stream finished)Úflush)rŠ   ÚwriteÚcloser   rn   Úset)r   r¥   r�   r§   s       r   r“   z!_ScrcpyJarScreenrecord._copy2fileÜ   sP   € ØØ—F‘F˜7“OˆEÙØØ�H‰H�UŒOð	 ð
 	�‰Œ
ÜÐ)°Õ6Ø×Ñ×ÑÕr   c                 óÎ   — | j                   j                  «        | j                  j                  d¬«       t	        j
                  d«       | j                  j                  «        y )Ng      @r[   r]   )rk   r«   rn   rc   r�   r�   Úclearr   s    r   r   z_ScrcpyJarScreenrecord._stopæ   sF   € Ø�
‰
×ÑÔØ×Ñ×Ñ cÐÔ*Ü�
‰
�1ŒØ×Ñ×ÑÕ r   r   )r#   r$   r%   Ú__doc__r   r)   r.   r(   r   r   r   r   Úsocketr‘   r�   ÚtypingÚBinaryIOr“   r   r   r   r   rg   rg   ˆ   s—   „ ñ	ñ-˜.ð -¸ó -ð4˜dó 4ð.˜só .ñ` ˆ8˜2 S°Ô6ðK 6§=¡=ò Kó 7ðKð	+˜FŸM™Mó 	+ð˜FŸM™Mð ¨v¯©ó ð!�tô !r   rg   c                   óD   — e Zd Zd
defd„Zdefd„Zdefd„Zdefd„Z	d	„ Z
y)r5   Nr:   c                 óx   — || _         |s#dt        t        j                  «       dz  «      z  }|| _        d| _        y)z#The maxium record time is 3 minutesz!/sdcard/adbutils-tmp-video-%d.mp4iè  N)r>   Úintr�   Ú_remote_pathÚ_stream)r   r:   Úremote_pathÚ	autostarts       r   r.   z_AdbScreenRecord.__init__ï   s6   € àˆŒÙØ=ÄÄDÇIÁIÃKÐRVÑDVÓ@WÑWˆKØ'ˆÔØˆ�r   r   c                 óZ   — | j                   j                  ddg«      }|j                  dk(  S )NrB   Úscreenrecordr   )r>   Úshell2re   )r   Úrets     r   r   z_AdbScreenRecord.check_env÷   s(   € Ø�g‰g�n‰n˜g ~Ð6Ó7ˆØ�~‰~ Ñ"Ð"r   c                 ó^   — t        | j                  xr | j                  j                   «      S r   )r(   r·   rp   r   s    r   r   z_AdbScreenRecord.is_recordingû   s#   € Ü�D—L‘LÒ<¨¯©×)<Ñ)<Ð%<Ó=Ð=r   r   c                 ó  — || _         t        j                  d«      j                  d«      }| j                  j
                  j                  |d«       | j                  j                  dd| j                  gd¬«      | _	        y )Nz         #!/system/bin/sh
        # generate by adbutils
        screenrecord "$1" &
        PID=$!
        read ANY
        kill -INT $PID
        wait
        rw   z /sdcard/adbutils-screenrecord.shÚshTrt   )
rj   ÚtextwrapÚdedentÚencoder>   r†   r‡   rˆ   r¶   r·   )r   r   Úscript_contents      r   r   z_AdbScreenRecord._startþ   sr   € Ø!ˆŒÜ!Ÿ™ðó

÷ ‰&�‹/ð 	ð 	�‰�‰×Ñ˜.Ð*LÔMØ&*§g¡g§m¡mØÐ5°t×7HÑ7HÐIÐRVð '4ó '
ˆ�r   c                 ó`  — | j                   j                  d«       | j                   j                  «        | j                   j                  «        | j                  j
                  j                  | j                  | j                  «       | j                  j                  | j                  «       y )Nó   
)
r·   ÚsendÚread_until_closer«   r>   r†   Úpullr¶   rj   Úremover   s    r   r   z_AdbScreenRecord._stop  sl   € Ø�‰×Ñ˜%Ô Ø�‰×%Ñ%Ô'Ø�‰×ÑÔà�‰�‰×Ñ˜$×+Ñ+¨T¯^©^Ô<Ø�‰�‰�t×(Ñ(Õ)r   )NF)r#   r$   r%   r   r.   r(   r   r   r)   r   r   r   r   r   r5   r5   í   s7   „ ñ˜.ó ð#˜4ó #ð>˜dó >ð
˜só 
ó$*r   r5   )r¯   r&   r?   r   rA   ra   r°   rR   rÁ   rl   r�   r±   rU   r   Úadbutils.errorsr   Úadbutils._utilsr   Úadbutils._adbr   r   Úadbutils._interfacesr   ÚABCr
   r+   r4   rg   r5   r   r   r   ú<module>rÐ      s†   ðñó Û 	Û Û Û Û Û Û Û Û Û Û å å $Ý $ß 0Ý /ô˜3Ÿ7™7ô ô<7˜Nô 7ôD)@Ð.ô )@÷Xb!ñ b!ôJ)*Ð+õ )*r   