Steam Link

Steam Link

Pi 3B+: Steam Link connects, video output goes blank but controls are still sent to PC
I can't seem to figure out how to pin this issue down, as occasionally I'll load it up and it will work fine, and then I'll try it again and get nothing.

As the title mentions, I'm using a Raspberry Pi 3B+, with the Steamlink Launcher for OSMC, connected with an Ethernet cable to the PC. That's fine, and loads steamlink correctly, however once I actually connect to my PC to begin streaming, I'll typically see a brief flash of the Big Picture mode, then a black screen with some sort of progress/spinning wheel at the bottom right, followed by a completely black screen. During this time, I can still control the PC without issue, and stopping remote play will bring me back to the steamlink connection screen.

Other times, typically after playing with a mixture of options in the steam settings, it will actually work just fine, and then I'll go to fire it up again and it's back to the black screen error. I've managed to get it to randomly work only about twice in the last month or so, and I don't believe I'm changing settings in between (unless something is resetting automatically).

Currently I have the stream set to balanced, with bandwidth limit to auto and resolution limit to display resolution. (Both my monitors and tv are set to 1080p.) Setting the quality to fast or beautiful seems to have no difference.

Has anyone encountered anything similar, or knows where to begin troubleshooting this? A steamlink log file may help to see if there's an error when the video feed dies, but I'm not sure of its location.

Thanks in advance.
Last edited by lowercase dots; Dec 29, 2019 @ 8:30am
< >
Showing 1-13 of 13 comments
JK_Mooney Dec 29, 2019 @ 7:23am 
Did you run a connection test to see what streaming rate you're getting?
lowercase dots Dec 29, 2019 @ 8:27am 
As per my last test a day or so ago, it was 95mb/s. That's typical of any time I've tried it, usually between 90 to 100.
JK_Mooney Dec 29, 2019 @ 8:37am 
That's as good as I get....does the problem happen after the Raspberry has been running for a while? Do you have heat sink on the processor? Are you using the recommended Raspberry power supply?

(I also run Steam Link on a raspberry via OSMC)
Last edited by JK_Mooney; Dec 29, 2019 @ 8:38am
lowercase dots Dec 29, 2019 @ 2:10pm 
I typically leave it running as it's my main streambox for the tv, unless I'm chromecasting something instead. The heat sink is on the processor and I'm using the power supply that came with the bundle, which was an ABOX bundle from Amazon. Nearly identical to the CanaKit.

I can stream 1080p videos from my PC just fine, along with using the Netflix, YouTube, and Twitch addons. I also had moonlight-embedded/Luna working for a bit, which when it did work was mostly flawless, but it hasn't been updated in 3 years and has too many bugs to continue using as much as I would like to.

