Migration details

Important

The migration tool is now available under public preview to all customers except those in GCC and some customers whose Stream (Classic) tenant is in the USSO and CACT data centers (some customers in US, Canada, West Indies, & South, Central, & Middle America). The timeline to enable the tool in GCC is still to be determined. If your tenant maps to the data center USSO or CACT that doesn’t have the tool enabled, you’ll see errors when you try and run the tool. We are working to resolve the problems with these specific data centers as fast as possible.

If you have questions or feedback about the migration tool you can join our Customer Office Hours to talk directly with our engineering team.

This article elaborates on various migration topics that need detailed explanation.

Stream (Classic) video report

It is an inventory report of all videos in Stream (classic) and gives a bunch of metadata information. The report will help you plan the migration and take decisions on which video to migrate to Stream (on SharePoint). The output is a CSV file with a row for each video in Stream (Classic). We've also created an example Power BI Desktop report template that you could use to analyze, filter, and understand the inventory data.

Note

Stream admin role is a prerequisite to run the report

The report contains the following information for each video

  • Video Identifier: Also found at the end of URL when you play a Stream (classic) video
  • Name of the video
  • State of Video: Refer to the following definition
    • Created = Record created but upload hasn’t started
    • Uploading = Video is being uploaded
    • Processing = Upload successful but currently being processed
    • Completed = Processing was completed
    • Deleted = Soft Deleted (will be available in recycle bin)
    • Error = Error during upload or processing
    • Live = Live broadcast is in progress
  • Description of Video
  • Published date
  • Last view date: Date when video was last viewed. This date has been captured since around July 2021. Any video uploaded and viewed prior to July 2021 would have this field as empty, even though it was viewed.
  • Size: In bytes
  • Number of View
  • Number of Likes
  • Content Type: can take the following values
    • Generic
    • Meeting
    • Live Event
  • Privacy Mode: Can take the following values
    • Organization: visible to everyone in the organization
    • Private: visible to a selected few individual
  • Creator: The original uploader of the video
  • Owners: Can be multiple, individual or groups
  • Container (ID, Name, Type, Email): They'll be useful if you want to map videos to containers as the tool displays the data at container level. These values can be empty if the video is an orphan video and doesn't belong to any container. Container email will also be empty for Stream groups.

Videos eligible for migration

For a video to be eligible for migration, it will have to satisfy the criteria below. Only such videos will be discovered via the Migration Tool.

  1. State either Processing or Completed
  2. Published
  3. Non-empty container id

Videos ineligible for migration

Thus, videos that are ineligible for migration are:

  1. Videos that haven't been published, meaning the only person that can see it, is the original uploader
  2. Videos that are in some sort of processing or upload error state and thus aren't able to be played
  3. Videos that are "orphaned," meaning there are no longer any owners in the organization for the video, the people who uploaded it owned it have left the organization
  4. Videos that are "soft deleted," meaning they've been deleted by the user but are still in the recycle bin

Report Format Example of report output in spreadsheet

Important information about report:

  • Last View Date: This date has been captured since around July 2021. Any video uploaded and viewed prior to that would have this field as empty

  • State:

    • Created = Record created but upload hasn’t started
    • Uploading = Video is being uploaded
    • Processing = Upload successful but currently being processed
    • Completed = Processing was completed
    • Deleted = Soft Deleted (will be available in recycle bin)
    • Error = Error during upload or processing
    • Live = Live broadcast is in progress
  • Container (ID, Name, Type, Email): These values can be empty if the video is an orphan video and doesn't belong to any container.

Steps to run the script

  1. Navigate to Stream Admin Settings -> Stream Migration -> Reports (Preview) and download the script

Reports tab Stream admin center.

  1. Copy the Stream Token from the browser and save it in a file.
    • Open browser, press F12 and navigate to Stream Portal
    • Select on the Network tab and filter by ‘refreshtoken’. Out of the two requests on the left, select the one with Request Method – GET.
    • Look for Authorization header in Request headers and copy the value after ‘Bearer’

Find token from browser.

  • Save it to a file as below. For example: C:\Users<alias>\Documents\StreamReportGenerator\token.txt

Save Token.

