
Peat TVã¯ãKirill Kislyakovã«ãã£ãŠèšç«ãããæå人é¡åŠã®ã€ã³ã¿ãŒããããããžã§ã¯ãã§ãã ããã¯ãããããããããã¯ã®éžæããã£ã©ã¯ã¿ãŒã®éžæãçŽ æã®ãã¬ãŒã³ããŒã·ã§ã³ã®äž¡æ¹ã«å¯Ÿããé¡èãªäž»èŠ³çã¢ãããŒããçšããèè ã®ãããžã§ã¯ãã§ãã ãã®ãã£ã³ãã«ã§ã¯ãèžè¡ãšæè²ãæåŠãšè©©ãç§åŠãšæè¡ãé³æ¥œãšæŽå²ãéæ¿æ²»ãã¥ãŒã¹ãèå³æ·±ãäºå®ãªã©ã®å¹ åºãåé¡ãçããããªåœ¢åŒã§åãäžããŠããŸãã
ããããŒãžããŒããã¬ãã¯ãçŽ æã®èç©ãšãšãã«ç»å ŽããŸãã åå·ã¯ããããªã¢ãŒãã®ã¹ã¿ã€ã«ã§äœæããã3ã15åã®çããããªã§ãã
âã³ã³ã»ãã
ããã€ãã®åé¡ã¯äººã ã®ç¬çœãŸãã¯å¯Ÿè©±ã§ãããæã«ã¯èŠèŽè ã«åããããããæã«ã¯åœŒãã¯æãããŠãããšããäºå®ã«æ³šæãæããã«äºãã«ã³ãã¥ãã±ãŒã·ã§ã³ããšã£ããããŸãã ããã¥ã¡ã³ã¿ãªãŒçªçµã®åœ¢åŒã§è¡ãããåé¡ããããã€ã³ã¿ãã¥ãŒã®åœ¢åŒã§åé¡ããããŸãã ã€ã³ã¿ãã¥ã¢ãŒã¯å¯Ÿè«è ã®ããã«ãã¬ãŒã å ã«ããå Žåããããæã«ã¯èŠããªãå ŽåããããèŠèŽè ã«ã¯è³ªåãããé³å£°ã®ã¿ãèãããŸãã ãã¹ãŠã®åé¡ã¯ãç¹å®ã®ãããã¯ãæã€ããã°ã©ã ã®ã«ããŽãªã«åé¡ãããŸãã
ä»æ¥ããã£ã³ãã«ã«ã¯æ¬¡ã®ãããªã»ã¯ã·ã§ã³ããããŸãã
- ããŒãã¬ãŒã -èè ã€ã³ã¿ãã¥ãŒ
- ãã©ã¶ãŒãºã€ã³ã¶ãã©ãã·ã¥ -ã¢ã«ã³ãŒã«æ¶è²»ã®æåã«é¢ããåé¡
- ãµãŠã³ããèŠã -åé¡ã¯é³æ¥œã®äžçã®ã€ãã³ãã人ã«æ§ããããŠããŸã
- å°çã®çµãã -æ è¡ããã³ã¯ãŒã«ããšãã£ã·ã§ã³
- 奜ããªè©© -ã²ã¹ãã奜ããªè©©ãèªã
- æåã®ãªããã« -æåŠã«æ§ããããåé¡
- 3çªç®ã®ã·ãã -å°é家ã¯äœããªãè¡ãã®ãã話ããŸã
人é¡åŠã®èŠ³ç¹ãããæãèå³æ·±ãåé¡ã¯ããŒãã¬ãŒããšãŽãç®±ã®å åŒã§ãã ã ãããæåã®ã«ããŽãªãŒã®åé¡ã§ã¯ã人ã¯èªåãèšãããããšãèšãã2çªç®ã®åé¡ã§ã¯ãèªåãèšãããããšãèšãã ã©ã¡ãã®åœ¢åŒã§ããå€ãã®å Žåã5å以å ã«åœŒèªèº«ãææ¡ãã以äžã®ããšãèšãããšãã§ããŸãã
ãã£ã³ãã«ã®èŠèŽè ã¯ãæåã®åé¡ã ãã§ãªããå€ãã®æ代ãäžçã®ããããå Žæã«é¢é£ããæèãæéããåŒãè£ãããæèã®æµãã«åŸãæ©äŒã«èå³ããã人ã ã§ãããããã£ãŠãPeatã®ãããªã¯ãæåç掻ã§äœãèµ·ããããèè ã®ããŒã ãŸãã¯æåŸ ããããã£ã©ã¯ã¿ãŒã®ãã¥ãŒã«çªç¶äœãå ¥ããã®ã¬ãã¥ãŒã ã¹ããŒãªãŒã¯éå»ã®ãã®ã§ãæªæ¥ã®ãã®ã§ãããå ŽåããããŸãããé¢é£æ§ã«ã¯åœ±é¿ããŸããã
âå®è£
ãããžã§ã¯ãã®ITéšåã®éçºãéå§ãããšããããã€ãã®ã¿ã¹ã¯ããããŸããã
- ãªãœãŒã¹ã¯HTML5ã䜿çšããŠå®è£ ããæšæºããµããŒãããããã€ã¹ã§ãããªãåçã§ããããã«ããå¿ èŠããããŸã
- ãããªã¯äžçäžã§ãé«å質ã§ãåçãé æ»ãªãå©çšã§ããå¿ èŠããããŸã
- ãããžã§ã¯ãã®ã¡ã³ããã³ã¹æé ã¯å¯èœãªéãèªååããå¿ èŠããããŸã
ä»æ¥ãè©Šè¡é¯èª€ã®çµæãç§ãã¡ã®æèŠã§ã¯ãæãæé©ãªãããžã§ã¯ãã¢ãŒããã¯ãã£ã«ãªããŸããïŒãã«ãµã€ãºã®ç»åã¯ãã¡ãã§ç¢ºèªã§ããŸã ïŒã