Steam Link is the only program that is having trouble with video. But since the input works fine (and I believe the audio as well? I'll have to double check) it's been rather confusing to narrow down. I feel like I'd have a better starting point if i couldn't connect to the pc whatsoever, heh.
JK_Mooney Dec 29, 2019 @ 3:17pm 
Ok...I'll have to give it some thought. In the meantime, is your host computer Linux or Windows? If the latter, look for something called "Putty" so I can walk you through remoting into your rasberry via SSH (unless you already know how).
.
Also, if you haven't found it already, check this forum on OSMC...

https://discourse.osmc.tv/t/regarding-steamlink/76800
Last edited by JK_Mooney; Dec 29, 2019 @ 3:21pm
lowercase dots Dec 29, 2019 @ 6:27pm 
Host computer is Windows 10, I use Cmdr as the terminal program to ssh in, but that's just personal preference and does basically the same things as the command prompt or Powershell. While I do have a laptop with Manjaro Linux I could theoretically use to test with as well, it's way too weak to run all but the least demanding games. I think it even struggled with the puzzle game The Bridge.

I did look through that forum post, but it looks like most issues raised were issues with getting the app/plugin working in the first place, rather than having it work but without video. However - I did find out that the log files are actually stored on the host computer, and so:

[2019-12-29 22:10:39] Streaming started to raspberry-pi at 192.168.0.12:64000, audio channels = 2, MTU = 1468 [2019-12-29 22:10:39] Streaming quality: k_EStreamQualityBeautiful [2019-12-29 22:10:39] Streaming bitrate: Automatic [2019-12-29 22:10:39] Maximum capture: 1920x1080 59.75 FPS [2019-12-29 22:10:39] Video Streaming: enabled [2019-12-29 22:10:39] Audio Streaming: enabled [2019-12-29 22:10:39] Input Streaming: enabled [2019-12-29 22:10:39] ===================================================================== [2019-12-29 22:10:39] Game: UNKNOWN (0) [2019-12-29 22:10:39] Setting target bitrate to 15000 Kbit/s, burst bitrate is 75000 Kbit/s [2019-12-29 22:10:39] Changing record window: 005607C0 [2019-12-29 22:10:39] Recording system audio [2019-12-29 22:10:39] Recording on device: Speakers (Steam Streaming Speakers) [2019-12-29 22:10:39] Audio client mix format: [2019-12-29 22:10:39] format: 65534 [2019-12-29 22:10:39] channels: 2 [2019-12-29 22:10:39] samples/sec: 48000 [2019-12-29 22:10:39] bytes/sec: 384000 [2019-12-29 22:10:39] alignment: 8 [2019-12-29 22:10:39] bits/sample: 32 [2019-12-29 22:10:39] channel mask: 0x3 [2019-12-29 22:10:39] data format: {00000003-0000-0010-8000-00AA00389B71} [2019-12-29 22:10:39] Initializing audio with 2 channels and 48000 samples/sec [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlSetQoS [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlSetTargetBitrate [2019-12-29 22:10:39] CLIENT: Starting audio stream: frequency=48000, channels=2 [2019-12-29 22:10:39] CLIENT: Opened audio device: format=2, channels=2, frequency=48000 [2019-12-29 22:10:39] CLIENT: Initialized audio decoder: codec=3, sample rate=48000, channels=2 [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlStartAudioData [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlSetSpectatorMode [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlSetCaptureSize [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlSetTitle [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlSetIcon [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlHideCursor [2019-12-29 22:10:39] CLIENT: Got control packet k_EStreamControlSetActivity [2019-12-29 22:10:39] Audio mix: start=1238378703440, returned=0 [2019-12-29 22:10:39] Audio source [System Windows]: init=0, through=0, last_start=0, mixed=0, drop_before=0, drop_after=0 [2019-12-29 22:10:39] >>> Switching video stream from NONE to Desktop_MovieStream [2019-12-29 22:10:39] CDesktopCaptureDWM: Reinitializing D3D for adapter 0xa789 [2019-12-29 22:10:39] Video adapter: NVIDIA GeForce GTX 1060 6GB, vendor ID: 0x10de, device ID: 0x1c03 [2019-12-29 22:10:39] CDesktopCaptureDWM: desktop duplication enabled [2019-12-29 22:10:39] >>> Capture method set to Steam D3D10 NV12 + NVENC H264 [2019-12-29 22:10:39] >>> Capture resolution set to 1280x720 [2019-12-29 22:10:40] >>> Client video decoder set to Raspberry Pi hardware decoding [2019-12-29 22:10:40] CLIENT: Raspberry Pi hardware decoding [2019-12-29 22:10:40] CLIENT: Got control packet k_EStreamControlStartVideoData [2019-12-29 22:10:40] CLIENT: Got control packet k_EStreamControlVideoEncoderInfo [2019-12-29 22:10:40] CLIENT: Marking frame 0 complete with status k_EStreamFrameResultDroppedLate [2019-12-29 22:10:40] CLIENT: Marking frame 1 complete with status k_EStreamFrameResultDroppedLate [2019-12-29 22:10:40] CLIENT: Marking frame 2 complete with status k_EStreamFrameResultDroppedLate [2019-12-29 22:10:40] CLIENT: Marking frame 3 complete with status k_EStreamFrameResultDroppedLate [2019-12-29 22:10:40] CLIENT: Video size: 1280x720, output size: 1920x1080, overlay size: 1280x256 [2019-12-29 22:10:40] CLIENT: Video rect: 1920x1080 at 0,0 [2019-12-29 22:10:40] CLIENT: Texture rect: 1280x720 at 0,0 [2019-12-29 22:10:40] CLIENT: Sending HID device 045e/02fd/-1 Xbox One Wireless Controller at sdl://0 [2019-12-29 22:11:33] "SessionStats" { "GameNameID" "Steam Big Picture" "appid" "413090" "TimeSubmitted" "1577671893" "ResolutionX" "1280" "ResolutionY" "720" "CaptureDescriptionID" "Steam D3D10 NV12 + NVENC H264" "DecoderDescriptionID" "Raspberry Pi hardware decoding" "BandwidthLimit" "15000" "FramerateLimit" "0" "Transport" "1" "SlowGamePercent" "0" "SlowCapturePercent" "0" "SlowConvertPercent" "0" "SlowEncodePercent" "0" "SlowNetworkPercent" "0" "SlowDecodePercent" "0" "SlowDisplayPercent" "0" "AvgClientBitrate" "47.5511512756347656" "StdDevClientBitrate" "32.3677291870117188" "AvgServerBitrate" "4666.6396484375" "StdDevServerBitrate" "0" "AvgLinkBandwidth" "100000.0078125" "AvgPingMS" "0.0354119092226028442" "StdDevPingMS" "0.0367448069155216217" "AvgCaptureMS" "0.141017600893974304" "StdDevCaptureMS" "0.0628507658839225769" "AvgConvertMS" "0.0114198261871933937" "StdDevConvertMS" "0.480845391750335693" "AvgEncodeMS" "2.14421916007995605" "StdDevEncodeMS" "0.159653708338737488" "AvgNetworkMS" "0.301490962505340576" "StdDevNetworkMS" "0.728369176387786865" "AvgDecodeMS" "0.531858384609222412" "StdDevDecodeMS" "0.161162674427032471" "AvgDisplayMS" "-4306.48046875" "StdDevDisplayMS" "241630.609375" "AvgFrameMS" "10.4532861709594727" "StdDevFrameMS" "1.23484981060028076" "AvgFPS" "61.2038459777832031" "StdDevFPS" "10.464818000793457" "BigPicture" "1" "KeyboardMouseInput" "1" "SteamControllerInput" "0" "TouchControllerInput" "0" "GameControllerInput" "1" "XBox360ControllerInput" "0" "XBoxOneControllerInput" "1" "PS3ControllerInput" "0" "PS4ControllerInput" "0" "OtherControllerInput" "0" "GameControllerVID" "1118" "GameControllerPID" "765" "WasSpectating" "0" "RemotePlayTogether" "0" }

One thing I'm noticing is that it's saying the capture resolution is for some reason set to 1280x720 instead of the 1920x1280 I would expect. Also a few references to "k_EStreamFrameResultDroppedLate"?

...I'm also just noticing my xb1 controller (when connected via the Pi's bluetooth) is causing the mouse cursor on PC to move whenever I use the left analog stick to navigate menus, but that's an entirely different issue and I'll work on that one separately.. More of a note to self after I get this video thing nailed down.
JK_Mooney Dec 30, 2019 @ 7:39am 
What Xenophobe said..
Another thing that could be a factor is that I've found poor streaming performance after a recent round of Windows 10 updates. It was bad enough that I've moved over to running Steam on Linux. YMMV but, be interesting to see if others are reporting the same.
lowercase dots Dec 31, 2019 @ 9:01am 
Well, changing all the settings to manual doesn't seem to make much of a difference, although when I cancel the remote play and the Pi goes back to the steam link connection screen, I believe I am seeing some errors during the brief second or so that shows the command prompt. The prompt/log doesn't stay on screen long enough for me to read what it says beyond "invald" something-or-other.

I think next time I have time to troubleshoot, I'll try using ssh to run steamlink from the command prompt itself and see if that gives any errors which I can work with.
lowercase dots Jan 1, 2020 @ 5:47pm 
I'm not using the experimental driver, and the overscan already was uncommented.

Here's the output from the terminal window, with the majority of the framelate/framereset errors removed. After frame 637 I stopped the remote play.

Unable to query physical screen size, defaulting to 100 dpi. To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters). INFO: Warning: Couldn't set IPV6_ADD_MEMBERSHIP on discovery network socket "No carrier" Steam Link UI desktop resolution 1920 x 1080 coordinate scale = 1.05 Added controller with mapping 050000005e040000fd02000003090000,Xbox One Wireless Controller,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4, libpng warning: iCCP: known incorrect sRGB profile libpng warning: iCCP: known incorrect sRGB profile INFO: Connected to Remote Client service with session 911947414781812584 libpng warning: iCCP: known incorrect sRGB profile libpng warning: iCCP: known incorrect sRGB profile INFO: Starting Streaming INFO: Received authorization proof request, responding with encrypted challenge INFO: Received start streaming response k_ERemoteDeviceStreamingInProgress INFO: Received start streaming response k_ERemoteDeviceStreamingSuccess INFO: Initializing player INFO: Refresh rate: 60.00 INFO: Effective rate: 59.75 INFO: Video size: 1920x1080, output size: 1920x1080, overlay size: 1280x256 INFO: Video rect: 1920x1080 at 0,0 INFO: Texture rect: 1920x1080 at 0,0 INFO: Hardware: ARMv7 Processor rev 4 (v7l) INFO: Initialized player INFO: Server available at address: 192.168.2.1:27031 INFO: Connecting to server at 192.168.2.1:27031 using direct UDP INFO: Session state Idle -> Connecting INFO: CStreamTransportClient stopping Remote Client service connection INFO: Session state Connecting -> Handshake INFO: Video size: 1920x1080, output size: 1920x1080, overlay size: 1280x256 INFO: Video rect: 1920x1080 at 0,0 INFO: Texture rect: 1920x1080 at 0,0 INFO: Session state Handshake -> Authenticating INFO: Got control packet k_EStreamControlServerHandshake INFO: Session state Authenticating -> Negotiating INFO: Got control packet k_EStreamControlAuthenticationResponse INFO: Got control packet k_EStreamControlNegotiationInit INFO: Session state Negotiating -> StreamStarting INFO: Got control packet k_EStreamControlNegotiationSetConfig INFO: Session state StreamStarting -> Streaming INFO: Got control packet k_EStreamControlSetQoS INFO: Got control packet k_EStreamControlSetTargetBitrate INFO: Starting audio stream: frequency=48000, channels=2 INFO: Opened audio device: format=2, channels=2, frequency=48000 INFO: Initialized audio decoder: codec=3, sample rate=48000, channels=2 INFO: Got control packet k_EStreamControlStartAudioData INFO: Got control packet k_EStreamControlSetSpectatorMode INFO: Got control packet k_EStreamControlSetCaptureSize INFO: Got control packet k_EStreamControlSetTitle INFO: Got control packet k_EStreamControlSetIcon INFO: Got control packet k_EStreamControlSetCursor INFO: Got control packet k_EStreamControlSetActivity INFO: Got control packet k_EStreamControlHideCursor INFO: Got control packet k_EStreamControlSetCursor INFO: Got control packet k_EStreamControlSetCursorImage INFO: Raspberry Pi hardware decoding INFO: Got control packet k_EStreamControlStartVideoData INFO: Got control packet k_EStreamControlVideoEncoderInfo INFO: Marking frame 0 complete with status k_EStreamFrameResultDroppedLate INFO: Marking frame 2 complete with status k_EStreamFrameResultDroppedLate INFO: Video size: 1920x1080, output size: 1920x1080, overlay size: 1280x256 INFO: Video rect: 1920x1080 at 0,0 INFO: Texture rect: 1920x1080 at 0,0 INFO: Sending HID device 045e/02fd/-1 Xbox One Wireless Controller at sdl://0 INFO: Video overflow (297.27ms queued), requesting keyframe synchronization INFO: Marking frame 95 complete with status k_EStreamFrameResultDroppedLate INFO: Marking frame 96 complete with status k_EStreamFrameResultDroppedLate [...] INFO: Marking frame 110 complete with status k_EStreamFrameResultDroppedLate INFO: Marking frame 114 complete with status k_EStreamFrameResultDroppedReset INFO: Marking frame 115 complete with status k_EStreamFrameResultDroppedReset INFO: Marking frame 112 complete with status k_EStreamFrameResultDroppedLate INFO: Marking frame 116 complete with status k_EStreamFrameResultDroppedReset INFO: Marking frame 117 complete with status k_EStreamFrameResultDroppedReset INFO: Video overflow (385.97ms queued), requesting keyframe synchronization [...] INFO: Marking frame 248 complete with status k_EStreamFrameResultDroppedLate [...] INFO: Marking frame 262 complete with status k_EStreamFrameResultDroppedReset INFO: Video overflow (533.08ms queued), requesting keyframe synchronization [...] INFO: Marking frame 387 complete with status k_EStreamFrameResultDroppedLate [...] INFO: Marking frame 412 complete with status k_EStreamFrameResultDroppedReset [...] INFO: Marking frame 500 complete with status k_EStreamFrameResultDroppedLate INFO: Video overflow (768.05ms queued), requesting keyframe synchronization [...] INFO: Marking frame 593 complete with status k_EStreamFrameResultDroppedLate [...] INFO: Marking frame 636 complete with status k_EStreamFrameResultDroppedReset INFO: Marking frame 595 complete with status k_EStreamFrameResultDroppedLate INFO: Marking frame 596 complete with status k_EStreamFrameResultDroppedLate INFO: Marking frame 637 complete with status k_EStreamFrameResultDroppedLate INFO: Session state Streaming -> StreamStopping INFO: Stopped audio decoder INFO: Streaming session complete, average network time: 1.61ms, stddev: 2.07ms, 0.00 percent frame loss, result: excellent INFO: Session state StreamStopping -> Idle ALSA lib pcm.c:8306:(snd_pcm_recover) underrun occurred Unable to query physical screen size, defaulting to 100 dpi. To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters). INFO: Warning: Couldn't set IPV6_ADD_MEMBERSHIP on discovery network socket "No carrier" Steam Link UI desktop resolution 1920 x 1080 coordinate scale = 1.05 Added controller with mapping 050000005e040000fd02000003090000,Xbox One Wireless Controller,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4, libpng warning: iCCP: known incorrect sRGB profile libpng warning: iCCP: known incorrect sRGB profile INFO: Connected to Remote Client service with session 810072817202744144 libpng warning: iCCP: known incorrect sRGB profile libpng warning: iCCP: known incorrect sRGB profile

I tried to run it a second time, for a bit longer, although it froze the Pi upon quitting, probably because I wasn't using the launcher and it wasn't exiting "cleanly". However - it left performance details up on screen while it was frozen, and I took a screenshot of that as well as it's quite rough looking:
https://imgur.com/a/PALPfT8
Last edited by lowercase dots; Jan 1, 2020 @ 5:48pm
lowercase dots Jan 2, 2020 @ 9:27pm 
EDID detection is not disabled, and the GPU is using 256mb, yes. The only other video related setting in the file is 'hdmi_ignore_cec_init=1' which doesn't apply here.

tvservice -s gives the following (both while running normally and while steamlink displays the black screen):

state 0x12000a [HDMI CEA (16) RGB lim 16:9], 1920x1080 @ 60.00Hz, progressive

The drivers are Version 441.66, released December 10th (but this issue has been happening long before then). Geforce Streaming was installed recently, but is currently disabled. (I had it enabled not long ago to see if Luna/moonlight-embedded was a better solution than Steam Link. After seeing Luna hadn't been updated in 4 years or so, I opted to disable Gamestream and to fix this link/video problem instead.) Regardless, I checked now, and both the Nvidia Steaming Service process and service are disabled while I'm attempting to use steamlink.
Last edited by lowercase dots; Jan 2, 2020 @ 9:30pm
lowercase dots Jan 3, 2020 @ 10:13pm 
...Wow, adding those settings to /boot/config.txt actually seems to have solved it.
I'm rather confused, as using tvservice -s still indicates that the tv is inactive, but.. it just loaded up fine and I was able to steam a game, and everything worked fine (aside from that unrelated issue of a Wireless xbox controller also controlling the host computer's mouse, and that may not even be a bug specific to RPi).

I'm going to keep an eye on it and hope that it wasn't just one of those one-off times where it seems to randomly work for a day, but for the time being it seems like you may have just solved it. My only guess is that somewhere OSMC has separate settings for HDMI/tv detection, and it wasn't passing that information in a way steamlink could detect, because I can't think of any reason for Kodi and all of its addons to be working, except steamlink. I know the steamlink launcher addon kills Kodi to allocate more resources, and relaunches after quitting steamlink, so it could be related there somewhere.

Regardless, thank you. I doubt I would have ever thought to force those options on in config.txt.
lowercase dots Jan 12, 2020 @ 9:12pm 
Unfortunately, it looks like either the latest Steam Link or OSMC update has knocked this out again - I checked /boot/config.txt and the entries were still there - however, I did find something new and interesting.

I launched RetroPie and installed the experimental steamlink package through RetroPie-Setup, launched it, and it worked fine as kind. I went back to OSMC immediately afterward and used the osmc steamlink-launcher addon as usual: black screen as soon as it's connected.

As such, I'm going to say this isn't an issue with Steam Link, but an issue with OSMC (or possibly the steamlink-launcher addon). I may try troubleshooting this on their board - however at this point rather than having RetroPie and steamlink running on OSMC, I may just reformat and install Kodi and steamlink on RetroPie instead.
lowercase dots Jan 13, 2020 @ 12:39pm 
I was going to mention that in my previous post, the whole reason I don't do that is because I want an OS that can be fully operational with just a controller. (Unless it's troubleshooting or setting something up via ssh occasionally.) With the setup I'm aiming for, getting my mouse and plugging it in to swap between Kodi, RetroPie, and steamlink with the normal Raspbian desktop shell would be less than ideal.
< >
Showing 1-13 of 13 comments
Per page: 1530 50