Updating token for large tenants

  • Large tenants might have to enter the token more than once, as the token expires after an hour
  • Update the token file with latest token from the browser and execute the script again
  1. Open PowerShell and execute the script by providing four inputs:

    • InputFile(Mandatory): File Path to import the Stream token
    • OutDir (Mandatory): Folder path where the final report and few intermediate files will be stored
    • AadTenantId (Mandatory): AAD Tenant ID of the tenant
    • ResumeLastRun (Optional): A true/false flag to control whether execution should be resumed from last run or start fetching all videos again from the beginning. Default = true
    • PublishedDateLe (Optional): Fetches video entries for which Published Date is less than the value. For example: "2022-07-15"
    • PublishedDateGe (Optional): Fetches video entries for which Published Date is greater than the value. For example: "2022-01-15"

    Example: .\StreamClassicVideoReportGenerator.ps1 -AadTenantId "00000000-0000-0000-0000-000000000000" -InputFile "C:\Users\alias\Desktop\token.txt" -OutDir "C:\Users\alias\Desktop" -ResumeLastRun true.

    Example: .\StreamClassicVideoReportGenerator.ps1 -AadTenantId "00000000-0000-0000-0000-000000000000" -InputFile "C:\Users\alias\Desktop\token.txt" -OutDir "C:\Users\alias\Desktop" -ResumeLastRun true -PublishedDateLe "2022-07-15" -PublishedDateGe "2022-01-15"

  2. The script will start executing and fetch data from Report APIs

  3. The responses from the API calls will be stored in a ‘StreamClassicVideoReport’ folder under the OutDir folder

  4. Once the script execution is complete, the final report CSVs will be available in the StreamClassicVideoReport folder (The path will be displayed on the console)

  5. Within StreamClassicVideoReport folder, there will be a new folder generated for each run of the script. The CSV files within these folders contain the video data for your tenant

Please note:

  • Don't open the generated files while the script is running. It will lead to failures during script execution
  • The generated files could have duplicate entries for a video

Resume the script if there was failure

  • If the script stops mid-way due to network/machine issues, Admin can run the script again, and it will resume from the point it stopped
  • By default, the resume flag is true. If you wish to start a new run, please pass the ResumeLastRun parameter as ‘false’

Example: .\StreamClassicVideoReportGenerator.ps1 -AadTenantId "00000000-0000-0000-0000-000000000000" -InputFile "C:\Users\alias\Desktop\token.txt" -OutDir "C:\Users\alias\Desktop" -ResumeLastRun false

Troubleshooting failures

For assistance in troubleshooting in failure, share the log.txt and state.csv files generated under the OutDir folder

Example Power BI analysis report

To help analyze the output from the inventory report we created an example Power BI Desktop template that ingests the csv files output by the script. The example Power BI report helps you better understand what content is in Stream (Classic), who it belongs to, and if it's stale. You can use this report to help decide which containers you want to migrate.

Note

We are providing this example template as is. It's meant to be a quick jump start for your migration analysis. Feel free to take our example, tweak it, and build your own reports off of it. We are not providing support for this template itself. If you find issues with it or have suggestions, we'll do our best to address those as we have time.

Setting with two radio buttons, one to save videos to Stream (on SharePoint) now, the other to schedule a date when this will happen

How to run the analysis report

  1. Download PowerBI Desktop

  2. Download the example PowerBI template that analyzes the Stream (Classic) inventory CSV

  3. Open the downloaded .pbit file in PowerBI Desktop

  4. Enter the local file path to the folder containing the .csv export(s) generated from the script (remove trailing backslashes at the end of the path)

    Example: C:\StreamClassicVideoReport\20221013T1155251021

  5. Select Load

Permissions and destinations

This section explains how permissions will be mirrored between Stream (Classic) and Stream (on SharePoint).

We already discussed the defaults for the video migration destination location. Admins are free to over-ride our defaults. They can either choose to change the location of a single destination or in bulk.

