# Stream & Video Availability per Platform Scan date: 2026-03-30 --- ## Summary | Platform | Live Streaming | Recordings (VOD) | Player | Streaming Infra | Direct Download | |----------|---------------|-------------------|--------|-----------------|-----------------| | **NotUBiz** | Yes (JWPlayer) | Yes (MP4) | JWPlayer | Wowza RTMP + VOD | Yes (API endpoint) | | **iBabs** | Varies per municipality | Yes | player.ibabs.eu / ConnectedViews / CompanyWebcast | Varies | Via player | | **GemeenteOplossingen** | Yes (LivePlayer) | Yes (ArchivePlayer) | VideoJS + FlowPlayer | Wowza HLS + token auth | Via Wowza HLS | | **ConnectedViews** | Yes (LiveMeetings) | Yes (VODMeetings) | Custom SitePlayer | VOS360 CDN + HLS | Yes (direct MP4) | | **YouTube** | Possible | Varies | YouTube native | Google CDN | Via yt-dlp | **No authentication or Cloudflare blocks encountered on any platform.** NotUBiz API is fully public. GemeenteOplossingen uses time-limited Wowza tokens for video streams. Everything else is publicly accessible. --- ## NotUBiz (317 municipalities) ### Architecture Angular SPA backed by `api.notubiz.nl` REST API. Video playback via embedded JWPlayer. Video files stored on Wowza streaming server, accessible as direct MP4 downloads. ### API Endpoints for Video | Endpoint | URL | Returns | |----------|-----|---------| | Events (with date filter) | `GET https://api.notubiz.nl/events?organisation_id={id}&date_from={}&date_to={}` | Events list | | Media for event | `GET https://api.notubiz.nl/media?event_id={id}` | Media files linked to event | | MP4 download | `GET https://api.notubiz.nl/media/download?folder={city}&file={filename}.mp4` | Direct MP4 file | | Subtitles | `GET https://api.notubiz.nl/media/subtitles?folder={city}&file={filename}.srt` | SRT subtitle file | | JWPlayer page | `GET https://{slug}.raadsinformatie.nl/jwplayer?source=` | JWPlayer embed with HLS source | ### Video Availability per Municipality | Municipality | Org ID | Events Tested | With Video | Coverage | Subtitles | |-------------|--------|---------------|------------|----------|-----------| | **Amsterdam** | 281 | 50 | 48 | **96%** | SRT available | | **Haarlem** | 544 | 20 | 12 | **60%** | Likely | | **Alkmaar** | 987 | 20 | 10 | **50%** | Likely | | **Eindhoven** | 686 | 20 | 1 | **5%** | Likely | | **Den Haag** | 318 | 20 | 0 | **0%** | N/A | ### Key Findings - The `live` boolean on events correlates strongly with media availability: events with `live=true` almost always have MP4 recordings - Amsterdam has the highest coverage (96%) - Den Haag has zero stored media despite having JWPlayer active, may host video externally - MP4 naming pattern: `DD.MM.YY City MeetingType.mp4` - Wowza server: `rtmp://wowza1.notubiz.nl/nbvod/_definst_` - **SRT subtitles are available** on some recordings, huge win for transcription validation ### Sample Video URL ``` https://api.notubiz.nl/media/download?folder=Amsterdam&file=15.01.25 Amsterdam RaadsCie WV.mp4 ``` --- ## iBabs (153 municipalities) ### Architecture Server-rendered ASP.NET MVC application. Video integration via `data-video-type` attributes on HTML div elements, with external player at `player.ibabs.eu`. ### Video Integration Types iBabs doesn't have one video system. Each municipality can use a different provider: | Video Type | Provider | How It Works | |-----------|----------|--------------| | `iBabsStream` | Native iBabs | Player at `https://player.ibabs.eu/{guid}` | | `ConnectedViews` | ConnectedViews | Cross-platform embed via video ID | | `CompanyWebcast` | CompanyWebcast | External webcast provider | | External | Municipality website | Links to external livestream page | ### Availability per Municipality | Municipality | Video Type | Details | |-------------|-----------|---------| | **Utrecht** | ConnectedViews | `data-video-type="ConnectedViews"`, video ID 110594 | | **Enschede** | iBabsStream | Native player, `fa-video` icons on 9 meetings, `player.ibabs.eu/{guid}` | | **Arnhem** | CompanyWebcast | External provider reference in meeting text | | **Zwolle** | External | References livestream on gemeente website | | **Rotterdam** | N/A | "Ongeldige site!", Rotterdam is on NotUBiz (org ID 726), not iBabs | ### Key Findings - Video data embedded in HTML: `data-video-type`, `data-video-id`, `data-video-url`, `data-video-base-url` on `
` elements - `player.ibabs.eu` is a SPA shell (472 bytes), loads video dynamically by GUID - Three different video providers across tested municipalities - No single extraction method will work for all iBabs municipalities - Enschede has the best video integration with availability icons on meeting lists --- ## GemeenteOplossingen (34 municipalities) ### Architecture Custom CMS with server-rendered pages. Video infrastructure uses its own Wowza streaming instance (separate from NotUBiz). Players: VideoJS + FlowPlayer. Has dedicated JavaScript modules: `StreamController.js`, `ArchivePlayer.js`, `LivePlayer.js`. ### Video Infrastructure **Best video integration of all platforms.** Built-in support for: - Live streaming with DVR capability - Archive playback of past meetings - Per-agenda-item video fragments (embed with start/end times) - HLS delivery with token authentication ### Availability per Municipality | Municipality | Video Indicators | MP4 Refs | m3u8 Refs | Live Support | |-------------|-----------------|----------|-----------|-------------| | **Groningen** | VideoJS, ArchivePlayer, LivePlayer | 12 | 4 | "Live uitzending" widget, 124 embed-fragment options | | **Goirle** | VideoJS, FlowPlayer, StreamController | 18 | 6 | Full live + archive, 24 Wowza token refs | | **Roosendaal** | VideoJS, StreamController, ArchivePlayer | Yes | Yes | "Komende uitzendingen" (upcoming broadcasts) widget | | **Dordrecht** | DNS error | N/A | N/A | `raadsinformatie.dordrecht.nl` does not resolve | | **Venlo** | DNS error | N/A | N/A | `raadsinformatie.venlo.nl` does not resolve | ### Video URL Pattern ``` https://{wowza-server}/vod/_definst_/{city}_1/{date}-{meetingname}_1.mp4/playlist.m3u8 ?wowzatokenendtime={timestamp} &wowzatokenhash={hash} &wowzaplaystart={ms} &wowzaplayduration={ms} ``` ### Key Findings - Wowza tokens are time-limited but publicly generated (no auth needed to get a token) - Fragment-level access: `wowzaplaystart` and `wowzaplayduration` allow extracting specific agenda item video - Live streams support DVR (rewind during live broadcast) - "Komende uitzendingen" widget shows scheduled upcoming broadcasts - 2 out of 5 tested municipalities had DNS issues, suggesting some may have migrated --- ## ConnectedViews (1 municipality: Utrecht) ### Architecture ASP.NET web application hosted on Azure. Dedicated video platform (not a council info system with video bolted on). Uses VOS360 as CDN/streaming provider. ### Endpoints | Endpoint | URL | Returns | |----------|-----|---------| | VOD Meetings | `/VODMeetings/` | 12 sessions found | | Live Meetings | `/LiveMeetings/` | 6 live references | | SitePlayer | Full video player | 196KB, 37 video refs, 156 player refs | | HLS stream | `arbor-west-01.vos360.video/live/raadszaal/index.m3u8` | Live HLS with time segments | ### Key Findings - Both live and VOD supported with the same player infrastructure - **Direct MP4 downloads available** (e.g., `raadszaal_2026-03-23T143101.mp4`) - HLS streams support time-based clip extraction (`start=` and `end=` parameters) - Subtitles available (`subtitles=1` parameter in m3u8 URL) - Integrated into iBabs (Utrecht) via `data-video-type="ConnectedViews"` - VOS360 CDN for streaming delivery ### Sample URLs ``` # Live HLS https://arbor-west-01.vos360.video/live/raadszaal/index.m3u8?subtitles=1 # VOD MP4 raadszaal_2026-03-23T143101.mp4 ``` --- ## YouTube (varies) ### Findings | Channel | Videos | Council Meetings | Live Streaming | |---------|--------|-----------------|----------------| | **@gemeenteranst1107** (Ranst, Belgium) | 13 | Yes: "Gemeenteraad 24/06/2024" etc. | Not active | | **@gemeentealmere** (Almere, NL) | 30 | No, promotional content only | Not active | ### Key Findings - YouTube is supplementary, not a primary council meeting platform - yt-dlp works for downloading recordings - Belgian municipalities use YouTube more than Dutch ones for council recordings - Most Dutch municipal YouTube channels are promotional, not for raadsvergaderingen --- ## Extraction Feasibility per Platform | Platform | Past Recordings | Live Capture | Difficulty | Auth Required | |----------|----------------|-------------|------------|---------------| | **NotUBiz** | Direct MP4 via API | JWPlayer HLS when live | **Easy** | No | | **GemeenteOplossingen** | Wowza HLS with tokens | Wowza HLS live | **Medium** (token generation) | Token (public) | | **ConnectedViews** | Direct MP4 download | VOS360 HLS | **Easy** | No | | **iBabs (iBabsStream)** | Via player.ibabs.eu | Via player.ibabs.eu | **Medium** (GUID extraction) | No | | **iBabs (ConnectedViews)** | Via ConnectedViews | Via ConnectedViews | **Easy** (video ID in HTML) | No | | **iBabs (CompanyWebcast)** | Unknown | Unknown | **Hard** (external provider) | Unknown | | **YouTube** | yt-dlp | yt-dlp | **Easy** | No | ### Priority Order for Implementation 1. **NotUBiz** (317 municipalities, direct MP4 API, no auth) - biggest coverage, easiest extraction 2. **ConnectedViews** (1 municipality, direct MP4, no auth) - trivial but small coverage 3. **GemeenteOplossingen** (34 municipalities, Wowza HLS, public tokens) - good coverage, needs token handling 4. **iBabs native** (subset of 153, player.ibabs.eu) - needs GUID extraction from HTML 5. **YouTube** (supplementary) - already works via yt-dlp 6. **iBabs CompanyWebcast** (subset of 153) - least understood, external provider