ãããã©ã®ããã«æ©èœãããªããããè¡ã£ãã®ããèŠãŠã¿ãŸãããã
âãã¬ãŒã€ãŒ
ãã®ãããžã§ã¯ãã§ã¯ãäž»èŠãªãããªåœ¢åŒããµããŒãããç¬èªã®HTML5 / JSãã¬ãŒã€ãŒãéçºãããŸããã
- oggã¯ãã¡ãã£ã¢ã³ã³ãããŒåœ¢åŒã®ãªãŒãã³ã¹ã¿ã³ããŒãã§ãããXiph.Orgåºç€ã®ã³ãŒããã¯ã®ã¡ã€ã³ãã¡ã€ã«ããã³ã¹ããªãŒã 圢åŒã§ãã ãã®åœ¢åŒã®ãããªã¯ãããŒãžã§ã³4ãŸã§ã®Firefoxãã©ãŠã¶ãŒãš10.6ãŸã§ã®OperaãŠãŒã¶ãŒåãã«ãšã³ã³ãŒããããŸããã
- mp4ã¯ãMPEG-4æšæºã®äžéšã§ããã¡ãã£ã¢ã³ã³ãã圢åŒã§ãã ãã®åœ¢åŒã¯ã»ãšãã©ã®ãã©ãŠã¶ã§ãµããŒããããŠãããçµ±èšããå€æãããšããã®åœ¢åŒã®åç»ã¯ã»ãšãã©ã®å ŽåããŠã³ããŒãããŠèŠèŽã§ããŸã
- webmã¯ã2010幎5æ19æ¥ã«éå¬ãããGoogle I / Oã«ã³ãã¡ã¬ã³ã¹ã§Googleã«ãã£ãŠå°å ¥ããããªãŒãã³ãã«ãã¡ãã£ã¢åœ¢åŒã§ãã ãã®åœ¢åŒã§ã¯ããªãŒãã³VP8ãããªã³ãŒããã¯ã«åºã¥ããã€ã€ãªãã£ã¯äžèŠã§ãã æšæºã®ããåºç¯ãªé åžãæ³å®ãããŠããããã代æ¿ã³ãŒããã¯ãšããŠäœ¿çšãããŸããã
åãã©ãŒãããã«å¯ŸããŠãç°ãªã解å床ã®4ã€ã®ãããªãªãã·ã§ã³ãäœæããŸãã
- SD-ã€ã³ã¿ãŒãããé床ãé ããŠãŒã¶ãŒããã³æºåž¯é»è©±åã
- HD-ãã®ã¢ãŒãã¯ããã¬ãŒã€ãŒã¢ãŒãã§ãããªãèŠèŽããããã«ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸã
- HD720-ãã«ã¹ã¯ãªãŒã³ã§ãããªãèŠãã®ã«é©ããŠããŸã
- HD1080-ã¹ããŒãTVãé«è§£å床ã¹ã¯ãªãŒã³ãªã©ã®ããã€ã¹ããã®ãªãªãŒã¹ãèŠèŽãã人åãã«ããã®è§£å床ã®ãµããŒããå°ãåŸã«ç»å ŽããŸãã
çµ±èšã«ãããšãã»ãšãã©ã®ãã¥ãŒã¯HDããã³SD解å床ã®mp4圢åŒã®ãããªãã¡ã€ã«ã§ãã
videoãããªã®æºåãšå ¬é

