Zelf studie: live streamen met Media ServicesTutorial: Stream live with Media Services

Notitie

Hoewel in de zelf studie .NET SDK -voor beelden worden gebruikt, zijn de algemene stappen hetzelfde voor rest API, cliof andere ondersteunde sdk's.Even though the tutorial uses .NET SDK examples, the general steps are the same for REST API, CLI, or other supported SDKs.

In Azure Media Services zijn livegebeurtenissen verantwoordelijk voor het verwerken inhoud voor live streamen.In Azure Media Services, Live Events are responsible for processing live streaming content. Een livegebeurtenis biedt een invoereindpunt (de URL voor opnemen) dat u vervolgens doorgeeft aan een live-encoder.A Live Event provides an input endpoint (ingest URL) that you then provide to a live encoder. De livegebeurtenis ontvangt live-invoerstromen van de live-encoder en maakt deze beschikbaar voor streaming via een of meer streaming-eindpunten.The Live Event receives live input streams from the live encoder and makes it available for streaming through one or more Streaming Endpoints. Livegebeurtenissen bieden ook een preview-eindpunt (voorbeeld-URL) dat u kunt gebruiken om een voorbeeld van de stream te bekijken en deze te valideren voordat deze verder wordt verwerkt en geleverd.Live Events also provide a preview endpoint (preview URL) that you use to preview and validate your stream before further processing and delivery. In deze zelfstudie ziet u hoe u .NET Core gebruikt om een pass-through-type van een live-gebeurtenis te maken.This tutorial shows how to use .NET Core to create a pass-through type of a live event.

In deze zelfstudie leert u het volgende:The tutorial shows you how to:

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.If you don't have an Azure subscription, create a free account before you begin.

VereistenPrerequisites

Hieronder wordt aangegeven wat de vereisten zijn om de zelfstudie te voltooien:The following items are required to complete the tutorial:

  • Installeer Visual Studio Code of Visual Studio.Install Visual Studio Code or Visual Studio.
  • Een Azure Media Services-account maken.Create a Media Services account.
    Zorg ervoor dat u de waarden die u gebruikt voor de naam van de resource groep en de naam van de Media Services account onthouden.Make sure to remember the values you use for the resource group name and Media Services account name.
  • Volg de stappen in Access Azure Media Services API with the Azure CLI (Toegang tot de Azure Media Services-API met de Azure CLI) en sla de referenties op.Follow the steps in Access Azure Media Services API with the Azure CLI and save the credentials. U moet deze gebruiken om toegang te krijgen tot de API.You'll need to use them to access the API.
  • Een camera of een apparaat (zoals een laptop) dat wordt gebruikt om een gebeurtenis te verzenden.A camera or a device (like a laptop) that's used to broadcast an event.
  • Een on-premises live-encoder die signalen van de camera converteert naar stromen die naar een Media Service-service voor live streamen worden verzonden.An on-premises live encoder that converts signals from the camera to streams that are sent to the Media Services live streaming service. De stroom moet de RTMP- of Smooth Streaming-indeling hebben.The stream has to be in RTMP or Smooth Streaming format.

Tip

Zorg dat u Live streamen met Media Services v3 hebt gelezen voordat u verder gaat.Make sure to review Live streaming with Media Services v3 before proceeding.

Het voorbeeld downloaden en configurerenDownload and configure the sample

Gebruik de volgende opdracht om een GitHub-opslagplaats te klonen op uw computer die het .NET-voorbeeld voor het streamen van video bevat:Clone a GitHub repository that contains the streaming .NET sample to your machine using the following command:

git clone https://github.com/Azure-Samples/media-services-v3-dotnet-core-tutorials.git

Het voorbeeld voor live streamen staat in de map Live.The live streaming sample is located in the Live folder.

Open appSettings. json in het gedownloade project.Open appsettings.json in your downloaded project. Vervang de waarden door de referenties die u hebt gekregen van toegang tot api's.Replace the values with the credentials you got from accessing APIs.

Belangrijk

