Stream migration tool reports, permissions and embed support

Important

The migration tool for IT admins, is now available to all customers except those in GCC. The timeline to enable the tool in GCC is still to be determined.

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 articles that need detailed explanation.

Stream (Classic) video report

It's an inventory report of all videos in Stream (classic) and gives a bunch of metadata information. The report helps 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: Email ID of the original uploader of the video.
  • Owners: Contains User or Microsoft 365 group email ID. Can be multiple individuals and/or groups. No information regarding Stream only group or Company wide channel is mentioned even if the video associated with them
  • Container (ID, Name, Type, Email): They're 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 is empty for Stream groups.

Videos ineligible for migration

Thus, videos that are ineligible for migration are:

  1. Videos that aren't published or in draft, meaning the only person that can see it, is the original uploader
  2. Videos that are in 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. The 'container ID' for such rows is empty in the report *
  4. Videos that are "soft deleted," meaning they've been deleted by the user but are still in the recycle bin

To identify eligible videos via report look for line items that satisfy the following criteria

  1. State either Processing or Completed
  2. Published
  3. Nonempty container ID

Orphaned videos - Currently orphaned videos and an orphaned video container won't be visible in migration tool. We're working in CY2023 to enhance the tool to allow you to migrate all such videos. Before, that a way to identify published orphaned videos via report is where a) state is either Processing or Complete b) Video is Published c) Video has empty container ID.
Also, if you have a few orphaned videos, you can assign owners to such video, and they're discovered under corresponding container in the tool.

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 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 are 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 starts executing and fetches 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 are 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 leads 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 resumes from the point it stopped
  • By default, the resume flag is true. If you wish to start a new run, 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

Last updated November 22, 2022 to v0.7

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

Destination mapping report

Coming on April 15th, 2023

Permissions and destinations

This section explains how permissions are 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 following cases.

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's migrated to “Recordings” folder inside the same “Stream Migrated Videos” folder.
  • (Custom) View permissions are set on the video in OneDrive that matches 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's 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 matches the permissions set in Stream (Classic). Viewers won't be able to download files.
  • User B sees 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 matches the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If a video is Teams meeting recordings, it's 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 matches the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If the video is a Teams meeting recordings, it's 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's 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 matches the permissions set in Stream (Classic). Viewers won't be able to download files.
  • If a video is Teams meeting recordings, it's 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's 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's 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(Classic) only syncs Microsoft 365 Groups from Teams and SharePoint and not the channels created under the groups. Any channel-based meeting in such groups won't have that channel available in Stream (Classic) and 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. As a result of this, such videos are migrated under the User container not following the rule mentioned above.

Channel not present case.

  1. For old meeting recording due to legacy Teams bug, if a meeting recording associated with a Group was uploaded, Teams flattened the group membership and assigned its members individual permissions. In these cases, the file will be associated with its creator's User container and will go to their ODB. You see members individually added to the recordings in permissions UI 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 one 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 continues 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

Currently, some embeds for migrated videos will play in line while others won't. Videos migrated in Microsoft 365 Groups will play inline, similar to how they worked before being migrated out of Stream (Classic). However, all other embeds will not 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 plays in OnePlayer from the migrated location in a new browser window.

Video embed in Teams.

Video embed in SharePoint.

We are working on allowing all embeds to redirect and play inline soon. See the migration tool release notes for more info on when this is coming.

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 provides a link to the migrated channel’s videos folder (see screenshot below). The View channel button takes 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