Internals - AtesComp/miraclecast GitHub Wiki

Internals:

The Miracast specification is implemented on MiracleCast by:

  • miracle-wifid: Is a daemon which spawns a wpa_supplicant with special configuration to pair with other devices by Wifi P2P and manage dhcp on created network
  • miracle-sinkctl: Is a controller connected to miracle-wifid which selects interface to use and manage RSTP communication, program to play audio/video screening and UIBC (input on source from sink) interaction.
  • miracle-wifictl: Is a controller connected to miracle-wifid to use miraclecast as source (implementation not finished)
  • miracle-gst and gstplayer: Players for streamed video
  • miracle-uibcctl: Is a controller runned in parallel with gstplayer to send input events

WIP:

Source Implementation:

With WIP source implementation, source side functionalities are implemented by:

  • miracle-dispd: Is a daemon which maintains WiFi-Display session(s) and spawn gstencoder to stream your screen and audio to the sink.
  • miracle-dispctl: Is a front-end to control miracle-wifid and miracle-dispd for user to establish WiFi-Display session(s).
  • gstencoder: Encode your screen and/or audio then stream to sink.

Run as a service and access to privileged resources

WIP source implementation also added DBus and systemd service files for miracle-wifid and miracle-dispd, this way, the two daemons can be launched on-demand (eg. by running miracle-dispctl).

In the systemd service files, unused caps are dropped (further fine grained permission control are needed), if any EPERM error encountered, try to relax it from miracle-wifid.service or miracle-dispd.service. miracle-dipsd also switches to the user who request to establish WiFi-Display session (the user who owns the display session) and restricts it to gain new caps by prctl().

Windows compatibility

With WIP windows fix you can do screen mirroring with a a Windows 10 OS as sink