- ã³ãŒãã£ã³ã°ãµãŒããŒã§ã¯ãç¹å¥ã«èšèšãããããã°ã©ã ã䜿çšããŠããããªãããŸããŸãªåœ¢åŒãšè§£å床ã«å€æãããŸãã
- ãããªã®ãšã³ã³ãŒããå®äºãããšãããã°ã©ã ã¯ãããªãRackspace CDNãšã³ããã€ã³ãã«ããŠã³ããŒããå§ãããããããã¡ã€ã«ã¯ããŒã«ã«CDNãµãŒããŒã«éãããŸãã
- ããŠã³ããŒããå®äºãããšãæ°ãããªãªãŒã¹ãè¿œå ããããã®ãªã¯ãšã¹ããWebã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ãããŸãã
- Webã¢ããªã±ãŒã·ã§ã³ãã³ãŒã«ãåä¿¡ãããšãããŒã¿ããŒã¹ã«ãããªæ
å ±ãè¿œå ããæé ãå®è¡ããããªãªãŒã¹ããµã€ãã«éãããŸãã
ãããªãå€æããããã°ã©ã ãäœæããéçšã§ãå€æãæ åœããã³ãŒããå¥ã®ã©ã€ãã©ãªã«å²ãåœãŠãããšã決å®ãããŸããã ã©ã€ãã©ãªã¯X.Media.EncodingãšåŒã°ããnugetãªããžããªããç¡æã§ããŠã³ããŒãã§ããŸã ã
cloudsã¯ã©ãŠããžã®ç§»è¡
éçºãéå§ãããšãããµã€ãã¯éåžžã®å°çšãµãŒããŒã«å±éãããŠããŸããããæåã¯ããã§ååã§ããã ãã ããæéãçµã€ã«ã€ããŠãéåžžã®ãµãŒããŒã«ã¯ããã€ãã®æ¬ ç¹ãããããšãæããã«ãªããŸããã
- ãŸã第äžã«ãããã¯ãããªãã¡ã€ã«ã«é¢ãããã®ã§ãã-ãªãªãŒã¹ã®ããŠã³ããŒãé床ã¯äœãã£ãã§ã
- 2çªç®ã®åé¡ã¯ããªãœãŒã¹ãåºæ¬çã«ããŒã¯è² è·ã¢ãŒãã§æ©èœãããšããäºå®ã«é¢é£ããŠããŸããã蚪åè ã®ã¢ã¯ãã£ããã£ã¯ãæ°ãããªãªãŒã¹ããªãªãŒã¹ããããšãã«æ倧ã«ãªãããªãªãŒã¹éã§æå°ã«ãªããŸãã ãããã£ãŠããªãœãŒã¹ãã»ãšãã©ã®æéã¢ã€ãã«ã«ãªãããã匷åãªãµãŒããŒãè³Œå ¥ããããèªåã¹ã±ãŒãªã³ã°ããµããŒããããã©ãããã©ãŒã ã«åãæ¿ããå¿ èŠããããŸãã
æåã«ãåé¡ã®ããŠã³ããŒãé床ã«é¢ããåé¡ã解決ããããã«ããŠã¯ã©ã€ãã§ã³ã³ãã³ãé ä¿¡ãµãŒãã¹ãæäŸããäŒç€ŸCDN.UAã®ãµãŒãã¹ã䜿çšããããšã«ããŸããã ã¡ãªã¿ã«ã圌ãã¯éåžžã«ãããã§ãã·ã§ãã«ã§ãããç§ãã¡ã®ãããžã§ã¯ãã§ã¯ããµãŒããŒäžã§ããã€ãã®ç¹å®ã®èšå®ãè¡ããŸããã ãã®æ®µéã§ããŠã¯ã©ã€ãã®èŠèŽè ã«ãšã£ãŠãèŠèŽã®åé¡ã¯ã»ãŒå®å šã«ãªããªããŸããã ãããããžã§ãŒãžã¢ãã€ã¹ã©ãšã«ãããã³ãã®ä»ã®åœããã®ãªãªãŒã¹ãèŠã人ã«ãšã£ãŠãèŠèŽã®é ãã¯æ¶ããŸããã§ããã ãã®ããããããªãåœéã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ã«è»¢éãã次ã®ã¹ãããã決å®ãããŸããã Rackspace CDN ã¯ãäžçæ倧ã®Akamaiãããã¯ãŒã¯ã䜿çšããŸãã