In dit voor beeld wordt een uniek achtervoegsel gebruikt voor elke resource.This sample uses a unique suffix for each resource. Als u de fout opsporing annuleert of de app afsluit zonder deze uit te voeren, worden er meerdere Live gebeurtenissen in uw account opgevolgd.If you cancel the debugging or terminate the app without running it through, you'll end up with multiple Live Events in your account.
Zorg dat u de actieve livegebeurtenissen stopt.Make sure to stop the running Live Events. Anders wordt u gefactureerd.Otherwise, you'll be billed!

De code bestuderen die live streamen uitvoertExamine the code that performs live streaming

In dit gedeelte worden de functies bekeken die zijn gedefinieerd in het bestand Program.cs van het project MediaV3LiveApp.This section examines functions defined in the Program.cs file of the MediaV3LiveApp project.

Het voor beeld maakt een uniek achtervoegsel voor elke resource, zodat u geen naam conflicten meer hebt als u het voor beeld meerdere keren uitvoert zonder op te schonen.The sample creates a unique suffix for each resource so that you don't have name collisions if you run the sample multiple times without cleaning up.

Belangrijk

In dit voor beeld wordt een uniek achtervoegsel gebruikt voor elke resource.This sample uses a unique suffix for each resource. Als u de fout opsporing annuleert of de app afsluit zonder deze uit te voeren, worden er meerdere Live gebeurtenissen in uw account opgevolgd.If you cancel the debugging or terminate the app without running it through, you'll end up with multiple Live Events in your account.
Zorg dat u de actieve livegebeurtenissen stopt.Make sure to stop the running Live Events. Anders wordt u gefactureerd.Otherwise, you'll be billed!

Starten met het gebruik van Media Services API's met .NET SDKStart using Media Services APIs with .NET SDK

Als u wilt starten met Media Services API's met .NET, moet u een AzureMediaServicesClient-object maken.To start using Media Services APIs with .NET, you need to create an AzureMediaServicesClient object. Als u het object wilt maken, moet u referenties opgeven die de client nodig heeft om verbinding te maken met Azure met behulp van Microsoft Azure Active Directory.To create the object, you need to supply credentials needed for the client to connect to Azure using Azure AD. In de code die u aan het begin van het artikel hebt gekloond, wordt met de functie GetCredentialsAsync het object ServiceClientCredentials gemaakt op basis van de referenties die zijn opgegeven in het lokale configuratiebestand.In the code you cloned at the beginning of the article, the GetCredentialsAsync function creates the ServiceClientCredentials object based on the credentials supplied in local configuration file.

private static async Task<IAzureMediaServicesClient> CreateMediaServicesClientAsync(ConfigWrapper config)
{
    var credentials = await GetCredentialsAsync(config);

    return new AzureMediaServicesClient(config.ArmEndpoint, credentials)
    {
        SubscriptionId = config.SubscriptionId,
    };
}

Een livegebeurtenis makenCreate a live event

In deze sectie wordt beschreven hoe u een livegebeurtenis van het type pass-through maakt (LiveEventEncodingType ingesteld op None).This section shows how to create a pass-through type of Live Event (LiveEventEncodingType set to None). Zie Live Event types(Engelstalig) voor meer informatie over de beschik bare typen Live-gebeurtenissen.For more information about the available types of Live Events, see Live Event types.

