Partager via


Cet article a fait l'objet d'une traduction automatique.

Microsoft Azure

Microsoft Azure Media Services

Gregory Prentice

Télécharger l'exemple de code

Au cours des années, Microsoft a aidé conception et le soutien à grande échelle, vivre en streaming vidéo livraison. Un exemple est les Jeux olympiques de Sochi 2014. Ce besoin d'une quantité énorme de ressources technologiques, y compris les serveurs de matériel, flux vidéo source, codage, redondance de serveur (centres de données double), flux vidéo sortie adaptative, Content Delivery Networks (CDNs), partenaire des entreprises et, bien sûr, le personnel de Microsoft.

Toutes ces ressources, ainsi que de développement de logiciels client — sont nécessaires pour s'assurer que l'événement en vidéo direct-to-end est exécutée avec des incidents peu ou pas. Le coût de l'orchestration de ces ressources est le reflet de l'ampleur de l'événement en direct streaming. Il y a une forte dépense en capital engagée pour acheter des serveurs requis, commutateurs et des technologies connexes. Cela conduit à des risques évidents et les questions suivantes :

  • Assez ou trop de matériel a été acheté pour gérer l'ampleur de l'événement en direct ?
  • Que faites-vous avec ledit matériel jusqu'au prochain événement ?
  • Combien de temps la technologie acquise sera toujours pertinente ?
  • Étaient les partenaires technologie correct inclus pour s'assurer que l'événement est parfaitement orchestrée ?

Compte tenu de Microsoft implication, connaissances et succès dans les événements en direct vidéo, l'équipe Azure de Microsoft Media Services développé en direct afin d'atténuer ces risques. L'équipe écoutés avec succès des aliments vivants de vidéo mondiales des Jeux olympiques Sotchi 2014, en cours d'exécution sur Microsoft Azure Media Services. Alors que c'était un événement extrêmement grand, Microsoft Azure fournit sur demande matériel d'évolutivité de l'adresse.

Selon la taille de l'événement en direct vidéo, une demande aux Services de médias d'Azur peut créer une unité d'échelle — petites, moyennes ou grandes — de fournir le streaming vidéo en direct à des centaines de milliers ou juste des centaines de spectateurs. La tarification permet de modèles par répartition afin de procurer, d'utiliser et de libérer le service de streaming live, fournir que les coûts sont connus avant un événement. Le matériel et l'infrastructure sont continuellement mis à jour et actualisées. Microsoft maintient également des relations stratégiques qui se rapportent à des solutions de streaming en direct.

Dans cet article, je vais me concentrer sur un exemple de scénario qui utilisera les nouvelles en direct streaming de l'équipe Microsoft Azure Media Services (actuellement en avant-première privée), lutter contre les risques susmentionnés et discuter de la relation de l'offre de streaming en direct à l'actuel service de vidéo sur demande (VSD).

Concepts et terminologie

Il est important de comprendre certains concepts généraux et terminologie concernant les Services de médias d'Azur. Le terme « canal » fait référence à la vue du développeur sur le chemin d'accès complet à bout que l'on prend de flux vidéo en direct par le biais de Services de médias d'Azur. Un canal peut être dans différents États, avec les deux plus importants étant « arrêté » et « exécution ». Un canal comprend les composants suivants qui coordonnent les flux vidéo via le système :

  • Ingérer URI : Représente un point d'entrée au cours de laquelle le canal reçoit un ou plusieurs flux de vidéo bitrate pour la livraison.
  • Aperçu URI : Représente un point de sortie du flux direct reçue par le canal, qui ne devrait servir qu'aux fins de surveillance.
  • Programme : Associé à un canal et représente qu'une partie du flux direct rendues persistantes dans le stockage Blob comme un atout. Au moins un programme doit être créé sur un canal et en cours d'exécution pour permettre un flux vidéo en direct. Le programme sera activement capturer la vidéo alors qu'il est en cours d'exécution.
  • Atout : Associé à un programme, cela représente les données stockées dans le stockage Blob. Un actif peut contenir un ou plusieurs fichiers, y compris la vidéo, audio, images, collections de miniatures et manifeste. L'actif peut toujours exister même après la suppression d'un programme.
  • Localisation : Associé à l'actif et d'une origine. Un localisateur fournit un URI utilisé comme point de sortie du flux de programme en direct.
  • Origine : Associé à une adresse Web, cela représente le point de sortie évolutive pour la livraison des flux vidéo de localisateur d'un actif URI en multiples formats bitrate (MBR), lisse, HTTP Live Streaming (HLS) et Dynamic Adaptive Streaming via HTTP.

