This had several challenges.
- Choosing the right backend server and rendering engine for the Android platform.
- Rigorous memory management techniques to ensure the best possible stream quality.
- Working on Bare Metal Android Canvas code to efficiently handle the incoming video feed.
- Intelligent switching between supported protocols (RTSP, RDP and HTTP/HTTPS) based on the connection type (LAN, WAN).
- Handling network switching scenarios and high latency use cases.
- Some video feeds had four videos stitched together. Slicing of individual videos in such cases had to be done quickly and efficiently.
After considering several streaming and content rendering engines, we finally fixed chose Android Streaming API for implementation. The API had a plethora of features and support for both Android SurfaceView and Bare Metal OpenGL rending canvas for future scaling.
We also built a robust asynchronous HTTP request component based on the Android Volley library to achieve reliable communication between EventStream REST services and the Mobile Endpoint.