U kunt bijvoorbeeld de volgende zaken opgeven wanneer u de live-gebeurtenis wilt maken:Some things that you might want to specify when creating the live event are:

  • Media Services locatie.Media Services location.
  • Het streaming-protocol voor de livegebeurtenis (momenteel worden de protocollen RTMP en Smooth Streaming ondersteund).The streaming protocol for the Live Event (currently, the RTMP and Smooth Streaming protocols are supported).
    U kunt de protocol optie niet wijzigen terwijl de live-gebeurtenis of de eraan gekoppelde actieve uitvoer bewerkingen worden uitgevoerd.You can't change the protocol option while the Live Event or its associated Live Outputs are running. Als u verschillende protocollen nodig hebt, maakt u afzonderlijke Live-gebeurtenissen voor elk streaming-protocol.If you require different protocols, create separate Live Event for each streaming protocol.
  • IP-beperkingen voor de opname en voorbeeldweergave.IP restrictions on the ingest and preview. U kunt de IP-adressen definiëren die zijn toegestaan om een video van deze livegebeurtenis op te nemen.You can define the IP addresses that are allowed to ingest a video to this Live Event. Toegestane IP-adressen kunnen worden opgegeven als één IP-adres (bijvoorbeeld 10.0.0.1), een IP-adresbereik met een IP-adres en een CIDR-subnetmasker (bijvoorbeeld 10.0.0.1/22) of een IP-adresbereik met een IP-adres en een decimaal subnetmasker met punten (bijvoorbeeld , ' 10.0.0.1(255.255.252.0)').Allowed IP addresses can be specified as either a single IP address (for example '10.0.0.1'), an IP range using an IP address and a CIDR subnet mask (for example, '10.0.0.1/22'), or an IP range using an IP address and a dotted decimal subnet mask (for example, '10.0.0.1(255.255.252.0)').
    Als er geen IP-adressen zijn opgegeven en er geen regel definitie is, is er geen IP-adres toegestaan.If no IP addresses are specified and there's no rule definition, then no IP address will be allowed. Als u IP-adres(sen) wilt toestaan, maakt u een regel en stelt u 0.0.0.0/0 in.To allow any IP address, create a rule and set 0.0.0.0/0.
    De IP-adressen moeten een van de volgende indelingen hebben: IpV4-adres met vier getallen of CIDR-adres bereik.The IP addresses have to be in one of the following formats: IpV4 address with four numbers or CIDR address range.
  • Wanneer u de gebeurtenis maakt, kunt u opgeven dat deze automatisch moet worden gestart.When creating the event, you can specify to autostart it.
    Wanneer autostart is ingesteld op True, wordt de Live gebeurtenis gestart na het maken ervan.When autostart is set to true, the Live Event will be started after creation. Dit betekent dat de facturering begint zodra de live-gebeurtenis wordt gestart.That means the billing starts as soon as the Live Event starts running. U moet expliciet Stop aanroepen in de resource van de livegebeurtenis om verdere facturering stop te zetten.You must explicitly call Stop on the Live Event resource to halt further billing. Zie Live Event states and billing (Statussen en facturering voor livegebeurtenissen) voor meer informatie.For more information, see Live Event states and billing.
  • Stel de ' Vanity-modus in om een opname-URL voorspellend te maken.For an ingest URL to be predictive, set the "vanity" mode. Zie url's voor Live Event-opnamevoor gedetailleerde informatie.For detailed information, see Live Event ingest URLs.
Console.WriteLine($"Creating a live event named {liveEventName}");
Console.WriteLine();

// Note: When creating a LiveEvent, you can specify allowed IP addresses in one of the following formats:                 
//      IpV4 address with 4 numbers
//      CIDR address range

IPRange allAllowIPRange = new IPRange(
    name: "AllowAll",
    address: "0.0.0.0",
    subnetPrefixLength: 0
);

// Create the LiveEvent input IP access control.
LiveEventInputAccessControl liveEventInputAccess = new LiveEventInputAccessControl
{
    Ip = new IPAccessControl(
            allow: new IPRange[]
            {
                allAllowIPRange
            }
        )

};

// Create the LiveEvent Preview IP access control
LiveEventPreview liveEventPreview = new LiveEventPreview
{
    AccessControl = new LiveEventPreviewAccessControl(
        ip: new IPAccessControl(
            allow: new IPRange[]
            {
                allAllowIPRange
            }
        )
    )
};

// To get the same ingest URL for the same LiveEvent name:
// 1. Set vanityUrl to true so you have ingest like: 
//        rtmps://liveevent-hevc12-eventgridmediaservice-usw22.channel.media.azure.net:2935/live/522f9b27dd2d4b26aeb9ef8ab96c5c77           
// 2. Set accessToken to a desired GUID string (with or without hyphen)

