рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдмрдирд╛рдоред рдЕрдореЗрдЬрд╝реЕрди рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ред рднрд╛рдЧ 1: рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ

рдЗрд╕ рд╡рд░реНрд╖ рдХреЗ рдЖрдЦрд┐рд░реА рдХрд╛рд░реНрдп рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рджреЗрдЦрдиреЗ рдХреА рддрд╛рдХрдд рдорд┐рд▓реА рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВ! рдЗрд╕ рдмрд╛рд░ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ: рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдЕрдореЗрдЬрд╝реЕрди рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдордд рднреВрд▓рдирд╛! рддреЛ рдЪрд▓рд┐рдП!

рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛


рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ 720p рдкреНрд░рд╛рд░реВрдк (Android) рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рд╢реЙрдЯ рд╣реЛрдиреЗ рджреЗрдВред рдЗрд╕рдХреА рдЕрд╡рдзрд┐ 24 рд╕реЗрдХрдВрдб рд╣реИ, рдФрд░ рдЖрдХрд╛рд░ 13 рдПрдордмреА рд╣реИред рд╣рдо рдЗрд╕реЗ 480p рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдзрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕


рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕реЙрд▓реНрдпреВрд╢рди рдмрдирд╛рдПрдВрдЧреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдореЗрдЬрд╝реЕрди рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдзрд╛рд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
public interface IVideoConverter
{
void Convert(string sourceFile, string destinationFile);

void UploadFile(string localFile);

void DownloadFile(string localFile);

void WaitForConversionToComplete();
}

рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:


рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
IVideoConverter client = new IVideoConverter();
client.Convert(тАЬ___тАЭ, тАЬ___тАЭ);

рддрджрдиреБрд╕рд╛рд░, рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
public void Convert(string sourceFile, string destinationFile)
{
//
UploadFile(sourceFile);

//
();

//
WaitForConversionToComplete();

//
DownloadFile(destinationFile);
}

рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ


рдЖрдЗрдП рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реБрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдкреЛрд░реНрдЯрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирдИ -> рдРрдк рд╕реЗрд╡рд╛рдПрдБ -> рдореАрдбрд┐рдпрд╛ рд╕реЗрд╡рд╛ -> рддреНрд╡рд░рд┐рдд рдмрдирд╛рдПрдВ рдЪреБрдиреЗрдВред



рд╣рдореЗрдВ рдирдИ рд╕реЗрд╡рд╛ (рдирд╛рдо), рдХреНрд╖реЗрддреНрд░ (рдХреНрд╖реЗрддреНрд░) рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреНрд╖рдорддрд╛, рднрдВрдбрд╛рд░рдг рдЦрд╛рддрд╛ (рд╕реНрдЯреЛрд░реЗрдЬ рдЕрдХрд╛рдЙрдВрдЯ), рд╕рд╛рде рд╣реА рдПрдХ рд╕рджрд╕реНрдпрддрд╛ (рд╕рджрд╕реНрдпрддрд╛) рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрдм, рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЦрд╛рддрд╛ рдирд╛рдо рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдкреЛрд░реНрдЯрд▓ рдХреЗ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдореИрдиреЗрдЬ рдХреАрдЬрд╝ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред



рдлрд┐рд░, рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╣рдореЗрдВ рдЦрд╛рддрд╛ рдирд╛рдо рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдорд╛рдиреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рд╣рдо Windows Azure Media Services рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:
public class MediaServicesClient : IVideoConverter
{
private const string AccountName = "MEDIA_SERVICE_NAME";
private const string AccessKey = "MEDIA_SERVICE_KEY";
}

рдЗрд╕рд▓рд┐рдП, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЬрд╛рдПрдВ, рд╣рдореЗрдВ Windows Azure Media Services SDK рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, NuGet рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдореЗрдВ, "NuGet рд╕рдВрдХреБрд▓ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ ..." рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рд╣рдо рдЙрдЪрд┐рдд рдкреИрдХреЗрдЬ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:



Windows Azure Media Services рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЖрдзрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ MediaContext рд╣реИред рдбрд╛рдЯрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рдорд╛рдиред рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, AccountName рдФрд░ AccessKey рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрдирд╛рдПрдВ:
public MediaServicesClient()
{
_mediaContext = new CloudMediaContext(AccountName, AccessKey);
}

рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдореЗрдВ Windows Azure Media Services рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдкрд╣рд▓реА рдЗрдХрд╛рдИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдореАрдбрд┐рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ред рд╕рднреА рдХрд╛рд░реНрдп (рдХрд╛рд░реНрдп) рдЬреЛ рд╣рдо Windows Azure рдореАрдбрд┐рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рднреЗрдЬрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ ред рд╣рдо Windows Azure рдореАрдбрд┐рдпрд╛ рдПрдирдХреЛрдбрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд░рд╕реАрдж рдЬреЛрдбрд╝реЗрдВ:
private const string MediaProcessorName = "Windows Azure Media Encoder";

public MediaServicesClient()
{
...
_mediaProcessor = GetMediaProcessor();
}

private IMediaProcessor GetMediaProcessor()
{
return _mediaContext.MediaProcessors.Where
(x => x.Name == MediaProcessorName)
.ToList()
.First();
}

рддрдерд╛рдХрдерд┐рдд рдПрд╕реЗрдЯ рдмрдирд╛рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЙрди рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрдЯреЛрд░реЗрдЬ рдЕрдХрд╛рдЙрдВрдЯ рдХреЗ рд▓рд┐рдВрдХ, рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдЖрджрд┐ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛ред рдРрд╕реА рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВред рдпрд╣ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВред
private const string InputAssetName = "MediaServices_InputAsset";

