Skip to content

Licensing

Flex Video uses a license system to enable advanced codecs and increase stream limits.

License Tiers

Feature Free Licensed
H.264 encoding Yes Yes
H.265/HEVC encoding No Yes
AV1 encoding No Yes
Concurrent streams 1 Per license
Screenshots Yes Yes
Announcements Yes Yes

Checking License Status

Web Interface

License status is displayed in Settings > License.

REST API

curl http://localhost:3539/flex/licensed

Response:

{
  "licensed": true,
  "serial_number": "FLX-2026-ABC123",
  "expiration_date": "2027-12-31T23:59:59Z",
  "max_video_streams": 4,
  "codecs": {
    "h264": true,
    "h265": true,
    "av1": true
  }
}

Activating a License

Web Interface

  1. Go to Settings > License
  2. Click Upload License
  3. Paste your license key
  4. Click Activate

REST API

curl -X POST http://localhost:3539/flex/license \
  -H "Content-Type: text/plain" \
  -d 'eyJ2ZXJzaW9uIjoxLCJwYXlsb2FkIjoiNUtkM1...'

License File

Place the license file in the license volume:

# Copy license to container volume
docker cp license.key flex-manager:/licensing/license.key

Or mount a host directory:

volumes:
  - /path/to/license:/licensing

License Format

Licenses are Base64-encoded JSON containing:

  • Payload (encrypted entitlements)
  • Digital signature (ECDSA)
  • Version identifier

License Security

License keys are cryptographically signed. Tampering invalidates the license.

License Validation

On startup, Flex Video validates:

  1. Signature - Verifies authenticity
  2. Expiration - Checks if license is current
  3. Entitlements - Loads codec and stream limits

Validation occurs:

  • At service startup
  • When uploading a new license
  • When starting a pipeline (codec check)

Codec Enforcement

When a license is missing or expired:

  • H.264: Always available
  • H.265/AV1: Returns HTTP 402 (Payment Required)
{
  "message": "H.265 codec requires a valid license",
  "code": "LICENSE_ERROR"
}

Stream Limits

When max_video_streams is exceeded:

{
  "message": "License limit exceeded: 4 streams maximum",
  "code": "LICENSE_LIMIT_EXCEEDED"
}

Only playing pipelines count toward the limit.

Removing a License

Web Interface

  1. Go to Settings > License
  2. Click Remove License

REST API

curl -X DELETE http://localhost:3539/flex/license

License Persistence

Licenses are stored in the license_data Docker volume. To preserve licenses across reinstalls:

# Backup
docker run --rm -v flex_license_data:/data -v $(pwd):/backup alpine tar czf /backup/license-backup.tar.gz /data

# Restore
docker run --rm -v flex_license_data:/data -v $(pwd):/backup alpine tar xzf /backup/license-backup.tar.gz -C /

Obtaining a License

Contact Blackwire for licensing:

Provide:

  • Intended use case
  • Number of concurrent streams needed
  • Required codecs

Troubleshooting

License Not Recognized

  1. Verify the license key is complete (no truncation)
  2. Check for copy/paste errors (extra whitespace)
  3. Ensure license hasn't expired

Codec Still Unavailable

  1. Restart the flex-manager service after license upload
  2. Verify license includes the codec entitlement
  3. Check license expiration date

License Disappeared After Restart

Ensure the license volume is persistent:

volumes:
  license_data:

Not:

volumes:
  - /tmp/license:/licensing  # Temporary!