Differences between permissions of Stream (Classic) and Stream (on SharePoint)

  • In Stream (Classic), a video can have multiple owners. In OneDrive and SharePoint (ODSP), a video can have multiple owners in SharePoint but will always have a single owner in OneDrive for Business (ODB).

  • ODSP has physical boundaries meaning, videos in a physical location (like a folder or a document library). Stream (Classic) has soft boundaries meaning videos can be visible in multiple locations and groups such as, MyContent and Groups.

  • Stream (Classic) has legacy constructs such as, Stream groups, or a company channel. ODSP has Microsoft 365 groups and communication sites.

  • For a Microsoft 365 group in SharePoint, members of a group will always have edit rights. For Stream (Classic), members could have edit or view rights based on the Contributor setting at the time of the group's creation.

The permissions on a video between Stream (Classic) and Stream (on SharePoint) will be mirrored. However, due to the above differences in permissions behavior, we recommend you go through this article in detail. Once you’re familiar with the differences in permissions, set custom permissions on a few test videos, migrate them, and then verify the permissions behaved as you expected. Some videos are associated with multiple entities, such as users, groups, Stream groups, and a company channel. The migration destination and permissions for these multiple-entity videos are explained in the cases below.

Case 1: Personal video, single owner case

Personal video single owner case.

User A uploads a video to Stream (Classic). The video is never displayed in a group or a channel, and User A is the only owner. Default migration mapping in Stream:

  • Video is added to the “Stream Migrated Videos” folder in User A's OneDrive for Business. User A gets owner permission by default.
  • If a video is a Teams meeting recordings, it will be migrated to “Recordings” folder inside the same “Stream Migrated Videos” folder.
  • (Custom) View permissions are set on the video in OneDrive that match the permissions set in Stream (Classic). Viewers won't be able to download files.

Case 2: Personal video, multiple owners

Personal video and multiple owners case.

User A uploads a video in Stream (Classic) and shares the ownership with User B. The video is never displayed in a group or channel. Default migration mapping in Stream:

  • Video is added to the “Stream Migrated Videos” folder in User A's OneDrive for Business. User A gets owner permission by default.
  • If the video is Teams meeting recordings, it will be migrated to “Recordings” folder inside the same “Stream Migrated Videos” folder.
  • (Custom) User B gets owner permissions on the video.
  • (Custom) View permissions are set on the video in OneDrive that match the permissions set in Stream (Classic). Viewers won't be able to download files.
  • User B will see this video in "Shared with me" across office.com, OneDrive, etc. via Microsoft 365 search.

Case 3: Group video, and personal and group owner case

Personal and group cases.

User A uploads a video to Stream (Classic) and shares the ownership with Group A.Default migration mapping in Stream:

  • Video is added to the “Stream Migrated Videos” folder in Group A's SharePoint team site.
  • (Custom) We break inheritance on “Stream Migrated Videos” folder and it will not inherit any permissions from its parent site. In addition, we'll apply specific permissions on the folder to match those on corresponding group membership in Stream (Classic). Files inside this folder will continue to inherit permissions from it.
  • (Custom) User A is assigned owner permissions on the video.
  • User A will see this video in "Shared with me" across office.com, OneDrive, etc. via Microsoft 365 search.
  • (Custom) View permissions are set on the video in SharePoint that match the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If a video is Teams meeting recordings, it will be migrated to “Recordings” folder inside the same “Stream Migrated Videos” folder and respective Channel folders.

Case 4: Group video, multiple group owners case

Multiple group owners' case

User A uploads a video to Stream (Classic) and shares ownership with both Group A and Group B. Default migration mapping in Stream:

  • The first Microsoft 365 Group the video was added to will be its default owner.
  • Video is added to the “Stream Migrated Videos” folder in Group A's SharePoint team site.
  • (Custom) We break inheritance on “Stream Migrated Videos” folder and it will not inherit any permissions from its parent site A. In addition, we'll apply specific permissions on this folder to match those on corresponding group A membership in Stream (Classic). Files inside this folder will continue to inherit permissions from it.
  • (Custom) Group B Microsoft 365 Group members are assigned owner permissions on the video. They won't see this video in their Microsoft 365 Group directly but will still have access via Microsoft 365 search.
  • (Custom) Original uploader of this video in Stream (Classic) is assigned owner permission and will see this video in "Shared with me" across office.com, OneDrive, etc. via Microsoft 365 search.
  • (Custom) View permissions are set on the video in SharePoint that match the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If the video is a Teams meeting recordings, it will be migrated to “Recordings” folder inside the same “Stream Migrated Videos” folder and respective Channel folders.