LiveEvent liveEvent = new LiveEvent(
    location: mediaService.Location,
    description: "Sample LiveEvent for testing",
    vanityUrl: false,
    encoding: new LiveEventEncoding(
                // When encodingType is None, the service simply passes through the incoming video and audio layer(s) to the output
                // When the encodingType is set to Standard or Premium1080p, a live encoder is used to transcode the incoming stream
                // into multiple bit rates or layers. See https://go.microsoft.com/fwlink/?linkid=2095101 for more information
                encodingType: LiveEventEncodingType.None,
                presetName: null
            ),
    input: new LiveEventInput(LiveEventInputProtocol.RTMP, liveEventInputAccess),
    preview: liveEventPreview,
    streamOptions: new List<StreamOptionsFlag?>()
    {
        // Set this to Default or Low Latency
        // When using Low Latency mode, you must configure the Azure Media Player to use the 
        // quick start hueristic profile or you won't notice the change. 
        // In the AMP player client side JS options, set -  heuristicProfile: "Low Latency Heuristic Profile". 
        // To use low latency optimally, you should tune your encoder settings down to 1 second GOP size instead of 2 seconds.
        StreamOptionsFlag.LowLatency
    }
);

Console.WriteLine($"Creating the LiveEvent, be patient this can take time...");

// When autostart is set to true, the Live Event will be started after creation. 
// That means, the billing starts as soon as the Live Event starts running. 
// You must explicitly call Stop on the Live Event resource to halt further billing.
// The following operation can sometimes take awhile. Be patient.
liveEvent = await client.LiveEvents.CreateAsync(config.ResourceGroup, config.AccountName, liveEventName, liveEvent, autoStart: true);

URL’s voor opnemen ophalenGet ingest URLs

Zodra de live-gebeurtenis is gemaakt, kunt u opname-Url's ophalen die u aan de Live Encoder wilt leveren.Once the Live Event is created, you can get ingest URLs that you'll provide to the live encoder. Het coderingsprogramma gebruikt deze URL's voor het invoeren van een live stream.The encoder uses these URLs to input a live stream.

string ingestUrl = liveEvent.Input.Endpoints.First().Url;
Console.WriteLine($"The ingest url to configure the on premise encoder with is:");
Console.WriteLine($"\t{ingestUrl}");
Console.WriteLine();

De voorbeeld-URL ophalenGet the preview URL

Gebruik het previewEndpoint als u een voorbeeld wilt bekijken en wilt controleren of de invoer van de encoder daadwerkelijk wordt ontvangen.Use the previewEndpoint to preview and verify that the input from the encoder is actually being received.

Belangrijk

Zorg ervoor dat de video stroomt naar de Preview-URL voordat u doorgaat.Make sure that the video is flowing to the Preview URL before continuing.

string previewEndpoint = liveEvent.Preview.Endpoints.First().Url;
Console.WriteLine($"The preview url is:");
Console.WriteLine($"\t{previewEndpoint}");
Console.WriteLine();

Console.WriteLine($"Open the live preview in your browser and use the Azure Media Player to monitor the preview playback:");
Console.WriteLine($"\thttps://ampdemo.azureedge.net/?url={previewEndpoint}&heuristicprofile=lowlatency");
Console.WriteLine();

Livegebeurtenissen en live-uitvoer maken en beherenCreate and manage Live Events and Live Outputs

Wanneer de stream naar de livegebeurtenis stroomt, kunt u de streaming-gebeurtenis starten door een Asset, live-uitvoer en streaming-locator te maken.Once you have the stream flowing into the Live Event, you can begin the streaming event by creating an Asset, Live Output, and Streaming Locator. Hiermee wordt de stream gearchiveerd en beschikbaar gesteld aan kijkers via het streaming-eindpunt.This will archive the stream and make it available to viewers through the Streaming Endpoint.

Een Asset makenCreate an Asset

Maak een Asset die u met de live-uitvoer wilt gebruiken.Create an Asset for the Live Output to use.

Console.WriteLine($"Creating an asset named {assetName}");
Console.WriteLine();
Asset asset = await client.Assets.CreateOrUpdateAsync(config.ResourceGroup, config.AccountName, assetName, new Asset());

Een live-uitvoer makenCreate a Live Output

Live-uitvoer starten zodra ze zijn gemaakt en stoppen wanneer ze worden verwijderd.Live Outputs start on creation and stop when deleted. Wanneer u de live uitvoer verwijdert, worden de onderliggende activa en inhoud in de Asset niet verwijderd.When you delete the Live Output, you're not deleting the underlying Asset and content in the asset.

string manifestName = "output";
Console.WriteLine($"Creating a live output named {liveOutputName}");
Console.WriteLine();

