Skip to main content

Windows Azure Media Service - Overview

A fost lansat un nou serviciu pentru Windows Azure. Acesta se numeste Windows Azure Media Services si este un serviciu care ne permite sa oferim solutii media folosind Windows Azure. Acest lucru se putea face si pana acuma, dar era nevoie ca noi sa ne implementam tot procesul, de la upload de stream, encoding and so on.
Din acest moment acest lucru ne este oferit gratuit de catre Microsoft. Gratuit, oarecum spus. Tot servicul pentru media nu este oferit contra cost. Cea ce noi platim este spatiul ocupat pe cloud, procesarea stream-ului si traficul. De fapt acest serviciu ne ofera un API care ne ajuta sa manipulam elemente media (atat audio cat si video).
In acest moment, Windows Azure Media Services este doar la versiunea Developer Preview, dar nu o sa treaca foarte multa vreme pana cand acest serviciu o sa fie in versiune finala.
Acest serviciu este suportat de nenumarate platforme de la sisteme cu Windows (inclusiv W8), la Mac, Xbox, Windows Phone, Androit, WCE.
Hai sa vedem ce putem face cu acest serviciu. In primult rand putem sa facem encoding la un stream media in cateva formate suportate. In momentul de fata sunt suportate formate precum
AAC-LC, H.264, VC-1, MP4, Apple Live Stream, PIFF. Partea buna este ca acest servciu este bine gandit, fiind destul de usor de extins. De exemplu in orice moment ne putem implementa propiul mecanism de encoding. Tot pe partea de encoding, ne este promis suport pentru thirt-party encoders, precum Ateme sau Digital Rapids. Aceste servicii de la 3th-party o sa fie disponibile prin intermediul la Windows Azure Marketplace.
Pe langa partea de encoding, acest serviciu ne permite sa oferim media streaming atat LIVE cat si offline. Ce mi s-a parut destul de interesant este integrarea cu DVR-ul si modul in care se poate scala cand esti LIVE si trebuie sa faci stream-ing la foarte multi consumatori. Prin intermediul CDN-urilor de la Windows Azure, cotentul unui stream poate sa fie foarte usor trimis la toti consumatorii. O noutate este integrarea si cu alte CDN-uri, nu doar cele de la Microsoft.
Pe partea de protectie, Windows Azure suporta encriptatea stream-ului utilizand Microsfot PlayReady si MPEG Common Encryption. Dar ca si la encodare, putem sa folosim solutii 3th-party .
Existe mai multe tipuri de entitati cu care Media Services lucreaza in format REST. Mai jos puteti sa gasiti lista cu cele mai importante entitati:
  • File - este un fisier media (audio, video) care este stocat sub forma unui obiect de tip blob
  • Assert - meta-datele a unui sau mai multe fisiere media. Acesta poate sa contina orice fel de date, incepand de la numele piesei la date despre casa de discuri
  • Task - este o operatie care se poate executa pe un File sau pe un Assert (enconding, streaming...)
  • Job - Operatii de creeare, stergere a nui File sau Assert. Acesta poatecontine unul sau mai multe task-uri.
  • Locator - Este un URI generat automat pe baza caruia se poate oferii acces la o anumita resursa pe o perioada limitata de timp.
  • Access Policy - Cine/Ce/Unde/Cand poate sa acceseze o resursa media
Toate aceste operatii se pot face folosind un API rest. Workflow-ul pentru acest serviciu defineste 4 tipuri de operatii:
  • Ingest - este primul pas cand vrem sa adaugam un continut media. Acest pas cuprinde partea de upload si encriptate a continutului
  • Process - acest pas cuprinde task-uri precum encoding, conversie, transformare a continutului media
  • Manage - operatii pe assert-urile care deja exista (edit, delete, setup)
  • Deliver - operatii de streaming a continutului pe care il avem deja (atat live cat si offline) - atat direct la utilizator cat si la CDN-uri
API fiind in format REST este destul de usor de folosit. Mai jos gasiti un exemplu pentru o aplicatie pentru Windows 8 Metro Style. M-am jucat putin cu acest serviciu, dar in acest momet evit sa dau exemple de cod, pana cand nu avem o versiune finala.
Ca si incheiere, acest serviciu suna destul de bine si o sa ne usureze mult viata, mai ales ca este gratis. Asteptam versiunea finala a sa.
Enjoy!.

Comments

Popular posts from this blog

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

How to check in AngularJS if a service was register or not

There are cases when you need to check in a service or a controller was register in AngularJS.
For example a valid use case is when you have the same implementation running on multiple application. In this case, you may want to intercept the HTTP provider and add a custom step there. This step don’t needs to run on all the application, only in the one where the service exist and register.
A solution for this case would be to have a flag in the configuration that specify this. In the core you would have an IF that would check the value of this flag.
Another solution is to check if a specific service was register in AngularJS or not. If the service was register that you would execute your own logic.
To check if a service was register or not in AngularJS container you need to call the ‘has’ method of ‘inhector’. It will return TRUE if the service was register.
if ($injector.has('httpInterceptorService')) { $httpProvider.interceptors.push('httpInterceptorService&#…

Fundamental Books of a Software Engineer (version 2018)

More then six years ago I wrote a blog post about fundamental books that any software engineer (developer) should read. Now it is an excellent time to update this list with new entries.

There are 5 different categories of books, that represent the recommended path. For example, you start with Coding books, after that, you read books about Programming, Design and so on.
There are some books about C++ that I recommend not because you shall know C++, only because the concepts that you can learn from it.

Coding

Writing solid codeCode completeProgramming Pearls, more programming pearls(recommended)[NEW] Introduction to Algorithms

Programming

Refactoring (M. Fowler)Pragmatic ProgrammerClean code[NEW] Software Engineering: A Practitioner's Approach[NEW] The Mythical Man-Month[NEW] The Art of Computer Programming

Design

Applying UML and Patterns (GRASP patterns)C++ coding standards (Sutter, Alexandrescu)The C++ programming language (Stroustrup, Part IV)Object-oriented programming (Peter Coad)P…