How do I troubleshoot empty transcripts in Amazon Chime SDK Media Insights Pipelines?
When I scale my Amazon Chime SDK Media Insights Pipelines to handle more concurrent calls, some or all transcripts return empty with no obvious errors in application logs.
4 minute read
When I scale my Amazon Chime SDK Media Insights Pipelines to handle more concurrent calls, some or all transcripts return empty with no obvious errors in application logs.
Short description
Empty transcripts at scale are caused by a multi-service quota dependency across Amazon Chime SDK, Amazon Transcribe, and AWS Lambda. Four separate quotas must be aligned for Media Insights Pipelines to scale correctly. When any quota is exceeded, calls continue without transcription — but no error is returned to the application unless you've configured EventBridge rules to capture failures.
This issue typically appears after increasing Voice Connector Active Calls without also raising Transcribe streaming concurrency and Media Insights Pipeline limits.
Note: This article applies to environments using Amazon Chime SDK Voice Connectors with SIPREC integration and Media Insights Pipeline configurations with Amazon Transcribe processors (real-time streaming transcription).
Resolution
Understand the four-quota dependency
Four quotas across three services must be aligned:
| # | Quota | Service | Default | What it controls |
|---|---|---|---|---|
| 1 | Voice Connector Active Calls | Amazon Chime SDK | 10 | How many concurrent calls enter the system |
| 2 | Concurrent HTTP/2 streams (StartStreamTranscription) | Amazon Transcribe | 25 | How many concurrent transcription sessions can run |
| 3 | Media Insights active pipelines per region/account | Amazon Chime SDK | 20 | How many concurrent pipelines can execute |
| 4 | Lambda concurrent executions (account-level) | AWS Lambda | 1000 | Account-wide concurrency shared across all functions |
Step 1: Identify which quota is the bottleneck
Check for Transcribe throttling in CloudWatch:
Navigate to CloudWatch → Metrics → AWS/TranscribeStreaming. Check the ThrottledCount metric for operation StartStreamTranscription. If ThrottledCount > 0, the Transcribe concurrent streams quota is the bottleneck.
# Check your current Transcribe streaming quota aws service-quotas get-service-quota \ --service-code transcribe \ --quota-code L-0599F82B \ --region us-east-1
Check for Media Insights Pipeline failures via CloudTrail:
-- CloudTrail Lake query for pipeline creation failures SELECT eventTime, errorCode, errorMessage FROM <event-data-store-id> WHERE eventName = 'CreateMediaInsightsPipeline' AND errorCode = 'ResourceLimitExceededException' ORDER BY eventTime DESC
-- CloudTrail Lake query for Transcribe throttling SELECT eventTime, errorCode, errorMessage, userIdentity.arn FROM <event-data-store-id> WHERE eventName = 'StartStreamTranscription' AND errorCode = 'LimitExceededException' ORDER BY eventTime DESC
Step 2: Verify which Transcribe processor you're using
Amazon Transcribe has two streaming APIs, each with its own quota:
| API | Processor in Media Insights | Quota name | Quota code |
|---|---|---|---|
| StartStreamTranscription | AmazonTranscribeProcessor | Concurrent HTTP/2 streams | L-0599F82B (verify) |
| StartCallAnalyticsStreamTranscription | AmazonTranscribeCallAnalyticsProcessor | Concurrent call analytics streams | L-D605B8B2 (verify) |
Inspect your MediaInsightsPipelineConfiguration:
{ "Elements": [ { "Type": "AmazonTranscribeProcessor", "AmazonTranscribeProcessorConfiguration": { "LanguageCode": "en-US" } } ] }
- If you see
AmazonTranscribeProcessor→ raise the StartStreamTranscription quota - If you see
AmazonTranscribeCallAnalyticsProcessor→ raise the StartCallAnalyticsStreamTranscription quota
Important: Raising the wrong quota has no effect. These quotas are owned by different service teams.
Step 3: Request quota increases
Transcribe streaming quota (self-service):
aws service-quotas request-service-quota-increase \ --service-code transcribe \ --quota-code L-0599F82B \ --desired-value 260 \ --region us-east-1
Or via the console: Service Quotas → Amazon Transcribe → "Concurrent HTTP/2 streams" → Request increase at account level.
Media Insights Pipeline limit (support case required):
This quota is not currently self-service adjustable. File a support case:
- Category: Amazon Chime SDK
- Type: Service Limit Increase
- Limit: Media Insights active pipelines per region/account
- Desired value: Match your Voice Connector Active Calls limit
Note: If your Transcribe request exceeds the adjustable maximum, file a support case or contact your Technical Account Manager.
Step 4: Align all quotas
Ensure these relationships hold:
Voice Connector Active Calls ≤ Media Insights Active Pipelines
Voice Connector Active Calls ≤ Transcribe Concurrent Streams
Lambda Account Concurrency — sufficient for downstream processing
For 200 concurrent calls, recommended values:
| Quota | Required value | How to request |
|---|---|---|
| Voice Connector Active Calls | 200 | Support case (Amazon Chime SDK) |
| StartStreamTranscription concurrent streams | ≥260 (headroom) | Self-service via Service Quotas or support case |
| Media Insights active pipelines | ≥260 (headroom) | Support case (Amazon Chime SDK) |
| Lambda concurrent executions | 1000 (default usually sufficient) | Self-service via Lambda console |
Step 5: Configure EventBridge monitoring
Ensure you capture pipeline failures going forward:
aws events put-rule \ --name ChimeMediaPipelineFailures \ --event-pattern '{"source":["aws.chime"],"detail-type":["Chime Media Pipeline State Change"]}' \ --region us-east-1 aws events put-targets \ --rule ChimeMediaPipelineFailures \ --targets 'Id=1,Arn=arn:aws:sns:us-east-1:123456789012:ops-alerts' \ --region us-east-1
Step 6: Verify the fix
After quota increases are applied (allow 15–30 minutes):
- Monitor
ThrottledCount— should drop to 0 - Monitor Kinesis
IncomingRecords— should scale proportionally with call volume - Spot-check transcripts for non-empty content
# Quick check: transcript success rate import boto3 from boto3.dynamodb.conditions import Attr dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('your-transcripts-table') response = table.scan( Select='COUNT', FilterExpression=Attr('transcript').exists() & Attr('transcript').ne('') ) total_with_transcript = response['Count'] response_all = table.scan(Select='COUNT') total_calls = response_all['Count'] print(f"Transcript success rate: {total_with_transcript/total_calls*100:.1f}%")
Quick troubleshooting reference
| Problem | Cause | Fix |
|---|---|---|
| Empty transcripts at scale | Transcribe concurrent stream quota too low | Increase L-0599F82B to match call volume |
| Pipeline creation fails (CloudTrail error) | Media Insights pipeline limit too low | File support case for Amazon Chime SDK |
| Wrong quota raised with no effect | Confused StartStreamTranscription vs StartCallAnalyticsStreamTranscription | Check pipeline config for processor type |
| Issue appears after Voice Connector scale-up | Only one of four quotas was raised | Raise all four together |
| No visibility into failures | EventBridge rules not configured | Subscribe to Chime Media Pipeline State Change events |
Related information
- Language
- English
Relevant content
- Accepted Answer
asked a year ago
asked 2 years ago
AWS OFFICIALUpdated 2 years ago