Case 5: Stream-only group video, multiple group owners case

Note

Stream-only groups come from the Office 365 Video to Stream (Classic) migration. If you didn't migrate to Stream (Classic) from Office 365 Video, this case wouldn’t affect you.

Stream-only group video case.

User A uploads a video to Stream (Classic) and shares ownership with both the Stream-only group and Microsoft 365 Group A as other owners of the video. Default migration mapping in Stream:

  • Between Microsoft 365 and Stream only group, the first Stream-only group to which the video was added is picked as destination.
  • Admins can create a new SharePoint site or use an existing site to migrate contents of "Stream group"
  • A “Stream Migrated Videos” top-level folder is created in the root document library of the above site. And a folder (with the group’s name) is created inside this top-level folder. The video is then added to the group’s folder.
  • (Custom) We break inheritance on “Stream Migrated Videos” folder and it will not inherit any permissions from its parent site A. In addition, we'll apply specific permissions on individual group folder to match those on corresponding group’s membership in Stream (Classic). Files inside the group-specific folder will inherit permissions from it.
  • (Custom) Group A Microsoft 365 Group members are assigned owner permissions on the video.
  • Group A members won't see this video in its group site directly but will still have access via Microsoft 365 search.
  • (Custom) The original uploader of this video in Stream (Classic) is assigned owner permission and will see this video in "Shared with me" across office.com, OneDrive, etc. via Microsoft 365 search.
  • (Custom) View permissions are set on the video that matches the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If the video is a Teams meeting recordings, it will be migrated to “Recordings” folder inside respective groups and their channel folders.

Case 6: Company channel video, multiple group owners case

Company channel case.

User A uploads a video to Stream (Classic) and shares ownership with both the Company channel and Microsoft 365 Group A as other owners of the video. Default migration mapping in Stream:

  • Between Microsoft 365 group and company channel, the first Microsoft 365 group to which the video was added is picked as destination.
  • Video is added to the “Stream Migrated Videos” folder in Group A's SharePoint team site.
  • (Custom) We break inheritance on “Stream Migrated Videos” folder and it will not inherit any permissions from its parent site A. In addition, we'll apply specific permissions on this folder to match those on corresponding group A membership in Stream (Classic). Files inside this folder will continue to inherit permissions from it.
  • (Custom) Company channel won't see this video inside their site, but the video will be accessible to everyone in the organization with (EEEU) view permissions via Microsoft 365 search.
  • (Custom) Original uploader of this video in Stream (Classic) is assigned owner permission and will see this video in "Shared with me" across office.com, OneDrive, etc. via Microsoft 365 search.
  • (Custom) View permissions are set on the video in SharePoint that match the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If a video is Teams meeting recordings, it will be migrated to “Recordings” folder inside the same “Stream Migrated Videos” folder and respective Channel folders.

Case 7: Company channel video, User owners case

Company channel - User case.

User A uploads a video to Stream (Classic) and associates it with Company channel. Default migration mapping in Stream

  • Between multiple Users and Company-wide channels, the first Company-wide channel to which the video was added is picked as destination.
  • Admins can create a new SharePoint site or use an existing site to migrate contents of a "Company-wide channel”.
  • A “Stream Migrated Videos” top-level folder is created in the root document library of the above site. And a folder (with the channel’s name) is created inside this top-level folder. The video is then added to the channel’s folder.
  • (Custom) We break inheritance on “Stream Migrated Videos” folder and it will not inherit any permissions from its parent site A. In addition, we'll apply EEEU view permission on this top-level folder. Files inside the channel folder will inherit permissions from their parent channel folder.
  • (Custom) Original uploader of this video in Stream (Classic) is assigned owner permission and will see this video in "Shared with me" across office.com, OneDrive, etc. via Microsoft 365 search.
  • (Custom) View permissions are set on the video that matches the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If the video is Teams meeting recordings, it will be migrated to “Recordings” folder inside respective channel folders.

Given the above, we recommend you:

  1. Migrate multiple Stream-only groups in a single site and migrate company-wide channels to a single site. Don't migrate both to the same site.
  2. Don't migrate all channels or Stream-only groups into single sites as custom permissions set for each file will exhaust the SharePoint site level quotas.
  3. Prefer defaults for most migration destinations. Migrate Microsoft 365 groups to their existing sites and users to corresponding ODBs.

