Video players completely broken

No matter what world im in, no matter what i use (youtube url or youtube search) since this new update, as a quest 2 player, nothing will load, please help, it wasnt like this before the update!

Hi, I have a deep understanding of the underlying issues so I can provide input. I’m not going to file any bug reports about this against VRChat (there’s already too many), because there’s generally nothing that can be done at the moment.

TL;DR: YouTube made changes and it’s likely going to be more challenging than usual for the community to continue supporting YouTube playback in VRChat now or in the future (plausibly without significant re-engineering efforts in the VRChat client), while VRChat compatible legacy playback formats are becoming gradually unavailable from YouTube.


Video players in Unity/VRChat are generally working, but your issue is with YouTube (and yt-dlp) and not with VRChat. It’s not just you, it affects all yt-dlp users in general, mpv video player software, anything that hooks into yt-dlp for remote video playback (including VRChat).

When you input a URL into a video player, VRChat calls a customized %LocalAppdata%Low\VRChat\VRChat\Tools\yt-dlp.exe (a VRChat modified yt-dlp 2026.07.04) to download and stream the video for you. The requirements for successful playback are:

  1. The URL is online/available to access for download.
  2. yt-dlp supports the service (e.g. YouTube) or it’s a generic URL.
  3. It’s one of the common formats with audio+video in the same stream for VRChat video players to support it. (Individual audio only/video only formats are not supported in VRChat generally.)

Behind the scenes it looks similar to this picture:

yt-dlp fetches the YouTube web page, lists available video/audio formats from the android_vr extractor, and then VRChat picks the only compatible format 18 (360p video with low quality audio) for playback.

See the last part from the screenshot where I attempt to redownload the same video? It says ERROR: unable to download video data: HTTP Error 403: Forbidden. That’s an intermittent error from YouTube, specific to the android_vr extractor. In VRChat, you would see this as a generic video error or ā€œFailed to load videoā€ message on video players. The upstream issue is linked below.

The solution from the upstream yt-dlp project to download YouTube videos has been to remove android_vr from the default list of clients, and use the new visionos extractor client in yt-dlp nightly. The issue is visionos does not have any compatible legacy formats (audio+video in the same format) for VRChat. This leaves VRChat with no remaining compatible extractors for YouTube playback for the foreseeable future.


This started in July 2026 with YouTube killing off the web_safari client, which formerly provided 1080p videos without login and PO tokens for YouTube playback in VRChat. You may not have noticed it being gone, because android_vr was available as a fallback for 360p video playback in VRChat.


There’s a long list of issues previously worked around with YouTube playback in yt-dlp and VRChat. I’ve tried to keep most of the current and previous issues documented in the comments on VRChat Feedback:

The problem now becomes that VRChat cannot generally ā€œjust update yt-dlpā€ to make playback work again with YouTube URLs when a new stable release of yt-dlp becomes available.

In the future, for YouTube playback to become available with the current methods, this is going to require SABR support in yt-dlp (unavailable/unimplemented in general, experimental in a separate branch) in addition to support in VRChat video players to play separate audio & video streams (merging video formats).

Okay, looks like the upstream yt-dlp project is going to use the web_embedded client as a fallback for the legacy format 18, which is compatible with VRChat.

I’m now waiting for a new stable yt-dlp release, before I submit a new feature request to VRChat Feedback to update yt-dlp so you can enjoy 360p YouTube videos for a little while longer (maybe).

I have to emphasize and echo bashonly from the yt-dlp project that these legacy formats ā€œwere always expected to be sunset eventuallyā€.

How long would that take?

It’s anyone’s best guess when yt-dlp releases a new stable version. It could be days or weeks.

After that, it’s been historically around 1-14 days for VRChat to update after making a feature request to update.

The android extractor will also be usable in VRChat for YouTube for format 18 only, but it’s not default in the current yt-dlp 2026.07.04 and also not in the list of default clients in yt-dlp nightly. This would require VRChat to make changes to include it for fallback in their fork of yt-dlp, if web_embedded will break.