æ°ãããã©ãããã©ãŒã ãžã®ç§»è¡ã«é¢é£ããŠããããªããŠã³ããŒãããã°ã©ã ããããã«æŽæ°ããå¿ èŠããããŸããã ãããã£ãŠããããªãFTPçµç±ã§CDN.UAã«ã¢ããããŒãããå Žåãããã䜿çšããŠRackspaceã«ã¢ããããŒãããŸã
OpenStack SDKïŒ
using net.openstack.Core.Domain; using net.openstack.Providers.Rackspace; using NLog; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using X.Media.Encoding; .... public bool Upload(string path) { const string container = "Video"; const string region = "DFW"; try { var cloudIdentity = new CloudIdentity { Username = _settings.StorageUserName, Password = _settings.StoragePassword }; var contentType = ContentTypeManager.GetContentType(Path.GetExtension(path)); var name = Path.GetFileName(path); _logger.Info(String.Format("Upload: {0} \t with content type: [{1}]", Path.GetFileName(path), contentType)); using (var stream = File.OpenRead(path)) { var cloudFilesProvider = new CloudFilesProvider(cloudIdentity, region, null, null); cloudFilesProvider.CreateObject(container, stream, name, contentType); _logger.Info(String.Format("Uploaded: {0}", path)); } } catch (Exception ex) { _logger.WarnException(String.Format("Error while uploading: {0}", path), ex); return false; } return true; }
ãããªã³ã³ãã³ããCDNã«è»¢éãããåŸããµã€ããå€ãããŸããã WebãµãŒããŒã®è² è·ã¯ããããªãé ä¿¡ããåœåã®è² è·ã«æ¯ã¹ãŠéåžžã«å°ãããªããŸãããã以åã®ããã«èšªåè ã®æµå ¥ãäžåäžã ã£ãããããµã€ããã¯ã©ãŠããã©ãããã©ãŒã ã«ç§»è¡ããããšã«ããŸããã ããã§ãWebSitesãµãŒãã¹ã®Microsoft Azureã«ãµã€ããå±éãããŸããã ãã®ãµã€ãã¯ã蚪åè ã®æ°ãçªç¶å¢å ããå Žåã®è² è·åæ£ãšãªãœãŒã¹ã®èªåã¹ã±ãŒãªã³ã°ããµããŒãããŠããŸãã
èå³æ·±ãç¹ã®ãã¡ããã®ãµã€ãã«ã¯2ã€ã®è¡šç€ºã¢ãŒãããããŸã-å€ãšæŒãããã¯æå»ã«å¿ããŠèªåçã«å€åããŸãã
âãããžã§ã¯ãã®éçºãšãµããŒãã®ããã»ã¹
ãããžã§ã¯ãéçºããŒã ã¯å°èŠæš¡ã§ããïŒåœåã¯4人ã§ããããçŸåšã¯ã³ãŒãã®äœæã«ç©æ¥µçã«é¢äžããŠããã®ã¯2人ã®ã¿ã§ãïŒããããžã§ã¯ãéçºãšå ¬éããã»ã¹ãå¯èœãªéãæé©åããããšã決å®ãããŸããã ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒãããã©ã€ããŒãBitbucketãªããžããªã«ä¿åããŸãã æ¢ã«è¿°ã¹ãããã«ããããžã§ã¯ãèªäœã¯Azure Webãµã€ããµãŒãã¹ã§ãã¹ããããŠããŸãã ãããŠããã®ãµãŒãã¹ã«ãããGitHubãšBitbucketãããããžã§ã¯ããèªåå±éããããã»ã¹ãæ§æã§ããŸãïŒå®éããœãŒã¹ã®æ°ã¯ã¯ããã«å€ãã Dropboxããã®å ¬éããµããŒããããŠããŸãïŒã Azureã§ã¯ã2ã€ã®Webãµã€ãããããŸãã
- ãã¹ã - ãã¹ã¿ãŒãã©ã³ãããã®å±é
- æ¬çª - ã¯ã©ãŠããã©ã³ãããã®å±é