Reasons for the above decisions

  1. Keeping videos in a group together will make sure they align with the SharePoint permissions model. Additionally, users will be able to see all their videos in one place. If defaults aren’t chosen for videos in a group, some group videos will migrate to individual users' ODBs.
  2. For a video associated with both a Stream-only groups and a Microsoft 365 group, we'd move the video to the former, because we can't assign permissions to a Stream-only group in SharePoint
  • If you decide to move the Microsoft 365 group first, it will not have the common videos as those videos would move with the Stream-only group.
  • On the other hand, if you migrate the Stream-only group first, we migrate all videos, including common ones, and set permissions for the Microsoft 365 group on the common ones as well. It is possible because a Microsoft 365 group identity already exists in ODSP. However, vice versa isn't possible.
  1. Similarly, for the videos associated with both a company channel and a Microsoft 365 group, we'd move the video to the latter because it's not possible to set permissions on the company channel (videos are visible to everyone in the organization).
  2. Moving videos into company channel folders is preferred over adding them to a user's ODB because we get benefits of keeping the video together in company channel.

In summary, if a video is associated with multiple entities such as, a Microsoft 365 group, Stream group, and a company channel, we follow this order:

Preference for videos associated with multiple entities.

Other factors to keep in mind

  1. Stream only syncs Microsoft 365 Groups from Teams and SharePoint. and not channels created there Any channel-based meeting in such groups won't have that channel available in Stream and hence missing from its permissions list on UI. You would see recordings from the channel inside the group list view, but this group won’t be set as the owner. See image below.

Channel not present case.

  1. Previously, if a Teams meeting recording associated with a Group was uploaded, Teams flattened the group membership and assigned its members individual permissions to. In these cases, the file will be associated with its creator and go to their ODB. You'll see members individually added to the Teams meeting recordings rather than as a group.. See the image below.

Teams Flattening.

Stream (Classic) URL and embed support post migration

Stream (Classic) URLs and embeds will be supported for 1 year after Stream (classic) end of life. The table below summarizes the support plan.

Type of link Video Channel Stream All
URLs (shared in chats/emails/bookmarked) Yes Yes N/A
Embeds Partial (public preview), Full (GA) Partial No
  • Existing Stream (Classic) video link will continue to work post migration. It will redirect to play from migrated destination on ODSP.

  • An existing group link from the Stream (Classic) portal will redirect to the destination folder chosen by admin during migration.

  • An existing channel link from the Stream (Classic) portal will redirect to the channel folder created inside the chosen destination SP site or ODB by admin during migration.

Video embed

Support during Public preview

During preview, the embed video inside SharePoint, Teams, or a third-party site will NO longer continue to play inline. The thumbnail will be replaced by a link to the migrated video (see the screenshot below). When a user selects the Watch video button, the video will play in OnePlayer from the migrated location in a new browser window.

Video embed in Teams.

Video embed in SharePoint.

Support at General Availability of tool

Videos will play inline, similar to Stream (Classic) embed playback.

Videos migrated during preview that were partially supported, will also start to play inline after GA.

Channel embed

Channel embeds in SharePoint and Teams will be partially supported post migration. They'll no longer display or play back videos inline. The new channel thumbnail will provide a link to the migrated channel’s videos folder (see screenshot below). The View channel button will take users to the migrated channel’s videos folder in ODSP.

Channel embed in Teams.

Note

Both for a URL or an embed, if a video is migrated and then gets moved again from its migrated destination, the Stream (Classic) link associated with that video will stop working. Stream (Classic) links will continue to work for 1 year after Stream classic end of life. Be sure to check the retirement timeline section for detailed milestones.

See also

Migration strategies guide

Adoption strategies guide

Overview of migrating to Stream (on SharePoint)

Migrate your videos from Stream (Classic) to Stream (on SharePoint)

Migration details

Migration tool details

More information on Stream (on SharePoint)

Features and roadmap of Stream (on SharePoint)

Connect with the Stream engineering team to give us feedback and learn more about Microsoft Stream