now we can show screen android to the browser yea yea yea!

This commit is contained in:
Kenta420 2024-01-22 17:34:33 +07:00
parent d6cba315ec
commit 35ebde967d
3 changed files with 20 additions and 17 deletions

View file

@ -33,7 +33,7 @@ const MainLayout = () => {
<div> <div>
<Sidebar /> <Sidebar />
<Header /> <Header />
<main className="fixed pt-[5rem] pl-[21rem]"> <main className="absolute top-[5rem] left-[21rem]">
<Outlet /> <Outlet />
</main> </main>
</div> </div>

View file

@ -4,11 +4,11 @@ import AdbWebCredentialStore from '@yume-chan/adb-credential-web'
import { Adb, AdbDaemonTransport } from '@yume-chan/adb' import { Adb, AdbDaemonTransport } from '@yume-chan/adb'
import useAdb from '../hooks/useAdb' import useAdb from '../hooks/useAdb'
import type { AdbScrcpyVideoStream } from '@yume-chan/adb-scrcpy' import type { AdbScrcpyVideoStream } from '@yume-chan/adb-scrcpy'
import { AdbScrcpyClient, AdbScrcpyOptions2_1 } from '@yume-chan/adb-scrcpy' import { AdbScrcpyClient, AdbScrcpyOptions1_22 } from '@yume-chan/adb-scrcpy'
import { WebCodecsDecoder } from '@yume-chan/scrcpy-decoder-webcodecs' import { WebCodecsDecoder } from '@yume-chan/scrcpy-decoder-webcodecs'
import { import {
ScrcpyLogLevel1_18, ScrcpyLogLevel1_18,
ScrcpyOptions2_2, ScrcpyOptions1_25,
ScrcpyVideoCodecId ScrcpyVideoCodecId
} from '@yume-chan/scrcpy' } from '@yume-chan/scrcpy'
import { useCallback, useRef, useState } from 'react' import { useCallback, useRef, useState } from 'react'
@ -78,7 +78,7 @@ const AndroidPage: React.FC = () => {
async function scrcpyConnect() { async function scrcpyConnect() {
const server: ArrayBuffer = await fetch( const server: ArrayBuffer = await fetch(
new URL('../scrcpy/scrcpy_server_v2.2', import.meta.url) new URL('../scrcpy/scrcpy_server_v1.25', import.meta.url)
).then(res => res.arrayBuffer()) ).then(res => res.arrayBuffer())
await AdbScrcpyClient.pushServer( await AdbScrcpyClient.pushServer(
@ -92,7 +92,7 @@ const AndroidPage: React.FC = () => {
) )
const res = await adb!.subprocess.spawn( const res = await adb!.subprocess.spawn(
'CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / com.genymobile.scrcpy.Server 2.2' 'CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / com.genymobile.scrcpy.Server 1.25'
) )
res.stdout.pipeThrough(new DecodeUtf8Stream()).pipeTo( res.stdout.pipeThrough(new DecodeUtf8Stream()).pipeTo(
@ -103,25 +103,25 @@ const AndroidPage: React.FC = () => {
}) })
) )
const scrcpyOption = new ScrcpyOptions2_2({ const scrcpyOption = new ScrcpyOptions1_25({
audio: false,
maxFps: 60, maxFps: 60,
control: false, control: true,
video: true,
logLevel: ScrcpyLogLevel1_18.Debug, logLevel: ScrcpyLogLevel1_18.Debug,
stayAwake: true, stayAwake: true
cleanup: true
}) })
const _client = await AdbScrcpyClient.start( const _client = await AdbScrcpyClient.start(
adb!, adb!,
'/data/local/tmp/scrcpy-server.jar', '/data/local/tmp/scrcpy-server.jar',
'2.2', '1.25',
new AdbScrcpyOptions2_1(scrcpyOption) new AdbScrcpyOptions1_22(scrcpyOption)
) )
const videoStream: AdbScrcpyVideoStream | undefined = const videoStream: AdbScrcpyVideoStream | undefined =
await _client?.videoStream await _client?.videoStream
const _decoder = new WebCodecsDecoder(ScrcpyVideoCodecId.H264) const _decoder = new WebCodecsDecoder(ScrcpyVideoCodecId.H264)
_decoder.renderer.style.maxHeight = 'inherit'
screenRef.current?.appendChild(_decoder.renderer) screenRef.current?.appendChild(_decoder.renderer)
videoStream?.stream.pipeTo(_decoder.writable) videoStream?.stream.pipeTo(_decoder.writable)
setDecoder(_decoder) setDecoder(_decoder)
@ -138,6 +138,9 @@ const AndroidPage: React.FC = () => {
function scrcpyDisconnect() { function scrcpyDisconnect() {
decoder?.dispose() decoder?.dispose()
client?.close() client?.close()
if (decoder && screenRef.current) {
screenRef.current.removeChild(decoder.renderer)
}
setClient(undefined) setClient(undefined)
setDecoder(undefined) setDecoder(undefined)
} }
@ -147,8 +150,9 @@ const AndroidPage: React.FC = () => {
} }
return ( return (
<> <div className="overflow-y-auto flex flex-row w-[1080px] h-full">
<div className="grid grid-cols-2 gap-4"> <div ref={screenRef} className="flex-grow-[0.7] h-full"></div>
<div className="justify-center items-center flex-grow-[0.3]">
<div className="flex flex-col"> <div className="flex flex-col">
<button <button
className="btn btn-primary" className="btn btn-primary"
@ -166,8 +170,7 @@ const AndroidPage: React.FC = () => {
</div> </div>
<div className="bg-white">{adb && device ? device.name : ''}</div> <div className="bg-white">{adb && device ? device.name : ''}</div>
</div> </div>
<div ref={screenRef}></div> </div>
</>
) )
} }

Binary file not shown.