Skip to content

Adding External Screen Support [Feature Request #11] - #411

Open
mattrussell7 wants to merge 1 commit into
moonlight-stream:masterfrom
mattrussell7:master
Open

Adding External Screen Support [Feature Request #11]#411
mattrussell7 wants to merge 1 commit into
moonlight-stream:masterfrom
mattrussell7:master

Conversation

@mattrussell7

Copy link
Copy Markdown

Added External Screen Support for all iOS devices whether through HDMI Out via Lightning/USB-C or Airplay Screen Mirroring.

Feature Request #11 discusses this.

Comment thread Limelight/ViewControllers/StreamFrameViewController.m
Comment thread Limelight/ViewControllers/StreamFrameViewController.m Outdated
Comment thread Limelight/ViewControllers/StreamFrameViewController.m Outdated
@stale stale Bot added the stale label Aug 21, 2020
@moonlight-stream moonlight-stream deleted a comment from stale Bot Aug 21, 2020
@stale stale Bot removed the stale label Aug 21, 2020
@tristan-k

Copy link
Copy Markdown

Will this be merged anytime soon?

@jasonmp85

Copy link
Copy Markdown

What does this need to be merged? I hate playing in pillarbox on my TV, which is pretty much my main use case for this app

@tristan-k

Copy link
Copy Markdown

Still waiting for this one. Steam Link already does this albeit with black bars due to the aspect ratio of iPads.

@tristan-k tristan-k mentioned this pull request Jul 5, 2021
@stale

stale Bot commented Jan 8, 2022

Copy link
Copy Markdown

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

@stale stale Bot added the stale label Jan 8, 2022
@jasonmp85

Copy link
Copy Markdown

Ping to keep from closing.

@stale stale Bot removed the stale label Jan 20, 2022
@marinobantli

marinobantli commented Mar 1, 2022

Copy link
Copy Markdown

Hello, I started working on this and got it to work for now. However, I've never coded in objective C before and there is some potential to optimize or better ways to solve it for sure.

For now, when you connect an external Display, it will automatically move the stream to the external screen in its native resolution and the iPad only shows a black screen (or the statistics overlay if you enabled it). If you unplug the monitor, it will move to the iPad screen again.

However, at the moment, i don't get it to work above 60Hz...

@tristan-k

tristan-k commented Mar 9, 2022

Copy link
Copy Markdown

@marinobantli Do you have a IPA binary available for testing?

@jasonmp85

Copy link
Copy Markdown

I've no Obj-C experience either, but give me an app and what I can do to get logs or debugging or whatever and I'll gladly help out.

@ReclusiveRychuRychu

Copy link
Copy Markdown

Hello, I started working on this and got it to work for now. However, I've never coded in objective C before and there is some potential to optimize or better ways to solve it for sure.

For now, when you connect an external Display, it will automatically move the stream to the external screen in its native resolution and the iPad only shows a black screen (or the statistics overlay if you enabled it). If you unplug the monitor, it will move to the iPad screen again.

However, at the moment, i don't get it to work above 60Hz...

This sounds amazing! and exactly what Moonlight needs. Can any devs implement this?

@marinobantli

Copy link
Copy Markdown

Sorry for the silence, as of now, the external screen works, but I can't get mouse scrolling and keyboard inputs to work on the external screen. Controller input works however.

I would like to implement a little "dashboard" which is displayed on the iPads screen whenever an external display is connected to be able to change the external resolution.

@ReclusiveRychuRychu

ReclusiveRychuRychu commented Mar 16, 2022

Copy link
Copy Markdown

Sorry for the silence, as of now, the external screen works, but I can't get mouse scrolling and keyboard inputs to work on the external screen. Controller input works however.

I would like to implement a little "dashboard" which is displayed on the iPads screen whenever an external display is connected to be able to change the external resolution.

No apologies necessary! You're solving the final piece of the puzzle for my ideal set up! As a controller user this sounds like all I'd need, but obviously making sure everything works properly is important, and the added dashboard sounds like a lovely QoL improvement.

I'd love to see @cgutman help you with this and get it implemented in the next version!

@jasonmp85

Copy link
Copy Markdown

To be clear, I need to take this branch, build it, and try it out?

@gsaker

gsaker commented Jul 4, 2022

Copy link
Copy Markdown

I would also love this feature to be added. Any updates?

@perroboc

Copy link
Copy Markdown

Ping! Just because I think this is a must 🙂

@marinobantli

Copy link
Copy Markdown

I will try to work on it again in a few weeks…
I’m absolutely new to Objective-C and what i have written so far will probably be obsolete / cleaner to code in the upcoming ipadOS 16 due to the new Stage Manager.

@beitincapital

Copy link
Copy Markdown

Hello - just wondering if anyone has made progress on this request? The feature would be an amazing addition to the iOS app.

@git-nerd

git-nerd commented Dec 22, 2022

Copy link
Copy Markdown

It would be great if this feature did not depend on stage manager, because there are ipads that don’t all run stage manager (like ipad mini).

@patroza

patroza commented Jul 21, 2023

Copy link
Copy Markdown

here's an updated fork that works https://github.com/patroza/moonlight-ios/pull/1/files

stage manager solutions are not useful for me because I dont have a pointing device like mouse connected to change the window to full screen on the external display. the external display is even just xreal air glasses.
so this solution is great as it functions similar to Apple TV, Netflix and steam link.

@jeff08568

Copy link
Copy Markdown

Can I use your fork or do we have to wait for merge

@patroza

patroza commented Jul 22, 2023

Copy link
Copy Markdown

Can I use your fork or do we have to wait for merge

Feel free

@jeff08568

Copy link
Copy Markdown

Can confirm it’s working as expected. However when I locked my screen I noticed the image becomes static/stopped moving? Is this an iOS limitation?

@patroza

patroza commented Jul 23, 2023

Copy link
Copy Markdown

Can confirm it’s working as expected. However when I locked my screen I noticed the image becomes static/stopped moving? Is this an iOS limitation?

Think so but unsure; how is the behavior with Netflix or TV app? Or Steam link

@jeff08568

jeff08568 commented Jul 23, 2023

Copy link
Copy Markdown

Can confirm it’s working as expected. However when I locked my screen I noticed the image becomes static/stopped moving? Is this an iOS limitation?

Think so but unsure; how is the behavior with Netflix or TV app? Or Steam link

I’ve tested Netflix, Plex and nPlayer, they all seem to work fine with screen off. Not sure about steam link though, will test tomorrow

Edit: I’ve tested Steam link, it behaves exactly as your forked version. Not sure how apps like Netflix got around this, although I doubt you can send any controller signal to iOS with the screen locked.

@patroza

patroza commented Jul 24, 2023

Copy link
Copy Markdown

I’ve tested Netflix, Plex and nPlayer, they all seem to work fine with screen off. Not sure about steam link though, will test tomorrow

Edit: I’ve tested Steam link, it behaves exactly as your forked version. Not sure how apps like Netflix got around this, although I doubt you can send any controller signal to iOS with the screen locked.

nice find! yea in my case I use controllers connected to my pc, so for me that would be fine. but I imagine for most other people it will be important.

@mikicof

mikicof commented Nov 9, 2023

Copy link
Copy Markdown

I'm very interested having this, can we go on with the PR?

@amirlpro

Copy link
Copy Markdown

Please prioritize this PR

@yichengchen

yichengchen commented May 4, 2024

Copy link
Copy Markdown

any progress on this?I try merge the pr with the master branch and it works. If there are any necessary change need to do before merge, I am willing to help.

@Rayray1099

Copy link
Copy Markdown

Any updates on the External Screen Support?

@Write

Write commented Nov 4, 2024

Copy link
Copy Markdown

Would love to see this too

@andygrundman

Copy link
Copy Markdown

I built and tested this patch on iPadOS 18.3 beta and unfortunately it doesn't seem to work. I have another remote desktop app called Jump Desktop that does work correctly, so I bet it's just that this patch is a bit outdated now. I'm going to try to learn more about the recommended way to do this. I think this part is key:

Screenshot 2025-01-16 at 19 05 09

https://developer.apple.com/documentation/uikit/presenting-content-on-a-connected-display?language=objc
https://developer.apple.com/documentation/uikit/building-a-desktop-class-ipad-app?language=objc

I uploaded a branch with the few tweaks this patch needed in order to apply. It's at https://github.com/andygrundman/moonlight-ios/tree/andyg.ipad-external-display

@yoonsikp

Copy link
Copy Markdown

It's been five years, this is getting out of hand...

@andygrundman

Copy link
Copy Markdown

I think first steps will be to update the app to iOS 13.0 deployment version and refactor the UI from AppDelegate to SceneDelegate. Basically, in iOS 13 iPad got multiple window support, and Apple added the Scene APIs to support it. External display mode where you are allowed to run full screen and change the resolution/refresh rate of the external display is a special scene type called "Non-interactive".

@Vladoker

Copy link
Copy Markdown

I think first steps will be to update the app to iOS 13.0 deployment version and refactor the UI from AppDelegate to SceneDelegate. Basically, in iOS 13 iPad got multiple window support, and Apple added the Scene APIs to support it. External display mode where you are allowed to run full screen and change the resolution/refresh rate of the external display is a special scene type called "Non-interactive".

Have you managed to implement a full-screen format without black bars for iphone/ios18+?

I still admire the Shadow PC team for how cool and smooth everything works for them, I hope moonlight will catch up with them one day)
They have a cool full screen mode for the iphone, is it possible to replicate their functionality?

@Moosdijk

Copy link
Copy Markdown

Reading this thread, I get the impression that a solution is not implemented unless all use cases are met.

Could the functionality be implemented in a phased rollout? From what I read, the iOS version has been good to go for some time, with the caveat of only being able to use controllers. This already accounts for a decent chunk of the userbase, no?

@Jasparigus

Copy link
Copy Markdown

Bump

Any reason this is stalled out for so long? Is this PR not working as is?
Being able to match external display resolution on IOS would be a huge win for gaming and even for desktop usage on the go.

SteamLink already does this as well

@TruFoox

TruFoox commented Aug 16, 2026

Copy link
Copy Markdown

Still nothing?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.