How Much Storage is Consumed by Teams Meeting Recordings?

Stream Storage and Teams

Microsoft allocates each Office 365 tenant a base 500 GB of Stream storage plus 0.5 GB for every licensed account (excluding users with frontline licenses, like F1). The storage is consumed by videos uploaded to Stream. Teams usage due has recently experienced a massive upswing due to more people working from home. Many in-person meetings have been replaced by Teams meetings. Being able to record Teams meetings is a popular feature because it allows people who can’t attend the meeting to catch up afterwards. To generate a Teams meeting recording, a bot attends the meeting and automatically uploads the recording to Stream for processing once the meeting is over.

Given the way Teams uses Stream to store recordings, it’s reasonable to ask how much storage is consumed by these files. In the past, I’ve seen guidance of 2 MB/minute for medium-definition videos uploaded to Stream, but nothing about Teams recordings.

Stream Video Definitions

When it processes an uploaded video, Teams creates several versions of the video with different renditions or bitrates. When Stream plays a video back, it chooses the best possible definition. You can see the available definitions for a video using the settings (cogwheel) menu during playback (Figure 1).

 Different definitions available for a Stream video
Figure 1: Different definitions available for a Stream video

Storage for Teams Meetings

To understand the storage used for Teams meeting recordings, I took nine recordings from the recent MVP Summit, which was originally intended to be an in-person event. Due to the Covid-19 situation, Microsoft decided to run the summit as an online event and use a mixture of Teams meetings and Live Events for the sessions. Although I missed the opportunity for offline chats with Microsoft engineers, Teams worked well as the foundation for an online conference.

Each recording was for a scheduled 50-minute meeting and featured a mixture of presentations, demos, and discussions involving up to 250 people (the current maximum for a Teams meeting). The meetings were recorded at 1080p (see note below). I consider these recordings to be representative sample of what an enterprise tenant might generate for their meetings. Table 1 lists the length of each meeting in minutes (decimal notation) and the size of the recording.

1080p Mins Size (MB) MB p/min
Video 1 47.66 361.55 7.586042
Video 2 39.2 303.96 7.754081
Video 3 55 417.78 7.596005
Video 4 50.5 393.03 7.782816
Video 5 51.75 403.10 7.789308
Video 6 56 435.33 7.773664
Video 7 51.4 386.63 7.522058
Video 7 61 466.12 7.641329
Video 8 48.5 385.88 7.956246
Video 9 51.5 368.29 7.151187
Average 7.655274

Table 1: Stream recording file sizes

Overall, the average is about 7.65 MB storage consumed per minute of a Teams meeting. Your mileage might vary, but this is probably a good figure for planning purposes. A 1,000-user tenant has a 1,000 GB storage quota for Stream. A quick calculation equates to about 2,230 hours of Teams meeting recordings. Given the number of corporate meetings that take place, this isn’t many hours…

Impact of Teams Recordings on Office 365

According to Microsoft, Teams users have recently generated 900 million meeting and calling minutes daily. If these minutes were all meetings and all recorded, they would consume 6,570.57 TB of Stream (Azure) storage at 1080p. Of course, many of these minutes are 1×1 or group calls and not all meetings are recorded, but consuming storage at even 2,000 TB/day is quite a rate.

Reducing the definition eases the processing load and reduces the storage needed, so it’s easy to see why Microsoft reduced the definition for Teams meeting recordings to 720p among other steps to reduce the load on the Office 365 infrastructure. It’s likely that Microsoft will increase the definition of Teams meeting recordings back to 1080p once the current strain on the Office 365 infrastructure eases.

How Much Storage is My Tenant Using?

Given that Teams meeting recordings can consume a large proportion of the assigned Stream storage quota, it seems important to understand what storage is being used and what’s consuming the storage. After all, you don’t want to be forced to buy added storage for Stream at $100/month per 500 GB unless absolutely necessary.

The problem is that Stream isn’t very good in terms of analytics. Stream administrators can view the current consumption (Figure 2), but there’s no easy way of finding out the size of each video. Stream doesn’t support the Graph reporting API like other Office 365 workloads like Exchange, SharePoint, and OneDrive for Business do.

Viewing the Stream storage used in an Office 365 tenant
Figure 2: Viewing the Stream storage used in an Office 365 tenant

Stream and the Office 365 Audit Log

Maybe the Office 365 audit log can help? Well, you can certainly find events for when Stream uploads and processes videos, but the events logged don’t tell you anything about the file sizes. For instance, if we run some code to find and analyze upload events in the audit log, we can find who uploaded videos, but not much else (Figure 3).

$StartDate = (Get-Date).AddDays(-90); $EndDate = (Get-Date) 
$Records = (Search-UnifiedAuditLog -Operations StreamInvokeVideoUpload -StartDate $StartDate -EndDate $EndDate -ResultSize 2000)
If ($Records.Count -eq 0) {
    Write-Host "No audit records for Stream video uploads found." }
Else {
    Write-Host "Processing" $Records.Count "audit records..."
    $Report = [System.Collections.Generic.List[Object]]::new() # Create output file for report
    # Scan each audit record to extract information
    ForEach ($Rec in $Records) {
      $AuditData = ConvertFrom-Json $Rec.Auditdata
        $ReportLine = [PSCustomObject] @{
           TimeStamp = Get-Date($AuditData.CreationTime) -format g
           User      = $AuditData.UserId
           Action    = $AuditData.Operation
           VideoURL  = $AuditData.ResourceURL
           VideoName = $AuditData.ResourceTitle }
      $Report.Add($ReportLine) } }
$Report | Sort {$_.TimeStamp -as [DateTime]} -Unique -Descending | Out-GridView
 Office 365 audit log records for Stream uploads
Figure 3: Office 365 audit log records for Stream uploads

One interesting thing seen in the audit records is that videos uploaded from mobile devices don’t insert the video name in the audit record. That’s not a good thing.

Microsoft Needs to Deliver Stream Analytics

The current state of Stream analytics within Office 365 might have been satisfactory before the explosion of Teams meeting recordings. It isn’t now. Microsoft needs to make it possible for tenant administrators to find out how Stream storage is consumed or provide increased base storage. After all, they want all your data to be in the cloud, don’t they?

This topic is the kind of thing the Office 365 for IT Pros writing team thinks about all the time. The outcome mightn’t end up as more than a sentence or two in the book, but it’s nice to do the research to back up what we say.