Azur Media Services assure une redondance adéquate est créée et disponible pour la livraison fiable de la vidéo à l'échelle. Cette prestation pourrait impliquer de nombreux appareils qui consomment variant les formats en continu, lisse, HLS et DASH. Figure 1 montre ce qui constitue un canal.

Canal de livraison est le chemin d'accès complet au bout d'un flux vidéo en direct
Figure 1 canal de livraison est le chemin d'accès complet au bout d'un flux vidéo en direct

Il est important de comprendre la relation entre un canal et un ou plusieurs programmes créés au sein de la chaîne. Dans Figure 2, un événement vidéo en direct a été mappé sur une représentation de chaîne qui est en cours d'exécution de 17 jusqu'au 02 Il est important de noter la que date de transition de la chaîne d'un État arrêté à l'état d'exécution peut nécessiter de 10 à 20 minutes. Les marqueurs d'intervalle — Concert1, Vip1, Act1, Act2 et Vip2 — représentent les programmes et leur ouverture prévue et temps d'arrêt. Enfin, les marqueurs d'intervalle nommés Transition représentent le temps entre le programme actuel et le prochain programme, où on est arrêté et l'autre est démarré.

événement vidéo Live mappé au début à 17 et se terminera à 02
Figure 2 événement vidéo Live mappé au début à 17 et se terminera à 02

Il s'agit d'un exemple de comment une chronologie peut mapper sur un canal à l'aide de programmes. Au sens de Figure 2, il existe un programme qui s'étend sur l'ensemble de l'événement.

Concert1 sera en cours d'exécution à partir de 17:15 jusqu'au 02, avec un tampon vidéo coulissant de 10 minutes. La mise en mémoire tampon permet aux utilisateurs de revenir en arrière tout en regardant avec un lecteur multimédia. Le programme de Concert1 fournit le principal flux vidéo en direct de la manifestation. Le CDN est équipés d'URI pour la cartographie avant l'événement.

Les programmes restants — Vip1, Act1, Act2 et Vip2 — doit être en cours d'exécution lors de la définition, démarrer et arrêter des fois, avec un écart permis pour les transitions. Un programme ne démarrer ou arrêter immédiatement. Vous devez tenir compte des transitions lorsque vous planifiez un événement en direct. Vous pouvez avoir plusieurs programmes en cours d'exécution en même temps, toutes les vidéos de capture. Concert1 et un autre programme vont démarrer et arrêter au cours de l'événement. Pour montrer comment vous pouvez utiliser une transition, vous pourriez émettre une demande de démarrage de programme pour Vip2 à 18:45, puis une programme requête d'arrêt pour Vip1 à 19, offrant une période de transition de 15 minutes. Par conséquent, au cours de cette transition de 15 minutes, il y aurait trois programmes en cours d'exécution.

Après avoir décrit la terminologie et les concepts généraux, je vais me concentrer sur l'utilisation de la chronologie d'événements illustrée dans Figure 2, mappé sur un scénario utilisateur pour développer des exemples de codage à l'aide de l'API de Services de médias d'Azur.

Le thème : Bar Blues de contoso

Un américain bien connu lieu de rendez-vous pour les musiciens prometteurs, Bar Blues de Contoso dispose d'un délai serré de coordonner un concert live à venir pour un grand groupe européen appelé Contoso et les portefeuilles de choc. Base de fans de la bande est en grande partie en Europe. Le spectacle de contoso sera U.S. du groupe débuts. Par conséquent, les gestionnaires de voir la doivent flux le concert live européen base de fans du groupe peut regarder sur ordinateurs et appareils mobiles.

Blues Bar du CIO de Contoso convoque une réunion et demande à son équipe de la technologie de recherche et de recommander une solution qui satisfasse aux conditions suivantes :

  • Il doit être facile à mettre en œuvre.
  • Elle doit diffuser de la vidéo à un grand nombre de configurations de périphérique différent.
  • Il doit satisfaire les besoins d'évolutivité inconnue.
  • Le coût est basé sur ce qui est utilisé lors de l'événement, par répartition.

