When 59% of the videos on your map block embedding: show why, not a black error frame
Sort ahead with status.embeddable, then warn before the click with marker shape, thumbnail and a YouTube button
This is about deciding what to do with blocked videos when you embed YouTube on a map or list. By the end you'll know how to find out ahead of time whether a video can be embedded, and you'll have a screen layout that shows blocked videos instead of hiding them.
Click, black screen
I clicked a collected camera on the map and got a black screen: "Video unavailable. Playback on other websites has been disabled by the video owner." The uploader had turned off embedding on other sites.
I figured it'd be a few. I counted, and it was more than half.
Saitama, 2026-08-24
The map had 58 cameras. 24 played (41%) and 34 had embedding turned off (59%). Within 10 km of Omiya, only 9 of 21 played.
Of all channels, the uniform camera channels that filled in the Omiya area (埼玉県さいたま市○○区…ライブカメラ) had all turned it off. That's not a gap you can close by collecting harder. I haven't widened the sample yet to see whether the ratio is specific to this area and operator or true of Japanese live cameras in general.
One field decides it
Call videos.list with part=status and you get status.embeddable. If it's false, the iframe becomes an error screen. Save it at collect time and you don't need to ask the API every time someone clicks. We were already calling videos.list to check live status, so it cost nothing extra.
Three options
Embed everything, and half the clicks end on a black error screen. Drop them during collection, and the map goes empty, especially around Omiya. The one left is to show everything but mark the difference. That's what we picked.
Let people know before they click
The markers come first. A camera that plays is a filled circle. A blocked one is a hollow ring. You can tell them apart before clicking. The tooltip gets a YouTubeのみ (YouTube only) badge.
Clicking a blocked camera shows, instead of a player, that camera's thumbnail (img.youtube.com/vi/{id}/hqdefault.jpg) with a short note and a button to YouTube. That carries more information than a black error frame. The thumbnail alone tells you roughly what that intersection looks like.
After the change, what used to look like a broken map read as "this camera is one you watch on YouTube." Saying why beats hiding it. That's what we took away from this.
Still checking
I'm still checking whether using thumbnails of embed-blocked videos this way is fine under YouTube's terms. I also don't know whether status.embeddable can change mid-broadcast. If it can, the refresh interval needs to be short.
If you run a service that pulls in outside videos or data and you're figuring out how to handle what you can't show, feel free to ask negabaro.
How to handle embed-blocked videos
| Option | Result | Fits when |
|---|---|---|
| Embed anyway | Half the clicks hit a black error screen | Only a handful are blocked |
| Drop at collect time | The map empties (within 10 km of Omiya: 21 to 9) | Only playable videos matter to your service |
| Show, but mark the difference | Known before the click, location info stays | Maps or lists where where it is is the information |
The call that decides it
GET /youtube/v3/videos?part=snippet,liveStreamingDetails,status&id=v1,v2,...
# each item in the response
"status": { "embeddable": false, ... } # false means the iframe shows an error
Step-by-Step
Call videos.list with part=status and save status.embeddable at collect time
Split the markers: filled circle for playable, hollow ring for blocked
For blocked ones, show a thumbnail, a note and a YouTube button instead of a player
Check separately whether the thumbnail use is fine under the terms and whether embeddable can change