Skip to content

How do I troubleshoot empty transcripts in Amazon Chime SDK Media Insights Pipelines?

6 minute read
Content level: Advanced
0

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:

#QuotaServiceDefaultWhat it controls
1Voice Connector Active CallsAmazon Chime SDK10How many concurrent calls enter the system
2Concurrent HTTP/2 streams (StartStreamTranscription)Amazon Transcribe25How many concurrent transcription sessions can run
3Media Insights active pipelines per region/accountAmazon Chime SDK20How many concurrent pipelines can execute
4Lambda concurrent executions (account-level)AWS Lambda1000Account-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:

APIProcessor in Media InsightsQuota nameQuota code
StartStreamTranscriptionAmazonTranscribeProcessorConcurrent HTTP/2 streamsL-0599F82B (verify)
StartCallAnalyticsStreamTranscriptionAmazonTranscribeCallAnalyticsProcessorConcurrent call analytics streamsL-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:

QuotaRequired valueHow to request
Voice Connector Active Calls200Support 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 executions1000 (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):

  1. Monitor ThrottledCount — should drop to 0
  2. Monitor Kinesis IncomingRecords — should scale proportionally with call volume
  3. 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

ProblemCauseFix
Empty transcripts at scaleTranscribe concurrent stream quota too lowIncrease L-0599F82B to match call volume
Pipeline creation fails (CloudTrail error)Media Insights pipeline limit too lowFile support case for Amazon Chime SDK
Wrong quota raised with no effectConfused StartStreamTranscription vs StartCallAnalyticsStreamTranscriptionCheck pipeline config for processor type
Issue appears after Voice Connector scale-upOnly one of four quotas was raisedRaise all four together
No visibility into failuresEventBridge rules not configuredSubscribe to Chime Media Pipeline State Change events

Related information