Un sprint

Équipe de planification de la Contoso Bar Blues événement passe les prochains jours définissant leurs récits de l'utilisateur. Ces récits utilisateur sera la base pour sprint l'intention de livrer le streaming vidéo de leur concert. Au cours de la réunion, l'équipe définit certaines lacunes dans les connaissances qui forceront un certain nombre d'épis — ou questions exigeant la résolution — au cours du sprint un. L'équipe définit également la liste suivante des grandes histoires utilisateur, généralement dénommé épopées, dans la norme "comme un... Je veux... pour que... "format :

En tant que fan de Contoso et les portefeuilles de choc, je veux regarder le concert en direct sur mon appareil, la meilleure qualité vidéo possible afin que je peux profiter de leur U.S. débuts.

En tant que fan de Contoso et les portefeuilles de choc, je veux regarder une vidéo du concert sur mon appareil, la meilleure qualité vidéo possible à une date et une heure ultérieures afin que je peux regarder l'événement à mon aise.

En tant que représentant de Bar Blues d'un Contoso, je veux offrir une diffusion en direct de nos concerts et réduire la charge de fournir des flux vidéo en direct de notre lieu de rendez-vous afin que nous pouvons attirer plus de clients et de musiciens tout en économisant de l'argent.

Les récits utilisateur et enquêtes spike associées incluent :

Récit 1.1 de l'utilisateur : Comme un membre du personnel de production événement, je veux une ou plusieurs caméras, afin que nous pouvons saisir le concert en direct.

Spike 1.1.1 : Quel type de caméra utilisé et quel est le flux de sortie vidéo ?

Le personnel de production apprend qu'elles puissent acheter des caméras vidéo usagés de qualité pour produire un flux de données audio/vidéo haute définition (HD) sur une Interface numérique série (SDI).

Récit 1,2 de l'utilisateur : Comme un membre du personnel de production événement, je veux de flux vidéo en direct à l'Internet afin que les fans peuvent regarder un concert.

Spike 1.2.1 : Comment le flux vidéo de la caméra sera livré à la station de production ?

Le personnel de production apprend que contoso commutateur entreprise produit un commutateur vidéo HD SDI-à-fibre-optique. Ils peuvent utiliser ce commutateur avec jusqu'à quatre caméras.

Spike 1.2.2 : Comment est livré ce flux vidéo pour la DSI ?

Le personnel de production apprend que le commutateur vidéo fibre optique va afficher un flux de données audio/video HD SDI qu'ils peuvent se connecter à un mélangeur audio/vidéo. Ils peuvent alors contrôler quel signal de la caméra est active via un panneau de diffusion. Le flux vidéo en direct est finalement envoyé depuis le panneau de diffusion par une connexion HD SDI.

Récit 1,3 de l'utilisateur : Comme un membre du personnel de la TI, je veux livrer le flux vidéo pour Windows, iOS et périphériques Android donc le concert vidéo a le matériel maximum prennent en charge.

Spike 1.3.1 : Quel type de flux vidéo je reçois afin de diffuser des vidéos sur Internet ?

Le flux vidéo HD SDI sera envoyé à la direction informatique.

Spike 1.3.2 : Quel type de flux vidéo sont nécessaires pour les périphériques cibles ?

Le personnel informatique détecte qu'ils peuvent utiliser les protocoles suivants de vidéo adaptatives pour diffuser de la vidéo pour chacun des périphériques cibles :

  • Diffusion en continu lisse : Windows 8 et Windows Phone 8
  • HLS : iOS et Android
  • TABLEAU DE BORD : 8.1 de Windows, Windows Phone 8 et Xbox 1

Spike 1.3.3 : Comment j'ai prononce cette vidéo à l'Internet de façon évolutive ?

