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.

- 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.
App Store'i lehelt
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.
- 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. - 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.
- 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.
- 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.
- 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
| Stsenaarium | p50 | p90 | p95 | p99 |
|---|---|---|---|---|
| TCP, 6 Mbps | 24,5 | 26 | 27 | 29 |
| UDP, 6 Mbps | 23,9 | 28,8 | 30 | 32 |
| TCP, 10 Mbps | 36 | 44 | 62 | 75 |
| UDP, 10 Mbps | 30,7 | 37,7 | 38,1 | 46,3 |
| TCP, 2,5% paketikaoga | 30 kuni 34 | · | 45 kuni 152 | 151 kuni 294 |
| UDP, 2,5% paketikaoga | 27 | 30 | 30 | 35 |
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.