yt-dlp released 2026.08.19, so I’ve made the feature request to update yt-dlp in VRChat which will fix this YouTube playback issue in VRChat.

We’ve been having this issue with our Karaoke events.

There is an issue right now where any video that is geoblocked in ANY country is blocked from EVERY country in vrchat MOST of the time. There’s nothing we can do to fix it as normal users. :frowning:

Try it and you should see the difference:

Blocked in Russia: https://www.youtube.com/watch?v=LN4ftqNtd1I (Shouldnt work)
Blocked Nowhere: https://youtu.be/_L61loT_snA (Should work)

This behavior is not specific to VRChat, and the statement is inaccurate.

Your test URL, https://www.youtube.com/watch?v=LN4ftqNtd1I, is whitelisted only in the following regions: CA, CU, IR, KP, SY, US. Blocked elsewhere. You will get an error message in both the browser and yt-dlp outside of these regions regardless of the yt-dlp youtube player extractor, based on your network’s determined geolocation.

PS C:\Users\linda.LINDALAP\AppData\Local\Temp\yt-dlp_upstream_2026.08.19> .\yt-dlp.exe -F https://www.youtube.com/watch?v=LN4ftqNtd1I
[youtube] Extracting URL: https://www.youtube.com/watch?v=LN4ftqNtd1I
[youtube] LN4ftqNtd1I: Downloading webpage
[youtube] LN4ftqNtd1I: Downloading visionos player API JSON
ERROR: [youtube] LN4ftqNtd1I: Video unavailable. It was blocked due to the claimed content by WMG.

The second test URL you’ve given is not region blocked anywhere, that is true.


You can play a test URL such as https://www.youtube.com/watch?v=wAsBta25OGQ, which is only blacklisted in the following regions: FM, KR. Outside of those two regions (Federated States of Micronesia, South Korea), you can play the video with upstream yt-dlp (and in VRChat once the implementation in VRChat doesn’t rely on a broken android_vr extractor).

We’ve chatted with karaoke in sync owner about this issue.

I feel like that is too much of a technical breakdown to be helpful for the average user. The practical result for the video players players, such as, during karaoke, is still that these videos are failing to load when the video is blocked in 1 or more countries.

I feel knowing what types of links arnt working will help the average user understand that it’s not just ā€œYoutube is brokenā€ or ā€œVideo players are brokenā€ but ā€œVideos that are Geoblocked in 1+ countries are brokenā€

Hopefully, that broken extractor you mentioned gets patched soon so things go back to normal, but in the meantime, loading videos with no geoblocking the closest workaround for the average user.

I have an issue with this statement, or I disagree with it.

As long as the video player owner can load the video, it will sync - even the https://www.youtube.com/watch?v=wAsBta25OGQ test URL above, which is geoblocked in two countries. I tested this with both direct YouTube URLs and the Karaoke in Sync URL redirector.