LiveOutput liveOutput = new LiveOutput(assetName: asset.Name, manifestName: manifestName, archiveWindowLength: TimeSpan.FromMinutes(10));
liveOutput = await client.LiveOutputs.CreateAsync(config.ResourceGroup, config.AccountName, liveEventName, liveOutputName, liveOutput);

Een streaming-locator makenCreate a Streaming Locator

Notitie

Wanneer uw Media Services-account wordt gemaakt, wordt er een standaard streaming-eind punt aan uw account toegevoegd met de status gestopt .When your Media Services account is created, a default streaming endpoint is added to your account in the Stopped state. Als u inhoud wilt streamen en gebruik wilt maken van dynamische pakketten en dynamische versleuteling, moet het streaming-eindpunt van waar u inhoud wilt streamen, de status Wordt uitgevoerd hebben.To start streaming your content and take advantage of dynamic packaging and dynamic encryption, the streaming endpoint from which you want to stream content has to be in the Running state.

Als u de Asset van de live-uitvoer publiceert met een streaming-locator, blijft de livegebeurtenis (tot de maximale DVR-duur) zichtbaar tot de streaming-locator verloopt of wordt verwijderd (welke het eerst van toepassing is).When you publish the Live Output asset using a Streaming Locator, the Live Event (up to the DVR window length) will continue to be viewable until the Streaming Locator's expiry or deletion, whichever comes first.

Console.WriteLine($"Creating a streaming locator named {streamingLocatorName}");
Console.WriteLine();

StreamingLocator locator = new StreamingLocator(assetName: asset.Name, streamingPolicyName: PredefinedStreamingPolicy.ClearStreamingOnly);
locator = await client.StreamingLocators.CreateAsync(config.ResourceGroup, config.AccountName, streamingLocatorName, locator);

// Get the default Streaming Endpoint on the account
StreamingEndpoint streamingEndpoint = await client.StreamingEndpoints.GetAsync(config.ResourceGroup, config.AccountName, streamingEndpointName);

// If it's not running, Start it. 
if (streamingEndpoint.ResourceState != StreamingEndpointResourceState.Running)
{
    Console.WriteLine("Streaming Endpoint was Stopped, restarting now..");
    await client.StreamingEndpoints.StartAsync (config.ResourceGroup, config.AccountName, streamingEndpointName);
}

// Get the url to stream the output
ListPathsResponse paths = await client.StreamingLocators.ListPathsAsync(resourceGroupName, accountName, locatorName);

foreach (StreamingPath path in paths.StreamingPaths)
{
    UriBuilder uriBuilder = new UriBuilder();
    uriBuilder.Scheme = "https";
    uriBuilder.Host = streamingEndpoint.HostName;

    uriBuilder.Path = path.Paths[0];
    // Get the URL from the uriBuilder: uriBuilder.ToString()
}

Resources in uw Media Services-account opschonenCleaning up resources in your Media Services account

Als u klaar bent met het streamen van gebeurtenissen en wilt opschonen van de resources die u eerder hebt ingericht, volgt u de volgende procedure:If you're done streaming events and want to clean up the resources provisioned earlier, follow the following procedure:

  • Stop het pushen van de stream vanuit het coderingsprogramma.Stop pushing the stream from the encoder.
  • Stop de livegebeurtenis.Stop the Live Event. Zodra de live-gebeurtenis is gestopt, worden er geen kosten in rekening gebracht.Once the Live Event is stopped, it won't incur any charges. Als u het kanaal opnieuw wilt starten, wordt dezelfde URL voor opnemen gebruikt, zodat u het coderingsprogramma niet opnieuw hoeft te configureren.When you need to start it again, it will have the same ingest URL so you won't need to reconfigure your encoder.
  • U kunt uw streaming-eindpunt stoppen, tenzij u het archief van uw live gebeurtenis wilt blijven leveren als stream op aanvraag.You can stop your Streaming Endpoint, unless you want to continue to provide the archive of your live event as an on-demand stream. Als de live-gebeurtenis is gestopt, worden er geen kosten in rekening gebracht.If the Live Event is in a stopped state, it won't incur any charges.
