Meie tooted

Beam + Beacon

Teie Maci ekraanipilt ja heli reaalajas iPhone'is või iPadis. Puudutage klõpsamiseks, tippige Maci klahvidega ja mängige puldiga. Beacon on tasuta Maci kaasrakendus, mis edastab pildi ja heli.

Horisontaalne iPhone, mille ekraanil on Beami kaudu edastatav Maci töölaud.
mõõdetud mediaanviide Macist telefoni
24,5 ms
parim kvaliteet ProMotioniga seadmetel
4K · 120 fps
igal kaadril, võtmed X25519 kaudu
AES-256-GCM
kontot või Beami serverit ühenduses
0

Teie Mac on teises toas.

Enamik ekraanijagamise tööriistu on loodud kaugtoe jaoks. Need on aeglased, sageli helita ning enamasti seotud konto ja kellegi teise serveritega. Vanemate printeri korda tegemiseks sellest piisab. Diivanilt video vaatamiseks, pika ekspordi jälgimiseks või voodist mängimiseks enam mitte.

Beam on loodud selleks, et kasutada oma Maci kodu teisest otsast. Pilt ja heli koos, piisavalt kiiresti klõpsamiseks, tippimiseks ja mängimiseks. Miski ei lahku teie võrgust.

Mida see võimaldab

  • Picture in Picture

    Hoidke Maci pilti koos heliga telefoni ekraani nurgas, samal ajal kui kasutate teisi rakendusi.

  • Klõpsake, lohistage, kerige

    Puudutus teeb klõpsu. Paremklõpsuks hoidke sõrme paigal ja tõstke see üles. Lohistamiseks hoidke ja liigutage, kerimiseks kasutage kahte sõrme.

  • Päris Maci klahvid

    Klaviatuuri kohal on Esc, Tab, nooleklahvid, Command ja F1 kuni F12. Muuteklahvid saab jätta järgmist klahvivajutust ootama või lukustada.

  • Makrod

    Kuni kaheksa kohandatava nupuga riba teie enim kasutatud kiirklahvide jaoks.

  • Mängupuldid

    Siduge pult telefoniga ja Mac näeb seda virtuaalse HID-seadme kaudu Xbox Wireless Controllerina.

  • Üks aken või valitud ala

    Edastage üht akent, kärpige ja lukustage ekraaniala, suurendage sõrmedega kuni viis korda või peegeldage pilti teleprompteri jaoks.

  • Kodust eemal

    Ühenduge oma Tailscale'i võrgu kaudu, ilma Beami vahendusserverita. Rakendus näitab, kas ühendus on otsene või vahendatud.

  • Kvaliteedi eelseaded

    Alates 360p-st kuni 4K ja Native'ini, kiirusega 30 või 60 fps. ProMotioniga seadmetel saab 60-st 120 fps, kui Maci ekraan töötab sama kiiresti.

Kuidas me selle ehitasime

Mõlemad rakendused on kirjutatud Swiftis, kasutades SwiftUI-d. Macis töötav Beacon hõivab ekraanipildi ScreenCaptureKitiga, kodeerib selle VideoToolboxiga HEVC või H.264 vormingusse ning heli AAC-LC vormingusse bitikiirusega 128 kbps. See teisendab puudutused CGEventi hiireklõpsudeks ja klahvivajutusteks ning loob virtuaalse HID-mängupuldi, mida mängud näevad päris puldina.

iPhone'is ja iPadis töötav Beam dekodeerib pildi otse AVSampleBufferDisplayLayerisse, esitab heli AVAudioEngine'i kaudu ning annab sama kihi AVKitile Picture in Picture jaoks. Ostud käivad StoreKit 2 kaudu.

Rakendused ei suhtle omavahel otse. Kogu nendevaheline andmevahetus käib Phorose kaudu.

  • Swift + SwiftUI
  • ScreenCaptureKit
  • VideoToolbox (HEVC, H.264)
  • AVSampleBufferDisplayLayer
  • AVAudioEngine
  • Network.framework
  • IOHIDUserDevice
  • Rust (str0m) UDP jaoks

Phoros

