# 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