secubox-openwrt/luci-app-media-flow
CyberMind-FR e67df835e2 fix: remove UCI dependencies from menu definitions
Removes mandatory UCI config dependencies from dashboard modules to allow
LuCI menus to display even when backend services are not installed.

This fixes 'Permission denied' errors when accessing dashboards for services
that haven't been installed yet (crowdsec, netdata, netifyd, etc.).

Changes:
- Remove uci dependency: crowdsec-dashboard, netdata-dashboard
- Remove uci dependency: netifyd-dashboard, wireguard-dashboard
- Remove uci dependency: client-guardian, media-flow
- Remove uci dependency: network-modes, traffic-shaper

Dashboards will now gracefully handle missing backend services and can
guide users to install required packages.

Related: SecuBox menu organization (v0.1.2-alpha)
2025-12-25 16:23:30 +01:00
..
htdocs/luci-static/resources fix: resolve validation issues across all modules 2025-12-25 09:01:06 +01:00
root fix: remove UCI dependencies from menu definitions 2025-12-25 16:23:30 +01:00
Makefile feat: implement Media Flow streaming detection and monitoring module 2025-12-24 10:20:28 +01:00
README.md feat: implement Media Flow streaming detection and monitoring module 2025-12-24 10:20:28 +01:00

LuCI Media Flow - Streaming Detection & Monitoring

Real-time detection and monitoring of streaming services with quality estimation and configurable alerts.

Features

Streaming Service Detection

Automatically detects and monitors:

Video Streaming:

  • Netflix, YouTube, Disney+, Prime Video, Twitch
  • HBO, Hulu, Vimeo

Audio Streaming:

  • Spotify, Apple Music, Deezer
  • SoundCloud, Tidal, Pandora

Video Conferencing:

  • Zoom, Microsoft Teams, Google Meet
  • Discord, Skype, WebEx

Quality Estimation

Estimates streaming quality based on bandwidth consumption:

  • SD (Standard Definition): < 1 Mbps
  • HD (High Definition): 1-3 Mbps
  • FHD (Full HD 1080p): 3-8 Mbps
  • 4K (Ultra HD): > 8 Mbps

Real-time Monitoring

  • Active streams dashboard with live updates
  • Bandwidth consumption per stream
  • Client IP tracking
  • Service categorization (video/audio/visio)

Historical Data

  • Session history with timestamps
  • Usage statistics per service
  • Usage statistics per client
  • Configurable retention period

Alerts

Configure alerts based on:

  • Service-specific usage thresholds
  • Daily/weekly limits
  • Automatic actions (notify, limit, block)

Dependencies

  • netifyd: Deep Packet Inspection engine for application detection
  • luci-app-netifyd-dashboard: Netifyd integration for OpenWrt
  • jq: JSON processing (for historical data)

Installation

opkg update
opkg install luci-app-media-flow
/etc/init.d/rpcd restart
/etc/init.d/uhttpd restart

Configuration

UCI Configuration

File: /etc/config/media_flow

config global 'global'
    option enabled '1'
    option history_retention '7'    # Days to keep history
    option refresh_interval '5'     # Seconds between updates

config alert 'netflix_limit'
    option service 'Netflix'
    option threshold_hours '4'      # Hours per day
    option action 'notify'          # notify|limit|block
    option enabled '1'

Adding Alerts

Via LuCI:

  1. Navigate to Monitoring → Media Flow → Alerts
  2. Click "Add"
  3. Configure service name, threshold, and action
  4. Save & Apply

Via CLI:

uci set media_flow.youtube_alert=alert
uci set media_flow.youtube_alert.service='YouTube'
uci set media_flow.youtube_alert.threshold_hours='3'
uci set media_flow.youtube_alert.action='notify'
uci set media_flow.youtube_alert.enabled='1'
uci commit media_flow

ubus API

Methods

# Get module status
ubus call luci.media-flow status

# Get active streaming sessions
ubus call luci.media-flow get_active_streams

# Get historical data (last 24 hours)
ubus call luci.media-flow get_stream_history '{"hours": 24}'

# Get statistics by service
ubus call luci.media-flow get_stats_by_service

# Get statistics by client
ubus call luci.media-flow get_stats_by_client

# Get details for specific service
ubus call luci.media-flow get_service_details '{"service": "Netflix"}'

# Set alert
ubus call luci.media-flow set_alert '{"service": "Netflix", "threshold_hours": 4, "action": "notify"}'

# List configured alerts
ubus call luci.media-flow list_alerts

Data Storage

History File

  • Location: /tmp/media-flow-history.json
  • Format: JSON array of session entries
  • Retention: Last 1000 entries
  • Rotates automatically

Statistics Cache

  • Location: /tmp/media-flow-stats/
  • Aggregated statistics per service/client
  • Updates every refresh interval

How It Works

  1. Detection: Integrates with netifyd DPI engine to detect application protocols
  2. Classification: Matches detected applications against streaming service patterns
  3. Quality Estimation: Analyzes bandwidth consumption to estimate stream quality
  4. Recording: Saves session data to history for analysis
  5. Alerting: Monitors usage against configured thresholds

Dashboard Views

Main Dashboard

  • Current streaming status
  • Active streams with quality indicators
  • Top services by usage
  • Auto-refresh every 5 seconds

Services View

  • Detailed statistics per service
  • Total sessions, duration, bandwidth
  • Service details modal

Clients View

  • Usage statistics per client IP
  • Top service per client
  • Total consumption

History View

  • Chronological session list
  • Filter by time period
  • Quality and duration indicators

Alerts View

  • Configure service-based alerts
  • Set thresholds and actions
  • Enable/disable alerts

Troubleshooting

No streams detected

  1. Check netifyd is running:

    /etc/init.d/netifyd status
    
  2. Verify netifyd configuration:

    uci show netifyd
    
  3. Check netifyd flows:

    ubus call luci.netifyd-dashboard get_flows
    

Quality estimation inaccurate

Quality estimation is based on instantaneous bandwidth and may not reflect actual stream quality. Factors:

  • Adaptive bitrate streaming
  • Network congestion
  • Multiple concurrent streams

History not saving

  1. Check permissions:

    ls -la /tmp/media-flow-history.json
    
  2. Check jq availability:

    which jq
    opkg install jq
    

Performance

  • CPU Usage: Minimal (parsing only, netifyd does DPI)
  • Memory: ~2-5 MB for history storage
  • Disk: None (tmpfs)
  • Network: No additional overhead

Privacy

  • All data stored locally on device
  • No external telemetry or reporting
  • History can be disabled or purged anytime

License

Apache-2.0

Author

CyberMind.fr