Steam Link

Steam Link

Input and audio but no video
Hello,

I've been trying to upgrade my original Steam Link hardware to the Steam Link app running on a RaspberryPi 5 with Bookworm.

The setup worked as expected, however when I attempt to stream my Desktop I get a black screen with an underscore on the top left of the screen. I can control the Steam app or game with my controller, but there's no video coming through.

I've attempted enabling/disabling HVEC, it made no difference.

After some online research I attempted to switch to X11 with raspi-config. Doing this made the stream appear, but the latency is far worse than both my original Steam Link and my iPhone.

Here's a bunch of info from my RPI5 as well:

cat /proc/device-tree/model Raspberry Pi 5 Model B Rev 1.0 cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 12 (bookworm)" NAME="Debian GNU/Linux" VERSION_ID="12" VERSION="12 (bookworm)" VERSION_CODENAME=bookworm ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" uname -r 6.12.34+rpt-rpi-2712 apt show steamlink Package: steamlink Version: 1.0.16 Priority: optional Section: games Maintainer: Valve Corporation <SteamLinkFeedback@valvesoftware.com> Installed-Size: 74.8 kB Depends: python-all (>= 2.6.6-3~) | python3, curl, gnupg, libc6 (>= 2.24), xz-utils Homepage: https://store.steampowered.com/steamlink/about Download-Size: 28.4 kB APT-Manual-Installed: yes APT-Sources: http://archive.raspberrypi.com/debian bookworm/main arm64 Packages Description: The Steam Link app brings desktop gaming to your Raspberry Pi. Just pair a controller to your device, connect to a computer running Steam on the same local network, and start playing your existing Steam games.

Is there anything that can be done? Everywhere online seems to say this should just work...

Here's a truncated log for the issue:

[2025-07-06 19:37:15][8183.781457] Streaming initialized and listening on port 27031 [2025-07-06 19:37:17][8185.261485] Streaming started to steamlink at 192.168.1.166:47076, audio channels = 2, MTU = 1468 [2025-07-06 19:37:17][8185.261543] Streaming quality: k_EStreamQualityBalanced [2025-07-06 19:37:17][8185.261585] Streaming bitrate: Automatic [2025-07-06 19:37:17][8185.261625] Device form factor: TV [2025-07-06 19:37:17][8185.261817] Maximum capture: 1920x1080 59.72 FPS [2025-07-06 19:37:17][8185.261858] Video Streaming: enabled [2025-07-06 19:37:17][8185.261895] Audio Streaming: enabled [2025-07-06 19:37:17][8185.261926] Input Streaming: enabled [2025-07-06 19:37:17][8185.262338] ===================================================================== [2025-07-06 19:37:17][8185.262376] Game: UNKNOWN (0) [2025-07-06 19:37:17][8185.262460] Setting target bitrate to 15000 Kbit/s, burst bitrate is 75000 Kbit/s [2025-07-06 19:37:17][8185.262907] Creating new audio encoder for codec 1 [2025-07-06 19:37:17][8185.262990] Encoder audio init succeeded, now have 1 encoder(s) [2025-07-06 19:37:17][8185.296949] Video capture state changed [2025-07-06 19:37:17][8185.297031] SynchronizeClientState(): setting capture size 1920x1080 [2025-07-06 19:37:17][8185.297150] SynchronizeClientState(): setting title to Robocop: Rogue City [2025-07-06 19:37:17][8185.297217] SynchronizeClientState(): setting icon 32x32 [2025-07-06 19:37:17][8185.297298] SynchronizeClientState(): setting cursor hidden [2025-07-06 19:37:17][8185.297338] SynchronizeClientState(): setting keymap [2025-07-06 19:37:17][8185.297409] SynchronizeClientState(): setting activity to k_EStreamActivityGame: RoboCop: Rogue City [2025-07-06 19:37:17][8185.302242] Recording system audio [2025-07-06 19:37:17][8185.306469] [System Windows] Recording on device: Speakers (Steam Streaming Speakers) [2025-07-06 19:37:17][8185.307353] Audio client mix format: [2025-07-06 19:37:17][8185.307413] format: 65534 [2025-07-06 19:37:17][8185.307447] channels: 2 [2025-07-06 19:37:17][8185.307478] samples/sec: 48000 [2025-07-06 19:37:17][8185.307524] bytes/sec: 384000 [2025-07-06 19:37:17][8185.307576] alignment: 8 [2025-07-06 19:37:17][8185.307617] bits/sample: 32 [2025-07-06 19:37:17][8185.307865] channel mask: 0x3 [2025-07-06 19:37:17][8185.307928] data format: {00000003-0000-0010-8000-00AA00389B71} [2025-07-06 19:37:17][8185.308247] Initializing audio with 2 channels and 48000 samples/sec [2025-07-06 19:37:17][8185.312066] CLIENT: Got control packet k_EStreamControlSetQoS [2025-07-06 19:37:17][8185.312144] CLIENT: Got control packet k_EStreamControlSetTargetBitrate [2025-07-06 19:37:17][8185.312185] CLIENT: Starting audio stream: frequency=48000, channels=2 [2025-07-06 19:37:17][8185.312224] CLIENT: Opened audio device: format=2, channels=2, frequency=48000 [2025-07-06 19:37:17][8185.312265] CLIENT: Initialized audio decoder: codec=1, sample rate=48000, channels=2 [2025-07-06 19:37:17][8185.312311] CLIENT: Got control packet k_EStreamControlStartAudioData [2025-07-06 19:37:17][8185.312355] CLIENT: Got control packet k_EStreamControlSetSpectatorMode [2025-07-06 19:37:17][8185.312394] CLIENT: Got control packet k_EStreamControlSetCaptureSize [2025-07-06 19:37:17][8185.312426] CLIENT: Got control packet k_EStreamControlSetTitle [2025-07-06 19:37:17][8185.312466] CLIENT: Got control packet k_EStreamControlSetIcon [2025-07-06 19:37:17][8185.312519] CLIENT: Got control packet k_EStreamControlHideCursor [2025-07-06 19:37:17][8185.312559] CLIENT: Got control packet k_EStreamControlSetKeymap [2025-07-06 19:37:17][8185.312601] CLIENT: Got control packet k_EStreamControlSetActivity [2025-07-06 19:37:17][8185.337702] Audio mix: start=8211568220, returned=0 [2025-07-06 19:37:17][8185.337791] Audio source [Speakers (Steam Streaming Speakers)]: init=0, adjustment=0, through=0, last_start=0, mixed=0, drop_before=0, drop_after=0 [2025-07-06 19:37:17][8185.370675] >>> Switching video stream from NONE to GameOverlay_MovieStream_1552 [2025-07-06 19:37:17][8185.370924] Changing adapter [old=0][new=48454] [2025-07-06 19:37:17][8185.371218] Building new pipeline [2025-07-06 19:37:17][8185.371415] Trying to create an encoder for streaming: [hardware_enabled=true][hardware_suppressed=false] [2025-07-06 19:37:17][8185.371475] Allowed Codecs: 5,4 [2025-07-06 19:37:17][8185.466879] CLIENT: Queued 126.958 ms, clearing audio stream [2025-07-06 19:37:17][8185.487085] CGameStreamVideoStageAMF: Using minimum number of reference frames: 1 [2025-07-06 19:37:17][8185.488888] Created encoder AMF for codec 5 [2025-07-06 19:37:17][8185.500971] Video Encoder Changed [2025-07-06 19:37:17][8185.504523] >>> Capture method set to Game D3D11 shared NV12 + AMF HEVC [2025-07-06 19:37:17][8185.507909] >>> Capture resolution set to 1920x1080 [2025-07-06 19:37:17][8185.507989] >>> Capture colorspace set to BT.601 limited range [2025-07-06 19:37:17][8185.508100] CGameStreamVideoStageAMF: Surface creation failed, result = 24 [2025-07-06 19:37:17][8185.512053] >>> Capture method set to Game polled D3D11 NV12 + AMF HEVC [2025-07-06 19:37:17][8185.567963] >>> Capture method set to Game D3D11 shared NV12 + AMF HEVC [2025-07-06 19:37:17][8185.599860] >>> Client video decoder set to Raspberry Pi hardware decoding on Wayland [2025-07-06 19:37:17][8185.599911] CLIENT: Raspberry Pi hardware decoding on Wayland [2025-07-06 19:37:17][8185.599942] CLIENT: Got control packet k_EStreamControlStartVideoData [2025-07-06 19:37:17][8185.599977] CLIENT: Got control packet k_EStreamControlVideoEncoderInfo [2025-07-06 19:37:17][8185.600011] CLIENT: Got control packet k_EStreamControlVideoEncoderInfo [2025-07-06 19:37:17][8185.600044] CLIENT: Marking frame 0 complete with status k_EStreamFrameResultDroppedReset [2025-07-06 19:37:17][8185.600077] CLIENT: Got control packet k_EStreamControlVideoEncoderInfo [2025-07-06 19:37:17][8185.600110] CLIENT: ffmpeg info: Hwaccel V4L2 HEVC stateless V4; devices: /dev/media2,/dev/video19; buffers: src DMABuf, dst DMABuf; swfmt=rpi4_8 [2025-07-06 19:37:17][8185.626786] Video Encoder Changed [2025-07-06 19:37:19][8187.587902] CLIENT: Texture rect: 1920x1080 at 0,0 [2025-07-06 19:37:19][8187.587958] CLIENT: Video rect: 3440x1440 at 0,0 [2025-07-06 19:37:19][8187.587990] CLIENT: Video size: 1920x1080, output size: 3440x1440, overlay size: 1280x256 [2025-07-06 19:37:19][8187.588024] CLIENT: Texture rect: 1920x1080 at 0,0 [2025-07-06 19:37:19][8187.588057] CLIENT: Video rect: 2560x1440 at 440,0 [2025-07-06 19:37:19][8187.588090] CLIENT: Texture rect: 1920x1080 at 0,0 [2025-07-06 19:37:19][8187.588123] CLIENT: Video rect: 2560x1440 at 440,0 [2025-07-06 19:37:48][8216.643803] Encoding complete [2025-07-06 19:37:48][8216.663828] Video capture state changed [2025-07-06 19:37:48][8216.698563] "SessionStats" { "GameNameID" "RoboCop: Rogue City" "appid" "1681430" "TimeSubmitted" "1751827068" "ResolutionX" "1920" "ResolutionY" "1080" "CaptureDescriptionID" "Game D3D11 shared NV12 + AMF HEVC" "DecoderDescriptionID" "Raspberry Pi hardware decoding on Wayland" "BandwidthLimit" "15000" "FramerateLimit" "60" "Transport" "1" "SlowGamePercent" "0" "SlowCapturePercent" "0" "SlowConvertPercent" "0" "SlowEncodePercent" "0" "SlowNetworkPercent" "0" "SlowDecodePercent" "0" "SlowDisplayPercent" "0" "AvgClientBitrate" "33.2597007751464844" "StdDevClientBitrate" "4.0018305778503418" "AvgServerBitrate" "15967.060546875" "StdDevServerBitrate" "0" "AvgLinkBandwidth" "100000.0078125" "AvgPingMS" "0.757032930850982666" "StdDevPingMS" "1.02507317066192627" "AvgCaptureMS" "1.60617244243621826" "StdDevCaptureMS" "0.363701611757278442" "AvgConvertMS" "0.0176785755902528763" "StdDevConvertMS" "0.420209407806396484" "AvgEncodeMS" "5.11998462677001953" "StdDevEncodeMS" "0.889268338680267334" "AvgNetworkMS" "-5.62758207321166992" "StdDevNetworkMS" "9.59961605072021484" "AvgDecodeMS" "2.99714565277099609" "StdDevDecodeMS" "1.03234970569610596" "AvgDisplayMS" "519458.15625" "StdDevDisplayMS" "1999637.625" "AvgFrameMS" "26.6374969482421875" "StdDevFrameMS" "11.0972404479980469" "AvgFPS" "60.4497032165527344" "StdDevFPS" "8.10336971282958984" "BigPicture" "1" "KeyboardMouseInput" "0" "SteamControllerInput" "0" "TouchControllerInput" "0" "GameControllerInput" "0" "XBox360ControllerInput" "0" "XBoxOneControllerInput" "0" "PS3ControllerInput" "0" "PS4ControllerInput" "0" "PS5ControllerInput" "0" "OtherControllerInput" "0" "WasSpectating" "0" "RemotePlayTogether" "0" } [2025-07-06 19:37:48][8216.702398] VirtualHere executing MANUAL HUB REMOVE, [2025-07-06 19:37:48][8216.766294] Restoring default audio device: 4 - PHL 346B1C (AMD High Definition Audio Device) [2025-07-06 19:38:52][8280.254060] Game Recording - game stopped [gameid=1681430] [2025-07-06 19:38:52][8280.254151] Removing process 1552 for gameID 1681430 [2025-07-06 19:38:52][8280.254211] Removing window 655770 for process 1552 and gameID 1681430 [2025-07-06 19:38:52][8280.254402] Removing process 8352 for gameID 1681430
< >
Showing 1-4 of 4 comments
Okay so after two days of troubleshooting and trying everything under the sun I have a solution.