private readonly IAsset _inputAsset;

public MediaServicesClient()
{
...
_inputAsset = CreateInputAsset();
}

private IAsset CreateInputAsset()
{
return _mediaContext.Assets.Create(InputAssetName, AssetCreationOptions.None);
}

рд╕рднреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛рд░реНрдп (рдХрд╛рд░реНрдп) рдПрдХ рдиреМрдХрд░реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдРрд╕реА рдХреЛрдИ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
private const string JobName = "MediaServices_Job";

private readonly IJob _job;

_job = CreateEncodingJob();

private IJob CreateEncodingJob()
{
return _mediaContext.Jobs.Create(JobName);
}

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╡реАрдбрд┐рдпреЛ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдиреМрдХрд░реА рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
private const string PresetName = "H264 Broadband SD 16x9";

private void CreateTask()
{
var task = _job.Tasks.AddNew(
TaskName,
_mediaProcessor,
PresetName,
TaskOptions.ProtectedConfiguration);

task.InputAssets.Add(_inputAsset);
task.OutputAssets.AddNew(OutputAssetName, AssetCreationOptions.None);
}

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдкреНрд░реАрд╕реЗрдЯ рдирд╛рдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╣рдо рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ ред рд╢рд░реНрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо 480p рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореВрд▓ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдПрдирдХреЛрдб рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдп (рдХрд╛рд░реНрдп) рдмрдирд╛рдХрд░, рдЖрдк рдПрдХ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, 1080p рдореЗрдВ рд╢реЙрдЯ рдХрд╣рддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рдЖрдЗрдП IVideoConverter рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ Windows Azure Media Services рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдЪрд▓рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред UploadFile рдкрджреНрдзрддрд┐ рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдРрд╕рд╛ рдХрд░рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
public void UploadFile(string localFile)
{
var fileName = Path.GetFileName(localFile);

var assetFile = _inputAsset.AssetFiles.Create(fileName);
assetFile.Upload(localFile);
}

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдХреБрдВрдЬреА рд╣реЛрдЧреАред рдпрд╣реА рд╣реИ, рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд░реВрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдПрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдирдП рдСрдмреНрдЬреЗрдХреНрдЯ (рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо) рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрд╕реЗрдЯрдлрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдкрд▓реЛрдб рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╕реАрдзреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред

рддрджрдиреБрд╕рд╛рд░, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рдорд╛рди рд╣реЛрдЧрд╛:
public void DownloadFile(string localFile)
{
var outputAsset = _job.OutputMediaAssets.Single();
var outputFile = outputAsset.AssetFiles.ToList().Single(x => x.Name.Contains(".mp4"));

outputFile.Download(localFile);
}

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдЙрдЯрдкреБрдЯ рдПрд╕реЗрдЯ) рд╣реИ, рддреЛ рдЬреЙрдм рдХреЗ рдЕрдиреБрд░реВрдк OutputMediaAssets рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ, рд╣рдореЗрдВ рдХрд┐рд╕реА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдорд┐рд▓рддрд╛ рд╣реИред
Mp4 рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд╕реЗрдЯ рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВред рд╣рдореЗрдВ mp4 рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрд╕реЗрдЯрдлрд╛рдЗрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рдбрд╛рдЙрдирд▓реЛрдб рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░реЗрдЧреА рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧреА:
public void WaitForConversionToComplete()
{
_job.StateChanged += JobOnStateChanged;

_job.Submit();

_job.GetExecutionProgressTask(CancellationToken.None).Wait();
}

рдЬреЙрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕реВрдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ:
private void JobOnStateChanged(object sender, JobStateChangedEventArgs state)
{
switch (state.CurrentState)
{
case JobState.Finished:
{
Console.WriteLine("Conversion complete!");
break;
}
case JobState.Queued:
case JobState.Scheduled:
case JobState.Processing:
{
Console.WriteLine("Conversion in progress...");
break;
}
case JobState.Canceled:
case JobState.Canceling:
case JobState.Error:
{
Console.WriteLine("An error has been occured during the job execution!");
break;
}
}
}

рдлрд┐рд░ рд╣рдо рд╕рдмрдорд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдЗрд╕ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдп рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рди рд╣реЛ рдЬрд╛рдПред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдзреВрд░реА рдЫреЛрдбрд╝реА рдЧрдИ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдзрд┐ рд╣реИ рдХрдиреНрд╡рд░реНрдЯред рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреАред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
public void Convert(string sourceFile, string destinationFile)
{
Console.WriteLine("Uploading the source file...");
UploadFile(sourceFile);

Console.WriteLine("Creating processing task...");
CreateTask();

Console.WriteLine("Starting conversion...");
WaitForConversionToComplete();

Console.WriteLine("Downloading converted file...");
DownloadFile(destinationFile);
}

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
  1. рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ;
  2. рдПрдХ рдХреЛрдбрд┐рдВрдЧ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛;
  3. рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рднреЗрдЬрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА;
  4. рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:



рд╕реНрд░реЛрдд рдФрд░ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:



рдпрд╣ Windows Azure Media Services рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рд╣рдо рдЕрдореЗрдЬрд╝реЕрди рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗред рд╕реНрд╡рд┐рдЪ рдордд рдХрд░реЛ! рд╕рднреА рдПрдХ рд╕рдлрд▓ рдХрд╛рдордХрд╛рдЬреА рд╕рдкреНрддрд╛рд╣ рдФрд░ рдЖрдЧрд╛рдореА рдХреЗ рд╕рд╛рде!

рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...

Source: https://habr.com/ru/post/In207018/


All Articles