Phoros (kreeka φόρος, kandja) on Beami jaoks loodud andmeedastusprotokoll. See edastab videot, heli, sisendit ja juhtandmeid kahe samas võrgus oleva seadme vahel. Phoros on MIT-litsentsiga avatud lähtekoodiga Swifti pakett, mis töötab iOS-is, macOS-is, tvOS-is ja visionOS-is.

  1. 01

    Leidmine ja sidumine

    Beacon teeb end Bonjouri kaudu leitavaks teenusena _beam._tcp. Sidumiseks näitab Mac kuuekohalist koodi, mille sisestate telefoni. Koodi ennast võrku ei saadeta ja see aegub viie minuti pärast. Sidumisel saavad mõlemad seadmed 32-baidise juhusliku ühissaladuse, mida hoitakse Keychainis.

  2. 02

    Kaks edastusviisi

    Versioon 1 kasutab TCP-d: iga kaader sisaldab 4-baidist pikkusevälja ja 10-baidist päist, mis algab tunnusega BEAM. Kasuliku koorma ülempiir on 1 400 baiti. Versioon 2 lisab UDP, mis on kirjutatud Rustis str0m-i põhjal ja ühendatud väikese C-liidese kaudu. Video jaoks kasutatakse ICE-d, DTLS-i ja SRTP-d, iga kaheksa meediadatagrammi kohta lisatakse üks XOR-paarsusdatagramm ning ülejäänud andmed liiguvad SCTP-kanalites. Kui 700 ms jooksul ei kinnitata ühegi kaadri vastuvõttu, läheb seanss tagasi TCP-le ja küsib võtmekaadrit.

  3. 03

    Kolm kanalit, kindel järjekord

    Esimesena liiguvad juhtandmed, siis heli ja lõpuks video. Üle 100 ms vanad videokaadrid jäetakse saatmata, saatmisjärjekorra sihtviide on 30 ms ja heli ei vaiki kunagi kauemaks kui sekundiks. UDP puhul on sisendsõnumite eluiga 50 ms ja heli eluiga 400 ms. Pärast seda pole neid enam mõtet edastada.

  4. 04

    Krüpteerimine

    Alates Beami versioonist 3.6 algab seanss X25519 võtmevahetusega. Tulemus ühendatakse sidumisel loodud ühissaladusega HKDF-SHA256 abil, kasutades soolana käepigistuse räsi. Nii saadakse kummagi suuna jaoks eraldi AES-256-GCM võti ning Mac tõendab HMAC-iga, et teab ühissaladust. Nonce-väärtused tulevad 64-bitisest loendurist, mida ei saadeta kunagi võrku. Kulu on 16 baiti kaadri kohta ja M4-l umbes 1 µs iga 1,4 KB paketi kohta.

  5. 05

    Ühendusega kohanev bitikiirus

    Voog algab kiirusel 4 Mbps ja kasvab takistusteta ühenduse korral iga 0,6 s järel poole võrra. Kaks mõõtmist üle 20 ms järjekorraviitega vähendavad kiirust 30%, üle 150 ms viide vähendab seda poole võrra. Kiirus ei lange kunagi alla 1 Mbps. Mängurežiimi ülempiir on 6 Mbps, põhjust selgitame allpool.

Mõõdetud viide

Aeg puldinupu vajutusest pildini millisekundites. Mac mini M4, 1080p HEVC, iPhone 13 Pro Max sagedusel 120 Hz, üks 5 GHz Wi-Fi ühenduslüli.
Stsenaariump50p90p95p99
TCP, 6 Mbps24,5262729
UDP, 6 Mbps23,928,83032
TCP, 10 Mbps36446275
UDP, 10 Mbps30,737,738,146,3
TCP, 2,5% paketikaoga30 kuni 34·45 kuni 152151 kuni 294
UDP, 2,5% paketikaoga27303035

Enne viite vähendamist oli sama seadmepaari mediaanviide 78 ms.

Mis oli keeruline

  • Wi-Fi raadio

    Apple'i seadmetevaheline Wi-Fi põhjustas iga 512 ms järel umbes 90 ms pikkuse raadiosidekatkestuse. Selle ühendusest välistamine viis telefoni p50 / p90 viite väärtustelt 44,6 / 122 ms väärtustele 27 / 36 ms. Samuti avastasime, et kui allalaadimiskiirus ületab umbes 7 Mbps, lisab iPhone kõigele saadetavale 6 kuni 9 ms. Seepärast piirdub mängurežiim 6 Mbps-ga.

  • Kodeerija

    VideoToolboxi vaikimisi bitikiiruse juhtimine viis tegeliku kiiruse sihtväärtusest 1,6 korda suuremaks. Kaadrite eemaldamine pärast kodeerimist tekitas tsükli: eemaldatud kaader, võtmekaader, eemaldatud kaader. Nüüd otsustame enne kodeerimist, millised kaadrid läbi lasta. Ekraanipildi hõivamine kiirusel 120 fps senise 60 asemel vähendas viidet väärtustelt 27 / 33 ms väärtustele 19 / 25 ms.

  • Vanad versioonid on endiselt kasutuses

    Inimesed ei uuenda rakendusi meie ajakava järgi. Töötlemata PCM-heli ootavale versioonile saadetud AAC kõlas maksimaalse helitugevusega valge mürana ning 32-bitised UDP-ajatemplid lasid helil ja videol umbes 15 minuti võrra lahku triivida. Kõik need juhtumid on nüüd protokolli ühilduvusjuhendis kirjas.

  • App Review

    Esimesed esitatud versioonid lükati tagasi kaubamärgi, taustaheli ja minimaalse funktsionaalsuse nõuete tõttu. Iga tagasilükkamine aitas meil toote olemust selgemalt väljendada.

Millele pöörasime erilist tähelepanu

  • Viite mõõtmise süsteem

    Mõõteseade mõõdab aega puldinupu vajutusest hetkeni, mil telefonis dekodeeritud kaadris muutub must valgeks. See kontroll on osa väljalaskeprotsessist, et aeglasem versioon kogemata kasutajateni ei jõuaks.

  • Krüpteerimine, mille kulu pole tunda

    Krüpteeritud voo läbiv mediaanviide oli 23,1 ms, krüpteerimata voo oma 21,9 ms. Vanemad kliendid jäid tööle vaikimisi lubatud ühilduvussätte abil, mille Maci omanik saab välja lülitada.

  • Privaatsus

    Kontot ega Beami servereid pole. Beacon ei saada üldse analüütikaandmeid. Beam saadab anonüümitud kasutussündmusi, et näeksime, mis ei tööta.

  • Õiglane hind

    Kolm päeva piiranguteta proovimiseks, seejärel iga päev 30 tasuta minutit. Beam Unlimited maksab ühekordselt 7,99 $ ja Beacon on alati tasuta.

EdasiNative Sound MixerMaci rakenduste helitugevuse eraldi juhtimine helimoodulis, mille värvierinevus Apple'i omast jääb ühe astme piiresse.

Kas teil on idee, mis väärib teostust?