It turns out that when running
sudo apt full-upgrade

Something gets updated that breaks the Steam Link video.

On a fresh raspian install I have about 180 deps to update so I’m probably not going to update each one by one to figure out the culprit, however if you simply do a fresh Raspian install and just install Steam Link your video should just work.
This happened to me too. Disappointing as I literally just bought a Raspberry Pi 500 to replace my dying Steam Link hardware. If I knew it would break so easily I might have bought something else (an android tv device or a handheld windows PC even). I'm getting by on moonlight but it doesn't have the virtualhere or xbox chatpad support (I could install the xone driver but then i'd have to also install a new driver for my other xbox 360 gamepad as the xone driver uninstalls raspberry pi's default support for that and it's all a lot of command line headache--hey gabe, if you're wondering why people aren't jumping ship to Linux, stuff like this is why).
Originally posted by Yistaan:
This happened to me too. Disappointing as I literally just bought a Raspberry Pi 500 to replace my dying Steam Link hardware. If I knew it would break so easily I might have bought something else (an android tv device or a handheld windows PC even). I'm getting by on moonlight but it doesn't have the virtualhere or xbox chatpad support (I could install the xone driver but then i'd have to also install a new driver for my other xbox 360 gamepad as the xone driver uninstalls raspberry pi's default support for that and it's all a lot of command line headache--hey gabe, if you're wondering why people aren't jumping ship to Linux, stuff like this is why).

Just literally don’t update, works perfectly 👍
Originally posted by cowpylon:
Originally posted by Yistaan:
This happened to me too. Disappointing as I literally just bought a Raspberry Pi 500 to replace my dying Steam Link hardware. If I knew it would break so easily I might have bought something else (an android tv device or a handheld windows PC even). I'm getting by on moonlight but it doesn't have the virtualhere or xbox chatpad support (I could install the xone driver but then i'd have to also install a new driver for my other xbox 360 gamepad as the xone driver uninstalls raspberry pi's default support for that and it's all a lot of command line headache--hey gabe, if you're wondering why people aren't jumping ship to Linux, stuff like this is why).

Just literally don’t update, works perfectly 👍
As of today this now has been fixed and pi steam link works properly again, seemingly another pi update fixed it
< >
Showing 1-4 of 4 comments
Per page: 1530 50