Stream (Classic) to Stream (on SharePoint) migration tool
If you have questions or feedback about the migration tool you can join our Customer Office Hours to talk directly with our engineering team.
Review the Stream (Classic) retirement timeline as some of the dates have been extended to give customers more time for migration.
This article explains migration tool concepts and how it moves the data. We recommended you go through this article before you see the steps by step guide to run the tool article.
Containers & default destination
The Stream migration tool is built on the Microsoft Migration Manager platform (MMP). It's the go-to tool for migrating any data into SharePoint and OneDrive. Read more about Migration Manager. The Migration Manager works with containers (a group of files) and source and destination connectors. We've built a source connector into Migration Manager to pull content from Stream (Classic) and migrate it into OneDrive and SharePoint.
We divided videos in Stream (Classic) into five container types:
|Container Name||Classic Content Mapping|
|Microsoft 365 Group||Videos in Microsoft 365 Groups and channels inside them|
|User||Videos in ‘My Content’ in Stream (Classic). Each user who has published at least a video and not associated that video with a group or channel will display as one container in the tool. (Recorded Teams meeting recording count as published videos.)|
|Stream group||Videos in Stream only groups. These containers only show up for customers that migrated from Office 365 Video to Stream (Classic).|
|Companywide Channel||Videos in companywide channel|
|Orphan Videos||Videos with no active owner, combined into one or multiple containers. Videos that belonged to uploader who left the organization. And no other User, Microsoft 365 group or channel was assigned as owner.|
We choose the default destination for Microsoft 365 Group and User containers, which admins can override. The table shows the ‘natural’ defaults. Admins can change the destination of a single container or use the CSV upload (.csv file) feature to change the destinations in bulk. The third column contains information about the folder hierarchy that is created in OneDrive or SharePoint when the container is migrated.
|Container Types||Default Destination||Folder Hierarchy|
|Microsoft 365 Group^||Already existing Microsoft 365 Group SharePoint team site||A folder ‘Stream migrated videos’ is created in root doc library. Each channel in the group becomes a folder under ‘Stream migrated videos’ folder. Teams meeting recording of the channel would be further under the ‘Recordings’ folder|
|User (My Content)||A user's OneDrive for Business (ODB)||A folder ‘Stream migrated videos’ is created in User’s OneDrive for business (ODB). Teams meeting recordings are placed further in a ‘Recording’ folder inside it|
|Stream-only group||None (Admins can choose an existing SharePoint site or create a new one)||Same as Microsoft 365 group.|
|Companywide-wide channel||None (Admins can choose an existing SharePoint site or create a new one)||
Same as Microsoft 365 group. Each companywide channel appears as a folder inside ‘Stream migrated videos’ folder.
We recommend Admins divide companywide channels across multiple new or existing sites to avoid reaching the SharePoint permissions quota limit.
|Orphan Videos||None (Admins can choose an existing SharePoint site or create a new one)||Same as Microsoft 365 group. Organization can have one of multiple Orphan containers.|
^ destinations auto-assignment for Microsoft 365 groups works perfectly if you have less than 50-K sites on SharePoint. If you have more than 50-K sites, some or all destinations may be missing. Use [script to fill in the missing entries]().
Note: The names of folders created are available only in English.
Rules & constraints
The tool migrates only certain metadata on the video. The remaining metadata is lost and won't be recoverable.
To get a complete list of metadata that migrates with video check the Metadata that migrates with video section.
Here are a few constraints on moving videos that belong to a group or user:
- Videos that belong to a group: All videos in a group move together. They're moved to the already existing Microsoft 365 group if defaults are chosen, or any other site chosen by the admins
- Videos that belong to a user: Only videos not associated with a group or channel are moved via ‘User’ container and land in the user's ODB if defaults aren't over-ridden. Videos for which a group was assigned the viewer and not the owner role move via ‘User’ container as well. For details, read Video in group move together section.
Videos associated with multiple groups move physically into one location. Permissions are granted to other groups' members so they can watch videos and access them through search inside ODSP.
Once migrated, videos and containers are hidden on Stream (Classic) and are only visible on Stream (on SharePoint). Migrated content will continue to remain on Stream (Classic) until its infra deprecation.
Any content that remains in Stream (classic) after the migration is complete, will be deleted at Stream (Classic) end of life.
If you want to disable Stream (Classic) when you're done migrating, see the disable tenant section of the migration settings.
Either all or specific videos in a container migrate. For migrating specific videos from within a container user partial migration filters.
The tool can handle max 50,000 containers at once and autodiscovers 49,500. Containers are visible in this order: Microsoft 365 groups, Stream groups, Companywide channels, Users.
When you use the tool for the first time, it may take up to 15 minutes for your Containers to start appearing in the Scans tab.
Metadata that migrates with videos
- Basic metadata - Name, Description, Created by, Published date, Last modified date, Type of content (Video, Teams meeting recording, or Live event). Type of content isn't available as column value, but the organizational hierarchy created by migration will help you determine type of content.
- Permissions: We mirror permissions between videos on Stream (Classic) and Stream (on SharePoint) as much as possible. But there are differences in the two versions, based on physical location construct and edit vs view rights. It's especially true for videos associated with multiple groups, Stream groups, and companywide-wide channels. In any conflicting scenario between the two versions, we follow the principle of least access. For complete details, read how videos in group move together and detailed permissions. Permissions may change between two versions of Stream in case admins are using script to re-arrange content on Stream(Classic)
- Transcripts - All transcripts on the video including multiple subtitles and caption files are migrated
- Thumbnails - Thumbnails on the video including custom ones migrate
- Classic URL support: Existing links to Stream (Classic) redirect to play from new migrated locations in SharePoint and OneDrive.
- Classic Embed support
- Video embeds - If you migrate a video, the embed will redirect to the new location you migrated it to and play the video inline. If you don't migrate a video then Stream (Classic) embeds will stop working when Stream (Classic) is retired.
- Channel embeds will be partially supported, by showing a link to the migrated destination folder, which can be opened in a new tab.
Anything that isn't in this list will NOT be migrated. For details refer to the last column ‘Migration Notes’ in the spreadsheet that compares features between the two versions of Stream
Videos in group move together
- The migration tool doesn’t move the videos individually, as mentioned above it moves them in logical groups called containers
- A video in Stream (classic) may appear in multiple places but in Stream (on SharePoint) it will be physically migrated at one location, this is because unlike SharePoint, classic didn’t have a physical location construct
- In Classic, Videos were uploaded by users and associated with a Microsoft 365 group or company channel.
- If a video was associated only with users, it moves by default to OneDrive of One of the users.
- However, if a video was associated with another entity such as Microsoft 365 group or company channel, it moves as part of that entity. If a video was associated with all such entities, it follows the following order. To read the details, refer to our detailed cases for permissions & locations
- However, there's an exception to this rule. If a video in an Microsoft 365 group isn't assigned to the group as ‘Owner’ but only as 'Display', then the video moves with the User who is assigned as Owner. For example, in the case below, the video, which appears in ‘Digital Initiative Public Relations’ group in Stream (Classic) will move into the User container of ‘MOD Administrator’. Read more about this nuance
Re-arrange source content on Stream (Classic)
The migration tool has a logic to assign videos to containers based on the priority defined in the last article.
- If a video is associated with multiple groups, tool may assign it to one of the groups whereas admin may want to move it with another group. This script lets admins choose the group to move the video.
- If a group is assigned as 'display' instead of an owner, as shown in the screenshot in previous article, the group moves as part of the owner or the user container. Instead, admins may want to move this video as part of the group container.
To solve the above issues, we're developing the following script.
Script to update ownership on Stream (Classic) videos
The script is available now, read about its various modes below or jump to the instructions to run the script.
Mode 1: Export Stream (Classic) videos
This mode is meant to export details of all the videos present inside a container
Mode 2: Set owner for videos
This mode will be useful for the admins to update permissions of any video such that it moves with a specified M365 group container or a user container. The script takes as input the video ID whose ownership is to be updated and the M365 group/user container details to which the ownership of the video is to be assigned.
If the specified container is an M365 group, the script downgrades the permissions of any other Microsoft 365 or Stream groups associated with the video to 'view' only. Permissions for user or company channel will remain unchanged.
If the specified container is a user, the script downgrades the permissions of any other Microsoft 365, Stream group or User associated with the video to 'View'.
Container priority logic:
Videos in: Stream Group> M365 Group > Company or Org-wide Channel > User
Admins can extract the input required for excel from:
- Video ID: Classic inventory/PowerBI report or Stream (Classic) directly.
- Group AAD ID: Classic Inventory/PowerBI or Stream (Classic) directly.
- User AAD ID: Classic Inventory/PowerBI.
We aren't giving an option for admins to assign videos to Company channel, since there's no viewer or owner concept. So, if we need to downgrade the permissions of company channel, the video loses even view access to that channel
Mode 3: Set group as owner
This mode is useful if you want to move together all videos visible in a Microsoft 365 group in Stream (Classic). This mode is useful to handle the scenario when some videos are associated with a group as 'Display' rather than 'Owner'.
Admins can get group container ID from Inventory report/PowerBI dashboard or from Stream (Classic) directly.
Similar to mode 2, the script looks through all videos of the group specified by admin. It picks first video of the group and check if there are any other Microsoft 365 or Stream group associated with the video. If yes, it will downgrade them to ‘view’ permissions. Permissions for user or company channel will remain unchanged. This logic is repeated for all video of the group that admin specified.
Couple of con or caveat of using the script in any of the above modes:
- If admins use this script, permissions for some Microsoft 365 & Stream group may be different from their permissions in stream (Classic) due to downgrade.
- A video can move to multiple locations and redirection will point to the last migrated destination location. Videos move to multiple locations when admins run this script for Group A, migrate it and run the script for Group B. Video common to both groups migrate twice at both location in Stream (on SharePoint).
Admins should use this script carefully, and only for critical groups, that should own the content in Stream (on SharePoint) going forward.
Identify containers that have overlapping videos
In order to correct permissions on the source side or Stream (Classic), admins also need information on the groups, where the number of videos don’t match in Stream (Classic) and the migration tool or the inventory report. We have added two information in the inventory report and same will be visible in Power BI dashboard.
- Total videos: Count of videos that move as part of the corresponding Microsoft 365 group, Stream Group or company channel.
- Videos in Stream Classic UI: Count of videos associated with the container in Stream (Classic).
To identify containers that have overlapping videos follow the steps:
- If '1' and '2' above are different values for a container, that means the container has videos that overlap with other containers.
- You can get not just the count but actual videos in '1' and '2' by using mode 1 of the permissions script and from the inventory report respectively.
- Once you have the videos, you can update their permissions manually or via the permissions fix script.
- You should do the above exercise only for containers that are business critical and where you want all videos to stay together especially ones that have overlapping videos.
Migration filters- move specific videos from a container
The migration tool can either migrate complete container or just specific videos from within the container. There can be multiple reasons why admins may want to migrate specific videos, for e.g:
- They wish to migrate videos other than Teams meeting recording (TMR), since nobody is watching old TMRs. TMRs generally have high decay rate and they migrated to Stream (on SharePoint) long time ago.
- They wish to migrate latest videos or videos that have been published or viewed recently.
- They wish to migrate populate videos or those with high view count.
- Filters are available only when the migration tool is accessed from Microsoft admin center. Log into https://www.admin.microsoft.com. Navigate to Setup tab and then migrations tab. The same SharePoint admin credential will work to access the tool.
- When multiple filters are used together, they function together as AND operators
The tool has the capability where admins are able to filter out specific videos based on above criterion.
Content Type: Takes one or all of the three values as input; ‘Teams meeting Recording’, ‘Live event’ and ‘Video on demand’. Select the videos type you wish to migrate. Unselected videos type will be filtered out or not migrated.
Publish date: Takes earliest and latest date values. Filters out (or doesn't migrate) videos that were not published within the selected date range.
Last View date: Takes earliest and latest date values. Filters out videos whose last view date does not lie within the selected date range. Stream (Classic) started capturing last view date since July 1,2021. Videos that were last viewed before that date have the value set as null and are always filtered out. In case you wish to migrate videos last viewed before July 1, 2021, don't use this filter.
View Count: Takes number value. Migrates videos with Views greater than or equal to the selected number.
Global and custom filters
Filters can be applied in twos ways:
Global filters: This can be accessed from top right corner of the migration tool via the settings gear icon. Settings here apply to all migrations.
Custom filters: This is applied to selected migrations or containers. Global settings are copied to all migrations, which get over-ridden if custom filters are selected. These can be changed both from 'Scans' and 'Migrations' tab.
When you add containers to migrations the right pane, give you an option to select the customer filters. To change the filters from migrations tab, select on a line item to open a side pane and look for filters under 'settings'.
Migration tool does not show the number of videos and containers that will be migrated based on a selected set of filters, before the actual migration. To do that you can play will these same set of filters via the PowerBI template.
Any video whose original uploader has left the organization is considered as an orphaned video. An orphaned video can be associated to:
- The original uploader
- An M365 group
- A company channel
While the orphaned videos which are only associated to the original uploader will migrate via the 'Orphan video' container, the orphaned videos associated with M365 group and company channel will move with the group and channel container.
If your SharePoint has more than 50-K sites, auto-destination mapping may not work perfectly for your tenant. Some or all entries may be missing. You can use our script to fill in missing entries.
The script is same as the one used to generate Stream (Classic) video inventory report. It takes 'Upload destination' CSV template downloaded from the 'Migrations' tab as input and generates the file locally on your PC. The file then can be uploaded into the tool. This script works for both English and non-english SharePoint sites.
Read instructions to run the destination mapping script.
There are a few reports available via the tool in Migration manager and a few via Stream (Classic) admin center.
Stream (Classic) video report
There's an inventory report of all videos in Stream (Classic). Refer to Stream (Classic) video report article for details on how to run the report.
Scan log and Summary
The Scans log is a container-level report available in the Scans tab. It includes details about each scanned video, including—its size, name, source path, and total & unique permissions/ACLs on it.
To download the log: On the Scans tab, pick a container then select the Download Log button that appears in top header.
The Scans summary is an aggregate-level report available in the Scans tab and includes—container name, size, scanned videos inside it, unique permissions on the videos, number of videos, and total data size.
To download the summary: On the Scans tab, select the Download Report button that appears in the top header.
Migration log and Summary
The Migrations log is a container-level report available in the Migrations tab. The report provides details about each video that has been migrated including- its size, name, destination folder, path, if migration succeeded and the total data size of migrated videos.
To download the log: On the Migrations tab, select a container and then select Download log button that appears in the top header. It opens an overlay, which shows a container's current and historic logs. Select a log and select ‘Download CSV’ to download the log for selected instance.
The Migration summary is an aggregate-level report available in the Migrations tab. It includes details like container name, folder created, videos successfully migrated, videos skipped or failed, data transferred successfully, and the size of data failed or skipped.
To download the summary: On the Migrations tab, select the Download Report button that appears in the top header.
Add Containers manually
This feature is useful if you're a large organization and have more than 40,000 containers in your Stream (Classic) tenant. As mentioned in the ‘Rules & Constraints’ section, tool auto discovers only 40,000 containers, and there are chances that the containers you wish to migrate aren't discovered. You can migrate such containers by adding them manually. You can add either a single container or multiple containers in bulk via ‘Upload CSV file’ option.
Since the tool can show a maximum of up to 50,000 containers, you can manually add up to 10,000 containers without deleting any auto discovered container. At any given time both the Scans and Migrations tab can't have more than 50,000 containers.
How to add containers manually
Refer to the Add container documentation.
Know issues: The name of the container isn't visible in the tool, but it doesn’t affect the migration in any way.
Tags are a useful catch-all feature for customers to better organize, plan, or migrate data in logical bunches. You can apply upto three tags per container and filter based on tag values. Examples on how you can use tags in the migration:
- For a large organization, adding information related to geography or business unit may be useful if you wish to migrate containers belonging to a particular group, together.
- If you have employees who are vendors or full time or staff or student, you can add this information as a tag and migrate based on content priority.
- If you have large number of containers, you're likely to migrate them in phases. Tag your containers based on waves of migration. For example, you may migrate some containers in Wave 1 and others in later waves.
You need to import the above organization level info as tags into the tool and then use the info to filter containers. Take a look at the article on how to add tags
Now that you understand the concepts of the migration tool you should:
- Review the Migration strategies guide to start building a plan for your migration
- Follow the Step by step guide to run the migration tool to migrate content from Stream (Classic) to OneDrive & SharePoint