æ°ããã³ãããã察å¿ãããã©ã³ãã«å ¥ããšããããžã§ã¯ãã®èªåãã«ããçºçããæ£åžžã«å®äºããå Žå-ãµã€ãã®æ°ããããŒãžã§ã³ã®å ¬éã äœããã®çç±ã§ãããžã§ã¯ããã¯ã©ãŠãç°å¢ã§æ£åžžã«ãã«ããããªãã£ãå Žåãå±éãã°ã確èªããããšã§ãã®çç±ããã€ã§ã確èªã§ããŸãã

ãã ãããã®æ©èœã¯åžžã«ããããžã§ã¯ããã¯ã©ãŠãã«æåã«å±éããéã«äžåºŠã ã圹ã«ç«ã¡ãŸããã
âã¢ãã€ã«ã¯ã©ã€ã¢ã³ã
ãããžã§ã¯ãã®éå§ããçŽ1幎åŸãå€ãã®èŠèŽè ãã³ã³ãã¥ãŒã¿ãŒããã ãã§ãªãã¹ããŒããã©ã³ã䜿çšããŠãªãªãŒã¹ãèŠèŽããæ¹ã䟿å©ã§ããããšãããããŸããã ã¢ãã€ã«ã¯ã©ã€ã¢ã³ããäœæããããšã決å®ãããŸããã 3ã€ã®äž»èŠãªã¢ãã€ã«ãã©ãããã©ãŒã çšã«3ã€ã®ããŒãžã§ã³ã®ã¢ãã€ã«ã¯ã©ã€ã¢ã³ããäœæããŸããã
- Windows Phone-ããŒãžã§ã³7.8以éã§ãµããŒã
- iOS-ããŒãžã§ã³5以éãããµããŒã
- Android-ããŒãžã§ã³4.1以éãããµããŒã
ã¢ãã€ã«ã¯ã©ã€ã¢ã³ãã®ããžãã¯ã¯å¯èœãªéãåçŽã§ãã xml圢åŒã§ã¯ãå©çšå¯èœãªããã°ã©ã ãšãããªãªãªãŒã¹ã®ãªãªãŒã¹ã«é¢ããæ å ±ããµã€ãããåãåããŸãã ãŸããCDNã«ãããããªãã¡ã€ã«ã®URLã¯ã¢ãã€ã«ã¯ã©ã€ã¢ã³ãã«éä¿¡ããããããããããªãããŠã³ããŒããããŸãã
ãŸãããããžã§ã¯ãã«ã¯ãå ãªã声ãããããŸãã 圌ã¯ãã¹ããŒããã©ã³ã«Peat TVã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãããŠãŒã¶ãŒãšéä¿¡ããŸãã ãŠãŒã¶ãŒã¯ãªãªãŒã¹ã®ãç¥ãããåãåãããšãããã°ãèå³æ·±ãèããè¡šçŸãåãåãããšããããŸãã Azure Mobile Servicesã«åºã¥ããå éšé³å£°ããæ©èœããŸãã ãªãªãŒã¹ãããã°ããã®ã¢ãã€ã«ãµãŒãã¹ã®ãå éšé³å£°ãã®äœææã«ãããžãã¯ã¯JavaScriptã§èšè¿°ãããŠããããã åŸã«ãCïŒã§ã¢ãã€ã«ãµãŒãã¹ã®ããžãã¯ãèšè¿°ããæ©èœãè¿œå ãããŸãããããã¹ãŠãããŸãæ©èœããããããã®ã³ãŒããã¹ããŒã«ã§æžãçŽãå¿ èŠããããŸãã
èå³æ·±ãããšã«ãçŸæç¹ã§ã¯ããããªãã¥ãŒã®çŽååãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³çµç±ã§ãã
â圹ç«ã€æ å ±
- æ³¥çãã¬ã
- nuget.orgã®X.Media.Encodingã©ã€ãã©ãª
- GitHubã® X.Media.Encodingã©ã€ãã©ãª
- OpenStack SDK
ã¡ã¢
- ãã®èšäºã§ã¯ã MarcusAureliusãäœæãããããžã§ã¯ãã®èª¬æããã®ãã©ã°ã¡ã³ãã䜿çšããŠããŸã
- ãããžã§ã¯ãã®JavaScriptãã¬ãŒã€ãŒã¯ã gelasã«ãã£ãŠéçºãããŸãã