Live Streaming System for Industrial Android Tablet

Job ID: 39295095

Budget: $250 – $750 USD

Technical Brief: Server-Controlled Live Streaming System for Android Tablet (AHD Camera Input)

1. Overview

This document outlines the architecture and development requirements for implementing a server-initiated live streaming system on an Android 9 industrial tablet equipped with an AHD (Analog High Definition) camera interface. The purpose is to allow remote live video monitoring on demand, conserving data usage by only activating the stream when necessary. The Android device must remain idle until a remote server triggers a streaming session.

2. System Architecture

Diagram (ASCII Representation): Attached

3. Data Flow & Protocols

Trigger & Command Flow:

The backend sends a trigger via MQTT, Firebase Cloud Messaging (FCM), or WebSocket to the Android app.

The message contains session details: endpoint URL, duration, stream ID, and codec settings.

Android app acknowledges and initiates the stream.

Streaming Flow:

Android reads AHD feed and encodes it (H.264) via MediaCodec.

Stream is pushed via RTMP (or SRT/WebRTC for low-latency if supported).

Target bitrate should be <800kbps (100KB/s) using resolution reduction, frame skipping, and low-complexity encoding.

4. Trigger Mechanism from Server

Options:

Firebase Cloud Messaging (FCM)

Low-latency and battery-efficient.

Server sends a push notification with session parameters.

MQTT (Message Queuing Telemetry Transport)

Lightweight, real-time publish-subscribe protocol.

More reliable in low-bandwidth industrial networks.

WebSocket

Persistent connection for instant bi-directional communication.

Ideal if the device stays online.

Recommended: MQTT for stability in industrial environments.

5. Android Responsibilities

Session Listener: Listens for FCM/MQTT/WebSocket messages.

Video Capture: Accesses AHD camera via existing APIs or SDK.

Encoder Module: Encodes video using MediaCodec in H.264.

Stream Initiator: Pushes stream via RTMP (or SRT/WebRTC).

Session Watchdog: Automatically stops stream after timeout or stop signal.

6. Backend Responsibilities

Session Controller API (Python Flask/Django or Java Spring Boot):

POST /stream/start: Sends command to specific device ID.

POST /stream/stop: Terminates session.

MQTT Broker or FCM Server Key management.

Media Server Integration (e.g., NGINX-RTMP, Ant Media, Janus):

Receives and relays stream.

Provides viewing endpoints (e.g., HLS or WebRTC to browser).

7. Key Technical Constraints

Device: Android 9 Industrial Tablet

Camera Input: AHD (Analog, already integrated with app)

Network: Mobile data; max bandwidth usage ~100KB/s

Environment: Unreliable connectivity, power-constrained

8. Libraries / SDK References

MediaCodec API: For H.264 encoding

LibRTMP / rtmp-rtsp-stream-client-java: RTMP stream client

MQTT: Eclipse Paho MQTT Android

FFmpegKit / FFmpeg: For advanced encoding/transcoding (if needed)

WebRTC (Optional): For low-latency peer-to-peer streaming

Ant Media Server / NGINX-RTMP: Media server solutions

9. Example: MQTT Trigger Payload

{
"action": "start_stream",
"device_id": "tablet-001",
"stream_url": "rtmp://media.example.com/live/tablet-001",
"duration": 300,
"bitrate_kbps": 800
}

10. Pseudocode: Android MQTT Listener

mqttClient.setCallback(new MqttCallback() {
public void messageArrived(String topic, MqttMessage message) {
JSONObject payload = new JSONObject(message.toString());
if (payload.getString("action").equals("start_stream")) {
startStreaming(payload.getString("stream_url"), payload.getInt("duration"));
} else if (payload.getString("action").equals("stop_stream")) {
stopStreaming();
}
}
});

11. Next Steps

Finalize protocol (MQTT vs FCM)

Implement media server and test low-bitrate settings

Develop Android streaming module

Integrate backend trigger APIs and device discovery

Conduct field testing under network constraints