Le personnel informatique apprend que Microsoft a annoncé une nouvelle fonctionnalité sur Azure qui porte spécifiquement sur vidéo en direct streaming sur Internet. Avec quelques recherches, l'équipe Découvre Qu'azure Media Services peut fournir la couche intermédiaire entre leur lieu de rendez-vous et les dispositifs ciblés. Plus important, ils apprennent les remarques suivantes au sujet d'Azur Media Services :

  • Une fois que vous avez signé pour un compte Azure et ajoutez un compte de médias, vous pouvez créer un canal de diffusion en continu live. Un canal direct est synonyme d'une chaîne de télévision. Toutes les ressources de serveur alloués sont dédiés à ce canal pour l'exécution de vos programmes. Un canal peut avoir beaucoup de programmes. Un programme est la définition d'un créneau horaire et des actifs connexes. Un actif est un emplacement de stockage de la vidéo en flux continu dans Azure Media Services.
  • L'attribution de serveur assure la redondance est intégré dans le chemin d'accès vidéo avec aucun point de défaillance unique.
  • Un flux vidéo en direct peut être reçu comme RTMP ou MPEG TS par Azure Media Services via un ingest URI.
  • Dispositifs peuvent demander un flux vidéo pris en charge en mode natif. Azure de Microsoft Media Services assurera que la vidéo est emballée dans la base de format approprié sur un URI spécifique au périphérique.
  • Soutien est intégré dans les serveurs d'origine streaming live pour un accès sécurisé par un fournisseur CDN, par Akamai Technologies.

Résultats supplémentaires d'enrichissement 1.3.1 et 1.3.2 : Le personnel informatique choisit un encodeur, qui peut recevoir un flux de données audio/video HD SDI. Cet encodeur peut utiliser les flux HD SDI pour générer dynamiquement plusieurs flux de bitrate pour livraison aux Services de médias d'Azure, qui fournit une voie URI qui accepte le protocole RTMP ou MPEG TS comme format d'entrée.

Sprint deux

Après leurs rituels café matinal, les développeurs commencent à développement de code qui facilitera l'événement en direct streaming.

Récit 1.4.1 de l'utilisateur : En tant que développeur, je veux créer les comptes d'Azur appropriées afin que je peux commencer à écrire du code pour diffuser des vidéos.

Allez sur le site Web d'Azure (azure.microsoft.com), cliquez sur l'essayer gratuitement et suivez les étapes. En savoir plus sur la configuration d'un compte chez bit.ly/1mfacft. Au cours de la procédure d'inscription, vous pouvez créer un compte Windows qui est utilisé comme les informations d'identification d'administrateur. Pour créer un compte de Services de médias d'Azur, vous devez d'abord créer un compte d'Azure Storage, comme les actifs vidéo pour un événement en direct seront stockés dans le stockage Blob. La documentation d'Azur Media Services recommande aussi que vous créez le compte de stockage dans le même centre de données d'où vous procurer le compte Azure Media Services. Par exemple, créer un compte de stockage et le compte de médias dans le datacenter de l'ouest des États-Unis.

Récit utilisateur 1.4.2 : En tant que développeur, je tiens à écrire du code pour gérer une chaîne de sorte que je peux offrir un événement en direct streaming.

Créez un projet de base à l'aide de Visual Studio 2012. Ensuite, installez les packages NuGet pour les Services de médias d'Azure. Créer une fonction nommée CreateContosLiveEvent et démarrer avec un objet CloudMediaContext, qui est toujours utilisé pour gérer vos flux en direct :

