An Azure communication platform for deploying applications across devices and platforms.
Android ACS Calling SDK: Unable to send video above 640×360 - both RawOutgoingVideoStream and LocalVideoStream
Product
- Azure Communication Services Calling SDK for Android - '
com.azure.android:azure-communication-calling:2.16.0' - Features:
RawOutgoingVideoStream/VirtualOutgoingVideoStream, andLocalVideoStream
Environment
- Device: Google Pixel 5
- Camera capture: CameraX (for the raw-frame path)
- Call topology: group call (multiple participants / SFU)
- Receiver: ACS Web/JS SDK, rendering the incoming video full-screen, with no incoming video constraints applied
-
RawOutgoingVideoStreamVideoStreamFormatconfigured as:- Resolution: 1280 × 720
- Pixel format: NV12 (also tested with RGBA)
- Frame rate: 30 fps (configured)
- Stride1: 1280, Stride2: 1280
Issue
We use the Android ACS Calling SDK to send outgoing video and observe that ACS consistently encodes and transmits at 640×360 using a software H.264 encoder (h264 sw), regardless of the resolution, pixel format, or stream type we provide.
For the raw path, our application generates 1280×720 frames and submits them via sendRawVideoFrame(). The SDK accepts every frame successfully. Our logs confirm the supplied format:
-
pixelFormat=NV12 1280x720 30fps stride1=1280 stride2=1280
However, the outbound video statistics consistently report:
{
"bitrateInBps": 172430,
"codecName": "h264 sw",
"frameWidth": 640,
"frameHeight": 360,
"frameRate": 13.37
}
Questions
- Does the Android ACS SDK use a software H.264 encoder (
h264 sw) for outgoing video, or should it use the device's hardware encoder (MediaCodec) when available? We observeh264 swfor bothRawOutgoingVideoStreamandLocalVideoStreamon a Pixel 5 (which has a hardware H.264 encoder). - Is the SDK expected to downscale 1280×720 (or 1920×1080) input to 640×360 before encoding?
- Are there documented default limits or adaptive policies that cap the transmitted resolution — and specifically, does the group-call topology impose a lower default outgoing resolution than a 1:1 call?
- Is there any API or configuration (e.g.
OutgoingVideoConstraints) that lets the application request or preserve 1280×720 transmission? If so, what are the supported maximums on Android?
Please let me know if any further details required. This is a critical issue for our product, so any guidance or workaround would be greatly appreciated.