Logs
2026.08.23 22:13:36 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: RPC_InvokeUserPlay received by Player [playerId: 1, displayName: WubTheCaptain]: https://www.youtube.com/watch?v=wAsBta25OGQ
2026.08.23 22:13:36 Debug      -  [<color=#9C6994>USharpVideo</color>] Started video load for URL: https://www.youtube.com/watch?v=wAsBta25OGQ, requested by WubTheCaptain
2026.08.23 22:13:36 Debug      -  [Video Playback] Attempting to resolve URL 'https://www.youtube.com/watch?v=wAsBta25OGQ'
2026.08.23 22:13:36 Debug      -  NativeProcess.Start: started process id [18036]: C:/Users/linda.LINDALAP/AppData/LocalLow/VRChat/VRChat\Tools/yt-dlp.exe (...)
2026.08.23 22:13:36 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: Received USharpVideoLoadStart! Is player Video Player owner? True
2026.08.23 22:13:36 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: 'RPC_OnVideoOwnerVideoLoadStart'-Request received from Player [playerId: 1, displayName: WubTheCaptain]
2026.08.23 22:13:36 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: Sending Serialized Data!
2026.08.23 22:13:39 Debug      -  NativeProcess.HasExited: process exited with code 0, took 3041 ms. Command line: C:/Users/linda.LINDALAP/AppData/LocalLow/VRChat/VRChat\Tools/yt-dlp.exe (...)
2026.08.23 22:13:39 Debug      -  [Video Playback] URL 'https://www.youtube.com/watch?v=wAsBta25OGQ' resolved to 'https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1787544818/ei/knCLatf4HuSu0u8Pt8-sqQY/ip/84.250.12.104/id/c00b01b5adb93864/itag/95/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgoap/clen%3D3824466%3Bdur%3D236.263%3Bgir%3Dyes%3Bitag%3D140%3Blmt%3D1700930967271016/sgovp/clen%3D23786104%3Bdur%3D236.202%3Bgir%3Dyes%3Bitag%3D136%3Blmt%3D1700932058818468/rqh/1/hls_chunk_host/rr1---sn-uxap54poa5oq-ixal.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/cps/174/met/1787523218,/mh/IQ/mm/31,29/mn/sn-uxap54poa5oq-ixal,sn-ajixh5-55/ms/au,rdu/mv/m/mvi/1/pl/18/rms/au,au/gcr/fi/initcwndbps/2805000/bui/AR3QkAm3C0gR3j4QyUBD6stljo2A21bdrflMLX3khMMnxGfCZtux5QspHCZEw2Vguld96a8C9ZqOH93K/spc/KBGBcu7t2tkr2fLbHbPvQ2saQHHxJRvtT8TcFZAuD13v3d7L9MGboHsJMpMy3xboP3ilQ7kKAd4/vprv/1/ns/I3y7VLpbvEPLSRXoXdNIU1sX/playlist_type/CLEAN/dover/11/txp/4432434/mt/1787522685/fvip/4/keepalive/yes/fexp/51565115/n/gRS_l5iewNU5tQ/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgoap,sgovp,rqh,xpc,gcr,bui,spc,vprv,ns,playlist_type/sig/AE0s2JYwRAIgC70uHzVdr-JQBsqzloQICXCLL4s9aXYN7GgB1A4FVb4CIAkO1sncSWJt5syvmbSv5yVuQiRWlmCRJFGHUMjU2MDB/lsparams/hls_chunk_host,cps,met,mh,mm,mn,ms,mv,mvi,pl,rms,initcwndbps/lsig/APaTxxMwRQIgc1sMNXBsIZicOUSyXghHyUE-_TZkxrM-iZ7quFPHNg0CIQCveimYbyM2pImQnsPgMQ22WLbgfxsd4cVd5_hrhXyumw%3D%3D/playlist/index.m3u8'
2026.08.23 22:13:39 Debug      -  [AVProVideo] Opening https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1787544818/ei/knCLatf4HuSu0u8Pt8-sqQY/ip/84.250.12.104/id/c00b01b5adb93864/itag/95/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgoap/clen%3D3824466%3Bdur%3D236.263%3Bgir%3Dyes%3Bitag%3D140%3Blmt%3D1700930967271016/sgovp/clen%3D23786104%3Bdur%3D236.202%3Bgir%3Dyes%3Bitag%3D136%3Blmt%3D1700932058818468/rqh/1/hls_chunk_host/rr1---sn-uxap54poa5oq-ixal.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/cps/174/met/1787523218,/mh/IQ/mm/31,29/mn/sn-uxap54poa5oq-ixal,sn-ajixh5-55/ms/au,rdu/mv/m/mvi/1/pl/18/rms/au,au/gcr/fi/initcwndbps/2805000/bui/AR3QkAm3C0gR3j4QyUBD6stljo2A21bdrflMLX3khMMnxGfCZtux5QspHCZEw2Vguld96a8C9ZqOH93K/spc/KBGBcu7t2tkr2fLbHbPvQ2saQHHxJRvtT8TcFZAuD13v3d7L9MGboHsJMpMy3xboP3ilQ7kKAd4/vprv/1/ns/I3y7VLpbvEPLSRXoXdNIU1sX/playlist_type/CLEAN/dover/11/txp/4432434/mt/1787522685/fvip/4/keepalive/yes/fexp/51565115/n/gRS_l5iewNU5tQ/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgoap,sgovp,rqh,xpc,gcr,bui,spc,vprv,ns,playlist_type/sig/AE0s2JYwRAIgC70uHzVdr-JQBsqzloQICXCLL4s9aXYN7GgB1A4FVb4CIAkO1sncSWJt5syvmbSv5yVuQiRWlmCRJFGHUMjU2MDB/lsparams/hls_chunk_host,cps,met,mh,mm,mn,ms,mv,mvi,pl,rms,initcwndbps/lsig/APaTxxMwRQIgc1sMNXBsIZicOUSyXghHyUE-_TZkxrM-iZ7quFPHNg0CIQCveimYbyM2pImQnsPgMQ22WLbgfxsd4cVd5_hrhXyumw%3D%3D/playlist/index.m3u8 (offset 0) with API MediaFoundation
2026.08.23 22:13:40 Debug      -  [AVProVideo] Using playback path: MF-MediaEngine-Hardware (1280x720@0.00)
2026.08.23 22:13:40 Debug      -  [<color=#9C6994>USharpVideo</color>] Started video: https://www.youtube.com/watch?v=wAsBta25OGQ
2026.08.23 22:27:51 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: RPC_InvokeUserPlay received by Player [playerId: 1, displayName: WubTheCaptain]: https://ksync.arcanescripts.com/custom/redir-url?videoUrl=%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Paste%20the%20YouTube%20Link%20after%20the%20colon:https://www.youtube.com/watch?v=wAsBta25OGQ
2026.08.23 22:27:51 Debug      -  [<color=#9C6994>USharpVideo</color>] Started video load for URL: https://ksync.arcanescripts.com/custom/redir-url?videoUrl=%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Paste%20the%20YouTube%20Link%20after%20the%20colon:https://www.youtube.com/watch?v=wAsBta25OGQ, requested by WubTheCaptain
2026.08.23 22:27:51 Debug      -  [Video Playback] Attempting to resolve URL 'https://ksync.arcanescripts.com/custom/redir-url?videoUrl=%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Paste%20the%20YouTube%20Link%20after%20the%20colon:https://www.youtube.com/watch?v=wAsBta25OGQ'
2026.08.23 22:27:51 Debug      -  NativeProcess.Start: started process id [31608]: C:/Users/linda.LINDALAP/AppData/LocalLow/VRChat/VRChat\Tools/yt-dlp.exe (...)
2026.08.23 22:27:51 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: Received USharpVideoLoadStart! Is player Video Player owner? True
2026.08.23 22:27:51 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: 'RPC_OnVideoOwnerVideoLoadStart'-Request received from Player [playerId: 1, displayName: WubTheCaptain]
2026.08.23 22:27:51 Debug      -  [<color=#00A8FF>USharpVideoQueue</color>] Debug: Sending Serialized Data!
2026.08.23 22:27:54 Debug      -  [Video Playback] URL 'https://ksync.arcanescripts.com/custom/redir-url?videoUrl=%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Paste%20the%20YouTube%20Link%20after%20the%20colon:https://www.youtube.com/watch?v=wAsBta25OGQ' resolved to 'https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1787545673/ei/6XOLauzdFLuF0u8P4pPPuQY/ip/84.250.12.104/id/c00b01b5adb93864/itag/95/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgoap/clen%3D3824466%3Bdur%3D236.263%3Bgir%3Dyes%3Bitag%3D140%3Blmt%3D1700930967271016/sgovp/clen%3D23786104%3Bdur%3D236.202%3Bgir%3Dyes%3Bitag%3D136%3Blmt%3D1700932058818468/rqh/1/hls_chunk_host/rr1---sn-uxap54poa5oq-ixal.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/cps/212/met/1787524073,/mh/IQ/mm/31,29/mn/sn-uxap54poa5oq-ixal,sn-ixh7rn76/ms/au,rdu/mv/m/mvi/1/pl/18/rms/au,au/gcr/fi/initcwndbps/2640000/bui/AR3QkAlqjkETcxN9hrvDrYdxEBO2Yz0xg_nQ9n7XmgDNy6sHdAxIfnmCdRVMmCfNFUYX-Xp8QUWBJp7_/spc/KBGBcmfAl8KEytlF0CJH6uEB4_ZT2BCh4WVmBXIpBRUU3-pX18nIA1L0H1WJVQflsEViL7V79IE/vprv/1/ns/N0f6d6lX6SRPKXv9NlMOXBYX/playlist_type/CLEAN/dover/11/txp/4432434/mt/1787523671/fvip/1/keepalive/yes/fexp/51565116/n/P-eqV7xztTm3zg/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgoap,sgovp,rqh,xpc,gcr,bui,spc,vprv,ns,playlist_type/sig/AE0s2JYwRQIhAJKZpKgikvUU8SKqUdKNGk5I_8WeuxRCAA_imgykY-AZAiAwyx3DpQBfmd_aCCIApbJujzN_7FKW6FbhMShwTWQ7Uw%3D%3D/lsparams/hls_chunk_host,cps,met,mh,mm,mn,ms,mv,mvi,pl,rms,initcwndbps/lsig/APaTxxMwRAIgC17yL3xzBmtW6wuZDr5u1UkucTx2eYYYtiGc5YvyF_MCIA05Ic-AoBj9DuLK8iywHuQB-0kZ3ytDi03YF181O4Wr/playlist/index.m3u8'
2026.08.23 22:27:54 Debug      -  [AVProVideo] Opening https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1787545673/ei/6XOLauzdFLuF0u8P4pPPuQY/ip/84.250.12.104/id/c00b01b5adb93864/itag/95/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgoap/clen%3D3824466%3Bdur%3D236.263%3Bgir%3Dyes%3Bitag%3D140%3Blmt%3D1700930967271016/sgovp/clen%3D23786104%3Bdur%3D236.202%3Bgir%3Dyes%3Bitag%3D136%3Blmt%3D1700932058818468/rqh/1/hls_chunk_host/rr1---sn-uxap54poa5oq-ixal.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/cps/212/met/1787524073,/mh/IQ/mm/31,29/mn/sn-uxap54poa5oq-ixal,sn-ixh7rn76/ms/au,rdu/mv/m/mvi/1/pl/18/rms/au,au/gcr/fi/initcwndbps/2640000/bui/AR3QkAlqjkETcxN9hrvDrYdxEBO2Yz0xg_nQ9n7XmgDNy6sHdAxIfnmCdRVMmCfNFUYX-Xp8QUWBJp7_/spc/KBGBcmfAl8KEytlF0CJH6uEB4_ZT2BCh4WVmBXIpBRUU3-pX18nIA1L0H1WJVQflsEViL7V79IE/vprv/1/ns/N0f6d6lX6SRPKXv9NlMOXBYX/playlist_type/CLEAN/dover/11/txp/4432434/mt/1787523671/fvip/1/keepalive/yes/fexp/51565116/n/P-eqV7xztTm3zg/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgoap,sgovp,rqh,xpc,gcr,bui,spc,vprv,ns,playlist_type/sig/AE0s2JYwRQIhAJKZpKgikvUU8SKqUdKNGk5I_8WeuxRCAA_imgykY-AZAiAwyx3DpQBfmd_aCCIApbJujzN_7FKW6FbhMShwTWQ7Uw%3D%3D/lsparams/hls_chunk_host,cps,met,mh,mm,mn,ms,mv,mvi,pl,rms,initcwndbps/lsig/APaTxxMwRAIgC17yL3xzBmtW6wuZDr5u1UkucTx2eYYYtiGc5YvyF_MCIA05Ic-AoBj9DuLK8iywHuQB-0kZ3ytDi03YF181O4Wr/playlist/index.m3u8 (offset 0) with API MediaFoundation
2026.08.23 22:27:55 Debug      -  [AVProVideo] Using playback path: MF-MediaEngine-Hardware (1920x1080@0.00)
2026.08.23 22:27:55 Debug      -  [<color=#9C6994>USharpVideo</color>] Started video: https://ksync.arcanescripts.com/custom/redir-url?videoUrl=%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Paste%20the%20YouTube%20Link%20after%20the%20colon:https://www.youtube.com/watch?v=wAsBta25OGQ

https://www.youtube.com/watch?v=LN4ftqNtd1I is not whitelisted in my country, so I can’t load it. I didn’t determine if someone from US would see it in this specific world while I was the video player owner, if the other person would not be hit by the HTTP 403 Forbidden error from android_vr.

Note the URL redirector from Karaoke in Sync (ksync.arcanescripts.com) is not needed. It’s unclear to me what purpose it serves for custom URLs, except for potential data mining with untrusted URLs enabled.

PS C:\Users\linda.LINDALAP> curl.exe -I "https://ksync.arcanescripts.com/custom/redir-url?videoUrl=%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Paste%20the%20YouTube%20Link%20after%20the%20colon:https://www.youtube.com/watch?v=wAsBta25OGQ"
HTTP/1.1 307 Temporary Redirect
Server: nginx/1.18.0 (Ubuntu)
Date: Sun, 23 Aug 2026 22:25:31 GMT
Content-Length: 0
Connection: keep-alive
location: https://www.youtube.com/watch?v=wAsBta25OGQ
X-Varnish: 84008 640362
Age: 339
Via: 1.1 varnish (Varnish/6.0)

An obligatory clarification: The users themselves must also be able to download the video directly.

The video player owner provides sync data where the video is playing on the timeline, as far as I understand it.

I’m seeing a different issue, that VRChat is using the following args to resolve the video url

--no-check-certificate --no-cache-dir --rm-cache-dir -f ā€œ(mp4/best)[height<=?1080][height>=?64][width>=?64]ā€ --get-url

The problem is that this often returns a vp9 url, and AVProVideo doesn’t seem to be able to play it. Simply upgrading to the latest yt-dlp won’t solve the problem. AVProVideo needs to filter out the vp9 links

Correct, those are the command line args used to launch yt-dlp in VRChat. The requested video resolution may differ.

If there are no fMP4 formats available from the extracted URL, the second preference ā€œbestā€ will be selected. This can return the best available format, including VP9 WEBM formats when available. (-f "(mp4/best)")

There’s nothing inherently wrong about the -f "(mp4/best)" command line option used by VRChat and it can be kept as is, especially for YouTube playback. I argue it’s more important to choose the right YouTube playback extractor for VRChat with yt-dlp options.

VRChat has support for pre-muxed formats with audio+video in the same container or m3u8 playlist URL, for both video and audio to play simultaneously. Anything else would require downloading both formats separately and merging the formats locally with ffmpeg before playback, which is not supported in VRChat at this time.

For clarity, pre-muxed formats for VRChat are unavailable from visionos in the default yt-dlp 2026.08.19 configuration (a mix of MP4 and VP9/webm with separate audio streams), but available from android and web_embedded extractors (1080p format 96 for live YouTube videos, 360p format 18 for non-live YouTube videos).

The --extractor-args youtube:player_client=android,web_embedded,-visionos from the feature request will avoid this issue, and should be required to be included in VRChat’s patch of yt-dlp 2026.08.19.


I discourage replacing yt-dlp manually yourself for anything but experimental testing, due to security changes available in VRChat’s fork of yt-dlp.

@CosKomh What video URL are you experiencing issues with returning VP9 formats? Can you provide an URL? Were you testing on yt-dlp 2026.07.04 or yt-dlp 2026.08.19? What extractor were you using? I’m unable to reproduce your issue with YouTube livestreams and non-live videos on yt-dlp 2026.08.19.

@WubTheCaptain I’m seeing the issue on both 07.04 and 08.19 with most songs in Udon Saber, one example being https://www.youtube.com/watch?v=VP9OH0O_V2Q
Didn’t try to add any extra arguments. Could be a regional thing if can’t repro

I can reproduce this.

https://www.youtube.com/watch?v=VP9OH0O_V2Q is not geoblocked in any country.

According to your screenshot, you’re downloading a YouTube Premium format 616 (indicated by /itag/616/) (mp4/m3u8/vp9) using an upstream yt-dlp 2026.08.19 executable with the default visionos extractor, which is a video only format - this is not supported in VRChat, at least if you want audio with it.

Both android and web_embedded would return a playable 360p format 18 for the video URL, which is supported in VRChat for audio & video.

After some experimentation, playback failures and retries with format 616, a VizVid video player in avtr․zip - Search & Hangout world using AVProVideo for playback in VRChat eventually retried playing format 399 (mp4, https) with an upstream yt-dlp 2026.08.19 executable using https://www.youtube.com/watch?v=VP9OH0O_V2Q as the URL.

Predictably there was no audio in VRChat, only 1080p video from format 399, using the visionos extractor.

yt-dlp returns the following warning for format 616 when downloaded from the command line, without FFmpeg installed on my system (this was deliberate):

WARNING: VP9OH0O_V2Q: Possible MPEG-TS in MP4 container or malformed AAC timestamps. Install ffmpeg to fix this automatically

This will result in a format 616 playback error in VRChat. This does not occur for format 399.


Either way I think the issue you’re describing with format 616 and visionos may be somewhat irrelevant at this time with the current VRChat limitations, because I assume most people would also want audio with their videos.

I advocate using android and web_embedded extractors in VRChat for now.

Please submit a bug report or a feature request if you feel strongly this should be changed or supported.

I was wondering what was going on for the past week with these video players. Thanks for the update! I was wondering how did you even figure this out?

I try to read all bug reports coming in to VRChat Feedback bug reports board. This was a community effort, with several people contributing information.

Anytime there’s a newly discovered report coming in to VRChat Feedback bug reports board about ā€œvideo playersā€, the first thing to usually do is to check the upstream yt-dlp issues for recently reported issues - typically issues about YouTube.

I first noticed the intermittent issue on August 14th or 15th by first hand in VRChat (an early A/B test by YouTube), but I didn’t care enough to investigate the cause because reloading/retrying the video was convenient enough as a workaround.

The first reproducible android_vr related bug report at VRChat Feedback bug reports board was probably the following topic on August 17th by OpportunityV2SM: https://feedback.vrchat.com/bug-reports/p/vid-player. (Note: Before August 18th, in-client bug report log files were readable by anyone at VRChat Feedback.) In the comments there, on August 17th I tested against the upstream yt-dlp 2026.07.04 executable, reproduced the issue, and I linked to a yt-dlp issue #17427 about android_vr related 403 Forbidden errors reported at the upstream yt-dlp project on August 14th.

On August 18th, @Fusl also provided a pointer to another android_vr yt-dlp issue #17456 (August 18th) in the comments of https://feedback.vrchat.com/bug-reports/p/video-bug. The issue’s root cause has been known well since.

The issue was then cross-checked from VRChat output logs, %LocalAppdata%Low\VRChat\VRChat\Tools\yt-dlp.exe --version and from yt-dlp’s documented default client configuration that the use of yt-dlp 2026.07.04’s default android_vr client was the issue in VRChat.

This topic on VRChat Ask was then asked at late August 18th, and I responded on August 19th above before the release of yt-dlp 2026.08.19 was made available.

VRChat has updated to yt-dlp 2026.08.14 tonight. This issue should be resolved now.

PS C:\Users\linda.LINDALAP\AppData\LocalLow\VRChat\VRChat\Tools> .\yt-dlp.exe --version
2026.08.19