private void CreateContosLiveEvent()
{
  string liveAccount = "yourAzureMediaAccount";
  string liveKey = "yourAzureMediaAccountKey";
  CloudMediaContext LiveServices = new CloudMediaContext(
    liveAccount,  // URI created earlier
    liveKey );    // Account name

Écrire le code pour assurer un service d'origine est en cours d'exécution. Le service d'origine livrera les flux live aux fournisseurs canadiens, comme le montre Figure 3.

Figure 3 un Service d'origine fournit des flux vidéo en direct pour les fournisseurs de réseaux de diffusion de contenu

string originName = "abcdefg";
IOrigin origin = LiveServices.FindOrigin(originName);
if (origin == null)
{
  Task<IOrigin> originTask = 
    LiveServices.Origins.CreateAsync(originName, 2);
  originTask.Wait();
  origin = originTask.Result;
}
if (origin.State == OriginState.Stopped)
{
  origin.StartAsync().Wait();
}

Puis vous devez écrire le code pour créer un canal (montré dans Figure 4). Un canal nécessite de sécurité configurée pour autoriser l'authentification de la source de flux vidéo entrant. La source est en général un encodeur IP configurées qui convertit un signal SDI HDI dans les flux vidéo requis de MBR.

Figure 4 création d'un canal pour votre flux vidéo

string channelName = "ContsoBluesChannel";
IChannel channel = LiveServices.FindChannel(channelName);
if (channel != null)
{
  Debug.WriteLine("Channel already exists!");
  return;
}
ChannelSettings settings = new ChannelSettings();
Ipv4 ipv4 = new Ipv4();
// Currently setting IP to 0.0.0.0/0 allows all connections
//  Don't do this for production events
ipv4.IP = "0.0.0.0/0";
ipv4.Name = "Allow all connections";
// Protect the ingest URI
settings.Ingest = new IngestEndpointSettings();
settings.Ingest.Security = new SecuritySettings();
settings.Ingest.Security.IPv4AllowList = new List<Ipv4>();
settings.Ingest.Security.IPv4AllowList.Add(ipv4);
// Protect the preview URI
settings.Preview = new PreviewEndpointSettings();
settings.Preview.Security = new SecuritySettings();
settings.Preview.Security.IPv4AllowList = new List<Ipv4>();
settings.Preview.Security.IPv4AllowList.Add(ipv4);
// Create the channel
Task<IChannel> taskChannel = LiveServices.Channels.CreateAsync(
  channelName, "video streaming", ChannelSize.Large, settings);
taskChannel.Wait();
channel = taskChannel. Result;

L'exemple de code configure ingèrent et aperçu URIs avec un Inter-Domain Routing (CIDR Classless) au format d'adresse IP définie sur « 0.0.0.0/0. » Cela permet tous les accès d'adresses IP à l'ingérer et aperçu URIs. Pour les chaînes de production, il est recommandé que vous restreigniez l'accès à l'aide de valeurs connues telles que l'adresse IP de votre codeurs ou des jetons d'authentification. Utilisez un nom de canal unique. Il y aura une exception levée s'il existe déjà un canal avec le même nom.

Écrivez le code qui crée les programmes, les associés actifs et les localisateurs, comme le montre Figure 5. Les valeurs utilisées pour les noms et les échéanciers correspondent aux valeurs présentées dans Figure 2. L'indicateur enableArchive est défini sur true lors de la création du programme pour tout sauf Concert1. Une valeur true indique un flux vidéo en direct est capturé au cours de l'état d'exécution du programme et restes a persisté avec l'associé actif pour une consommation ultérieure en VOD. Le positionneur avec une stratégie d'accès de 30 jours est créé pour le fichier de manifeste de l'actif. Ceci fournit un URI pour le streaming vidéo.

Figure 5 créer les programmes qui Will exécutés pendant votre flux

// Define the program name, DVR window and estimated duration in minutes.
// NOTE: DVR window value most likely will be removed when service 
// reaches public preview.
Tuple<string, int, int>[] programSettings = new Tuple<string, int, int>[]
{
  new Tuple<string,int,int>( "Concert1", 60, 60 ),
  new Tuple<string,int,int>( "Vip1", 75, 75 ),
  new Tuple<string,int,int>( "Act1", 90, 90 ),
  new Tuple<string,int,int>( "Act2", 165, 165 ),
  new Tuple<string,int,int>( "Vip2", 120, 120 ),
};
foreach (Tuple<string, int, int> programSetting in programSettings)
{
  IAsset asset = null;
  // To persist specific program's asset for Video on Demand (VOD) this
  // code tests if the DVR window and Event duration equal in length.
  // If true it sets the enable archive flag to true, which tells the
  // system a program's asset should not be deleted automatically.
  bool enableArchive = programSetting.Item2 == programSetting.Item3;
  try
  {
    // Create the asset that is used to persist the video streamed
    // while the program is running and VOD.
    asset = LiveServices.Assets.Create(programSetting.Item1 + "_asset",
      AssetCreationOptions.None);
    Task<IProgram> taskProgram = channel.Programs.CreateAsync(
      programSetting.Item1,
      "program description",
      // Enable archive note forcing to true for now
      true, // enableArchive,
    // NOTE: DVR window value most likely will be removed
    // This is not used
    TimeSpan.FromMinutes(programSetting.Item2),
    // Estimated duration time
    TimeSpan.FromMinutes(programSetting.Item3),
      asset.Id);
    taskProgram.Wait();
    LiveServices.CreateLocators(asset, TimeSpan.FromDays(30));
  }
  catch (Exception exp)
  {
    Debug.WriteLine(exp.Message);
  }
}

Vous pouvez obtenir un URI d'origine d'un repère, comme avec un actif d'Azur Media Services VOD. Vous cela fournirait ensuite au fournisseur de CDN de choix. Parce que l'indicateur d'enableArchive a été défini, une fois qu'un programme a été arrêté, vous pouvez utiliser la même origine URI pour livrer le flux live comme un atout de la VOD.

La tâche restante consiste à écrire le code pour démarrer un canal et les programmes lorsque nécessaire. La demande pour commencer une chaîne de signaux Azure Media Services pour commencer à allouer des ressources pour les services de pénétration, la redondance et l'équilibrage de la charge. Lorsqu'un canal commence, le délai entre le démarrage et l'exécution des États peut prendre 10 à 20 minutes.

Vous devriez commencer la chaîne suffisamment tôt avant l'événement afin de ne pas interférer avec la possibilité de visualiser le flux vidéo en direct. Il est également important de noter que, une fois que votre chaîne est diffusée, les frais de facturation commencent à s'accumuler. Si vous ne prévoyez pas sur un canal en direct 7j / 7 en cours d'exécution, vous devriez arrêter le canal et les programmes connexes lorsqu'ils ne sont pas utilisés. Le code requis pour démarrer un canal est assez simple :

// Start channel
Task start = channel.StartAsync();
start.Wait();

Le code que vous avez besoin pour démarrer le programme est aussi simple :

start = program.StartAsync();
start.Wait();

Une exigence principale pour l'événement est la capacité de contrôler lorsque le canal et chaque programme Démarrer et arrêter. Par conséquent, l'ordre du jour pour le développement est une interface utilisateur simple qui permettra de créer l'événement dans son intégralité en appelant la méthode CreateContosLiveEvent. Cela permet de lancer et arrêter le canal et chaque programme correspondant au besoin.

Pour clore le scénario, que vous avez développé l'application à l'aide de Services de médias d'Azur, les autres membres de l'équipe ont été occupé mise en place des caméras, câbles, installer un encodeur vidéo et configuration CDNs. Enfin, le personnel effectue une série de tests pour s'assurer que les œuvres de scénario de bout en bout.

Une fois le concert réel est sur le point d'arriver, démarre un flux vidéo en direct et tablettes, ordinateurs de bureau et périphériques utilisateur différent se connectent aux Services de médias d'Azure pour afficher les flux vidéo en direct. Il y a toujours quelques problèmes découverts lors des séries de tests, mais le personnel travaille les replis sur, et tout le travail se fait à temps pour voir la diffusion de vidéo en direct du concert.

Une lourde tâche facilitée

Héberger de façon évolutive des événements vidéo en direct est une tâche qui peut s'avérer fastidieuse. Avant des solutions telles que les Services de médias Azure, prestation live streaming vidéo souvent importante capitale dépenses requises pour matériel d'infrastructure. Autres décisions critiques inclus la quantité des systèmes nécessaires pour soutenir les différents événements qui varient en taille et échelle. Ces achats étaient souvent soit sur - ou sous-provisionnés. Azure de Microsoft Media Services répond à cette complexité et le coût. L'offre Live est construit au sommet de l'ensemble de fonctionnalités d'Azur Media Services VOD, fournissant une plate-forme unifiée et API pour fournir les deux direct et le contenu VOD à l'industrie à l'échelle.


Gregory Prentice est un architecte chevronné avec plus de 25 ans d'expérience en conception et création d'applications pour diverses compagnies de démarrage. Il a commencé à travailler pour Microsoft de développer les projets suivants : Locadio, Microsoft Hohm et Microsoft utilitaire tarifs Service. Plus récemment, il a aidé les Services de médias de Microsoft Azure et Delta Tre équipes fournissent le flux vidéo live de jeux olympiques de Sochi 2014. Il est actuellement un évangéliste dans le groupe Developer and Platform Evangelism chez Microsoft. Lire son blog à blogs.msdn.com/b/greg-prentice.

Merci aux experts techniques Microsoft suivants d'avoir relu cet article : Steven Goulet, directeur PM, services Microsoft Live: et Jason Suess, services Microsoft Live aux derniers Jeux olympiques