private static async Task CleanupLiveEventAndOutputAsync(IAzureMediaServicesClient client, string resourceGroup, string accountName, string liveEventName)
{
    try
    {
        LiveEvent liveEvent = await client.LiveEvents.GetAsync(resourceGroup, accountName, liveEventName);

        if (liveEvent != null)
        {
            if (liveEvent.ResourceState == LiveEventResourceState.Running)
            {
                // If the LiveEvent is running, stop it and have it remove any LiveOutputs
                await client.LiveEvents.StopAsync(resourceGroup, accountName, liveEventName, removeOutputsOnStop: true);
            }

            // Delete the LiveEvent
            await client.LiveEvents.DeleteAsync(resourceGroup, accountName, liveEventName);
        }
    }
    catch (ApiErrorException e)
    {
        Console.WriteLine("CleanupLiveEventAndOutputAsync -- Hit ApiErrorException");
        Console.WriteLine($"\tCode: {e.Body.Error.Code}");
        Console.WriteLine($"\tCode: {e.Body.Error.Message}");
        Console.WriteLine();
    }
}
private static async Task CleanupLocatorandAssetAsync(IAzureMediaServicesClient client, string resourceGroup, string accountName, string streamingLocatorName, string assetName)
{
    try
    {
        // Delete the Streaming Locator
        await client.StreamingLocators.DeleteAsync(resourceGroup, accountName, streamingLocatorName);

        // Delete the Archive Asset
        await client.Assets.DeleteAsync(resourceGroup, accountName, assetName);
    }
    catch (ApiErrorException e)
    {
        Console.WriteLine("CleanupLocatorandAssetAsync -- Hit ApiErrorException");
        Console.WriteLine($"\tCode: {e.Body.Error.Code}");
        Console.WriteLine($"\tCode: {e.Body.Error.Message}");
        Console.WriteLine();
    }
}

De gebeurtenis bekijkenWatch the event

Als u de gebeurtenis wilt bekijken, kopieert u de streaming-URL die u hebt ontvangen tijdens het uitvoeren van de code die wordt beschreven in een streaming-Locator maken.To watch the event, copy the streaming URL that you got when you ran code described in Create a Streaming Locator. U kunt een media speler van uw keuze gebruiken.You can use a media player of your choice. Azure Media Player is beschikbaar om uw stream te testen op https://ampdemo.azureedge.net.Azure Media Player is available to test your stream at https://ampdemo.azureedge.net.

De livegebeurtenis wordt automatisch geconverteerd naar inhoud op aanvraag wanneer deze wordt gestopt.Live Event automatically converts events to on-demand content when stopped. Zelfs nadat u het evenement hebt gestopt en verwijderd, kunnen gebruikers de gearchiveerde inhoud als een video op aanvraag streamen, mits u de Asset niet verwijdert.Even after you stop and delete the event, users can stream your archived content as a video on demand for as long as you don't delete the asset. Een Asset kan niet worden verwijderd als deze wordt gebruikt door een gebeurtenis; de gebeurtenis moet eerst worden verwijderd.An asset can't be deleted if it's used by an event; the event must be deleted first.

Resources opschonenClean up resources

Als u de resources van de resourcegroep niet meer nodig hebt, met inbegrip van de Media Services en opslagaccounts die u hebt gemaakt voor deze zelfstudie, verwijdert u de resourcegroep die u eerder hebt gemaakt.If you no longer need any of the resources in your resource group, including the Media Services and storage accounts you created for this tutorial, delete the resource group you created earlier.

Voer de volgende CLI-opdracht uit:Execute the following CLI command:

az group delete --name amsResourceGroup

Belangrijk

Zolang de livegebeurtenis loopt, worden er kosten in rekening gebracht.Leaving the Live Event running incurs billing costs. Als het project/programma vastloopt of om welke reden dan ook wordt afgesloten, is het mogelijk dat de livegebeurtenis in een factureringsstaat staat.Be aware, if the project/program crashes or is closed out for any reason, it could leave the Live Event running in a billing state.

Vragen stellen, feedback geven, updates ophalenAsk questions, give feedback, get updates

Bekijk het Azure Media Services Community -artikel voor verschillende manieren om vragen te stellen, feedback te geven en updates te ontvangen over Media Services.Check out the Azure Media Services community article to see different ways you can ask questions, give feedback, and get updates about Media Services.

Volgende stappenNext steps

Bestanden streamenStream files