CINXE.COM

Amazon Elastic Transcoder

<!DOCTYPE html> <html ng-app="myApp" lang="en" ng-controller="appCtrl"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Amazon Elastic Transcoder</title> <meta name="description" content="Yit מתמחה במתן שירותים דיגיטליים מתקדמים בראייה של 360 מעלות, במטרה להבטיח את המענה המדויק עבור הפרויקט שלכם. הצוות שלנו כולל את הטובים בתחומם – כל אחד ואחת מהם ישמחו להעמיד לרשותכם את המומחיות, היצירתיות והניסיון שלהם"> <meta name="title" content="פיתוח אפליקציות, עיצוב UX\UI, בניית אתרים, עיצוב חווית משתמש"> <meta property="og:type" content="website"> <meta property="og:url" content="https://yit.co.il/"> <meta property="og:title" content="פיתוח אפליקציות, עיצוב UX\UI, בניית אתרים, עיצוב חווית משתמש"> <meta property="og:description" content="Yit מתמחה במתן שירותים דיגיטליים מתקדמים בראייה של 360 מעלות, במטרה להבטיח את המענה המדויק עבור הפרויקט שלכם. הצוות שלנו כולל את הטובים בתחומם – כל אחד ואחת מהם ישמחו להעמיד לרשותכם את המומחיות, היצירתיות והניסיון שלהם"> <meta property="og:image" content="https://yit.co.il/images/CustomYitLogo.png"> <!-- Twitter --> <meta property="twitter:url" content="https://yit.co.il/"> <meta property="twitter:title" content="פיתוח אפליקציות, עיצוב UX\UI, בניית אתרים, עיצוב חווית משתמש"> <meta property="twitter:description" content="Yit מתמחה במתן שירותים דיגיטליים מתקדמים בראייה של 360 מעלות, במטרה להבטיח את המענה המדויק עבור הפרויקט שלכם. הצוות שלנו כולל את הטובים בתחומם – כל אחד ואחת מהם ישמחו להעמיד לרשותכם את המומחיות, היצירתיות והניסיון שלהם"> <meta property="twitter:image" content="https://yit.co.il/images/CustomYitLogo.png"> <script> dataLayer = []; </script> <!-- Google Tag Manager --> <script> (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-N3XMPZ');</script> <!-- End Google Tag Manager --> <!-- Global site tag (gtag.js) - Google Ads: 382876680 --> <script async src="https://www.googletagmanager.com/gtag/js?id=AW-382876680"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'AW-382876680'); </script> <!-- Facebook Pixel Code --> <script> !function (f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s) }(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '842366193020929'); fbq('track', 'PageView'); </script> <!-- End Facebook Pixel Code --> <link rel="canonical" href="https://yit.co.il/article/11" /> <meta property="og:title" content="Amazon Elastic Transcoder" /> <meta property="og:type" content="article" /> <meta property="og:image" content="https://yit.co.il/images/articles/AmazonWebservices_Logo.jpg" /> <meta property="og:image:width" content="1920" /> <meta property="og:image:height" content="1080" /> <meta property="og:url" content="https://yit.co.il/article/11" /> <meta property="og:description" content="סקירת מקודד הווידאו האלסטי של אמזון " /> <meta property="og:site_name" content="Yit" /> <meta property="fb:app_id" content="1662790277172042" /> <meta property="og:locale" content="he_IL" /> <!-- css bundle --> <link ng-if="lang =='heb'" href='/Built/style_rtl.bundle.css?v=0109.2' rel='stylesheet' type='text/css'> <link ng-if="lang =='eng'" href='/Built/style_ltr.bundle.css?v=0109.2' rel='stylesheet' type='text/css'> <link rel="icon" href="../../favicon.ico" type="image/gif" sizes="16x16"> <link href="https://fonts.googleapis.com/css?family=Heebo&display=swap" rel="stylesheet"> <script> var appRoot = '/'; </script> <link href="/Built/articles.css" rel="stylesheet"/> <link href="/scss/vendors/owlCarousel/2.3.3/owl.carousel.css" rel="stylesheet"/> <link href="/scss/vendors/owlCarousel/2.3.3/owl.theme.default.css" rel="stylesheet"/> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.4/angular-animate.js"></script> <script src="/scripts/jquery-3.7.1.min.js"></script> <script src="//code.angularjs.org/snapshot/angular-sanitize.js"></script> <script src="https://www.google.com/recaptcha/api.js?render=6Ld3AcwpAAAAACIE5lNwCGTDirYAsGncaRk66854"></script> </head> <body class=" {{lang}}" ng-cloak> <!-- Google Tag Manager (noscript) --> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N3XMPZ" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <!-- End Google Tag Manager (noscript) --> <!-- Facebook Pixel Code --> <noscript> <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=842366193020929&ev=PageView&noscript=1" /> </noscript> <!-- End Facebook Pixel Code --> <header sticky class="main inverse-c"> <div class="container wrapper navpadding"> <nav class="navbar navbar-toggleable-md justify-content-center align-items-center flex-row"> <button class="navbar-toggler navbar-toggler-left" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span id="burger" class="yit-navbar-toggler-icon"> <span></span> <span></span> <span></span> </span> </button> <a class="navbar-brand" href="/"> <img class="navbar-brand" src="/images/logo white.png" alt="YIT"> </a> <a class="top-contact-btn btn rounded-corners" href="/ContactUs">דברו איתנו</a> <div class="collapse navbar-collapse justify-content-end" id="navbarNavDropdown"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link p-0" href="/About"> מי אנחנו </a> </li> <li class="nav-item"> <a class="nav-link p-0" href="/Expertise"> המומחיות שלנו </a> </li> <li class="nav-item"> <a class="nav-link p-0" href="/Projects"> פרוייקטים </a> </li> <li class="nav-item"> <a class="nav-link p-0" href="/Customers"> הלקוחות שלנו </a> </li> <li class="nav-item"> <a class="nav-link p-0" href="/JoinUs"> קריירה </a> </li> <li class="nav-item active"> <a class="nav-link p-0" href="/Articles"> בלוג </a> </li> <li class="nav-item cms-item"> <a class="btn rounded-corners transparent cms-button" href="https://tamka-cms.com" target="_blank"> <img src="/images/tamka-logo-white2.png" /> </a> </li> <li class="nav-item"> <a class="btn rounded-corners" href="/ContactUs">דברו איתנו</a> </li> <li class="nav-item"> <a href="#" class="nav-link p-0" ng-click="switchLang($event)">EN</a> </li> </ul> </div> </nav> </div> </header> <main class="article-page"> <div class="article-img"> <img src="https://yit.co.il/images/articles/AmazonWebservices_Logo.jpg" alt="" class="img-fluid" /> <div class="d-imgwrp" style="background: url(https://yit.co.il/images/articles/AmazonWebservices_Logo.jpg) no-repeat center"></div> </div> <section class="container-fluid a-container"> <h1 class="article-title">Amazon Elastic Transcoder</h1> <div class="ad-s clearfix"> <div class="ad"> <span class="author">אורן מונדשיין</span> <span class="sep">|</span> <span class="date">05.06.2018</span> </div> <div class="share row"> <a href="#" class="share-icon f-icon"> <img src="/images/icons/facebook.svg" alt="פייסבוק" /> </a> <a href="#" class="share-icon t-icon"> <img src="/images/icons/twitter-icon.svg" alt="טוויטר" /> </a> <a href="#" class="w-icon share-icon"> <img src="/images/icons/whatsapp-icon.svg" alt="וואטסאפ" /> </a> </div> </div> <article class="article"> <div class="article-short"> סקירת מקודד הווידאו האלסטי של אמזון </div> <div class="main-cont"> <p><img src="/images/articles/elastic_trans.png" alt="" class="img-fluid" /></p> <p><strong>מבוא</strong><br /> המקודד האלסטי של אמזון מאפשר להמיר קבצי מדיה אשר מאוחסנים בשירות אחסון הקבצים הפשוט של אמזון (Amazon S3) לקובצי מדיה בפורמטים הדרושים לניגון ע"י מכשירים ונגנים. לדוגמה ניתן להמיר קובץ גדול באיכות גבוה לפורמט שהמשתמש יכול לנגן במכשיר הנייד, בטבלט, בדפדפן או בטלוויזיה וכמובן במחשב. </p> <p>למקודד האלסטי יש ארבעה רכיבים:</p> <p><strong>משימות (Jobs)</strong><br />תפקיד המשימה היא לבצע את פעולת ההמרה. כל משימה ממירה קובץ אחד לעד 30 פורמטים. לדוגמה אם רוצים להמיר קובץ מדיה לשישה פורמטים שונים, ניתן לבצע זאת תחת משימה אחת. כאשר יוצרים משימה, מציינים את שם הקובץ שרוצים להמיר, את השם של הקובץ המומר ועוד כמה פרמטרים. לכל פורמט יש את התבנית שלו (תצורה\Preset), אשר מכילה את הגדרות האודיו והווידאו שיש לעשות בהם שימוש.</p> <p><strong>הצינור (Pipeline)</strong><br />הצינור הוא למעשה תור המנהל את המשימות. כאשר יוצרים משימה, מציינים לאיזה צינור יש לשייך אותה. המקודד האלסטי מתחיל לעבד את המשימות בצינור באותו הסדר כפי שנכנסו לתור. אם הגדרנו שמשימה תקודד ליותר מפורמט אחד, המקודד האלסטי יוצר את הקבצים לפי הסדר בו הם מופיעים במשימה. נהוג ליצור שתי צינורות אחד עבור עדיפות רגילה ואחד עבור עדיפות גבוה. רוב העבודה הולכת לעדיפות הרגילה, אך כאשר יש וידאו דחוף ניתן לשלוח אותו לצינור בעל העדיפות הגבוה לביצוע מיידי.</p> <p><img src="/images/articles/elastic_pipes.png" alt="" class="img-fluid" /> </p> <p>אם צינור כבר מבצע משימות בזמן שמייצרים משימה חדשה, אז המקודד האלסטי ישים את המשימה החדשה בתור ויבצע את הקידוד ברגע שיתאפשר. אם צינור עושה שימוש בכל המשאבים המוקצים לו אז המקודד האלסטי ימתין לאחת המשימות שתסתיים.</p> <p>הצינור יכול לטפל ביותר ממשימה אחת בו זמנית והזמן שלוקח לסיים משימה משתנה משמעותית לפי הגודל של הקובץ שממירים ולפי המאפיינים של המשימה. לכן, המשימות לא בהכרח צפויות להסתיים באותו הסדר לפיו הם נוצרו.</p> <p><strong>תצורה (Preset)</strong><br />תצורות הם תבניות שמכילות את רוב ההגדרות עבור קידוד קבצי המדיה מפורמט אחד לפורמט אחר. המקודד האלסטי כולל כמה תצורות כברירת מחדל עבור פורמטים נפוצים, למשל עבור מכשירים שונים של חברת אפל. ניתן ליצור גם תצורות משלנו עבור פורמטים שאינם כלולים מראש. אנו בוחרים באיזה תצורה להשתמש כאשר אנחנו יוצרים משימה.</p> <p> <strong>הודעות (Notifications)</strong><br /> במידה ואנו חפצים בכך, המקודד האלסטי יכול לשלוח לנו הודעות באמצעות מוצר נוסף של אמזון בשם הודעות פשוטות (Amazon Simple Notification Service). למשל כאשר מתחיל קידוד, או מסתיים, או שיש הזהרות או שגיאות במהלך ביצוע הקידוד. הודעות אילו חוסכות מאיתנו לבדוק שוב ושוב האם תהליך הקידוד הסתיים. את ההודעות מגדירים כאשר יוצרים את הצינור. </p> <p> <strong>דלי (Amazon S3 Bucket)</strong><br /> אמזון S3 הוא פתרון אחסון בענן עבור האינטרנט. על מנת לטעון את המידע שלנו בענן של אמזון, תחילה עלינו ליצור דלי (Bucket) באחד האזורים הגאוגרפיים של הענן של אמזון. לאחר מכן מעלים לתוכו את כל האובייקטים לו אנו זקוקים. במקרה של המקודד האלסטי מדובר בסרטים, אך ניתן לעלות למעשה כל סוג של קובץ לתוך הדלי. המקודד האלסטי יודע לעבוד עם שלושה דליים, אחד עבור הסרטים שאנחנו מעלים לצורך הקידוד, אחד בשביל הסרטים שהמקודד יצר ועוד אחד עבור תמונות אצבע (Thumbnails) במידה ונגדיר שאנו חפצים בהם. </p> <p><img src="/images/articles/elastic_bucket.png" alt="" class="img-fluid" /></p> <p> <strong>כיצד משתמשים?</strong><br /> על מנת להשתמש המקודד האלסטי של אמזון תחילה יש ליצור חשבון בענן של אמזון aws. במידה ועדיין אין חשבון ניתן ליצור חשבון חדש ולקבל הטבה בצורה של סל ומוצרים בסיסיים חינמיים למשך שנה שלמה, זאת בנוסף לסל מוצרים חינמיים נוספים שניתנים לכל החיים. המטרה בהטבה הזו היא לאפשר ללמוד ולהתרגל לעבוד עם המוצרים בענן של אמזון, כאשר עוברים את המכסה החינמית מתחילים לשלם. מסיבה זו ומהצורך לזהות שמדובר בבן אדם ולא רובוט, השירות דורש כרטיס אשראי ואימות לרוב באמצעות שיחת טלפון אוטומטית מהירה. </p> <p> <strong>כמה זה עולה?</strong><br /> התמחור של השירות פשוט מאוד, עבור סרט באיכות גבוה - 720p ומעלה המחיר הוא $0.030 לדקה, מתחת לזה המחיר הוא חצי, כלומר $0.015 לדקה, כאשר עבור קול בלבד המחיר הוא אפילו זול יותר, רק $0.0045 לדקה. בשביל מי שלא מקודד הרבה זה ממש מחיר מציאה, עבור מי שמקודד הרבה ורואה את אותם המחירים אצל המתחרים, חשוב להבין שכאן מקבלים תמורה טובה יותר ולא צריך לשלם פרימיום בשביל שדברים יעבדו לשביעות רצוננו. </p> <p> <strong>חסרונות?</strong><br /> חשוב להבין שהשירות שזה הוא שירות ותיק לטוב ולרע. לא נמצא כאן תכונות מתקדמות כפי שניתן למצוא בשירות אחר של אמזון להמרת מדיה (AWS Elemental MediaConvert) כמו איכות אולטרה (UHD/4K), או צבעים מפורמטים יותר (HDR/HDR10), הגנה על הסרטים (DRM) אפילו לא מעברים כפולים על המדיה או אינסוף פילטרים מתקדמים. אם צריך את זה אז פשוט אפשר להשתמש בשירות החדש יותר, אבל אם לא אז היתרון של השירות הזה הוא בפשטות. הממשק פשוט, נקי וקל ללימוד ועושה בדיוק מה שצריך ברוב המקרים. למעשה באמזון לא צריך לבחור, אפשר להשתמש בשניהם ולשלם לפי השימוש בלבד. </p> <p> חסרון נוסף הוא שאין ספריה חמה, אבל אפשר ליצור ספריה חמה באמצעות קוד. אמזון מאוד ידידותית למפתחים ומציעה סל מגוון של פתרונות למפתחים. </p> <p> <strong>כיצד המוצר עובד?</strong><br /> לאחר שהבנו מה נותן השירות, מה הוא לא נותן וכמה הוא עולה, בואו נעשה ניסוי קטן עם עשרה סרטים אופיינייים. לקחתי עשרה סרטים באורכים אופייניים של שלוש וחצי דקות עד רבע שעה, בגדלים של 400-1100 מגה, בפורמטים של MP4,MOV וברוחבי פס גבוהים מדי עבור האינטרנט שאותם רציתי לקודד לצורך הדוגמה לשלושה פורמטים מקובלים 1080p,720p,480p. </p> <p><img src="/images/articles/elastic_files.png" alt="" class="img-fluid" /></p> <p> <strong>יצירת אחסון S3</strong><br /> תחילה יצרתי שלושה דליים (Buckets), אחד עבור הקבצים המקוריים שלי, אחד בשביל הווידאו שנוצר ע"י המקודד ועוד אחד עבור תמונות אצבע (Thumbnails) שלא עשיתי בו שימוש בדוגמה זו. בשביל הסדר הטוב ניתן ליצור בדלי מחיצות לכאורה ולהרגיש שיש לנו ספקיות ותת ספריות שמסייעות לנו לארגן את הקבצים, כדי לדעת שבפועל זה רק סמנטי וכל האובייקטים בדלי של S3 נמצאים בפועל באותה הספריה. כלומר להרגיש עם אבל בלי. </p> <p> <strong>טעינת קבצים</strong><br /> טענתי עשרה קבצים טיפוסיים למאגר של הווידאו המקורי לתוך מחיצה (לכאורה כי זה רק חלק מהשם של האובייקט ולא באמת מחיצה), זמן הטעינה לכל העשרה עמד על דקות ספורות והתבצע במקביל (בניגוד לשרותים אחרים שטוענים אחד אחרי השני). לצורך זה עשיתי שימוש בתוכנה לניהול קבצים מבית CloudBerry המאפשרת לנהל את הקבצים בענן בדיוק כפי שמנהלים קבצים במחשב המקומי או בכל מקום אחר. </p> <p><img src="/images/articles/elastic_cloud_berry.png" alt="" class="img-fluid" /></p> <p> <strong>הגדרת הצינור</strong><br /> לחיצה על הכפתור Create New Pipeline מובילה למסך בו נותנים שם לצינור, בוחרים את הדלי שהעלנו אליו את הסרטים המקוריים, בפעם הראשונה מאפשרים למקודד האלסטי ליצור אוטומטי חוק המאפשר למקודד לגשת לדליים עם הקבצים ולשרות ההודעות בשמנו. בפעמים הבאות ניתן למחזר את אותו החוק. בוחרים את הדלי אליו יעברו הקבצים המקודדים ואת סוג האחסון סטנדרטי או יתירות מופחתת. לצורך הבדיקה אפשר לדלג על שאר האופציות ולעבור לשלב הבא. </p> <p><img src="/images/articles/elastic_pipe.png" alt="" class="img-fluid" /></p> <p> <strong>הגדרת משימה</strong><br /> במסך זה נבחר בצינור שהגדרנו שיופיע אוטומטית, ניתן לספק תחילית לקבצים שנוצרו, למשל שם ספריה (למרות שב-S3 אין באמת ספריות). יש לבחור בסרט שרוצים לקודד שיופיע כאופציה שנתחיל להקליד. יש לבחור בתצורה רצויה מתוך המבחר העשיר (במידה ואין ניתן להגדיר נוספים) וכמובן את שם הקובץ הרצוי, שאליו יתווסף ה-Prefix במידה ובחרנו בכך. זה מספיק על מנת ליצור משימת קידוד חדשה, נלחץ על Create New Job, המשימה תרוץ ותסתיים בעוד זמן קצר. </p> <p><img src="/images/articles/elastic_job.png" alt="" class="img-fluid" /></p> <p>טיפ: אחרי שיוצרים משימה יופיע כפתור Copy, לחיצה עליו תפתח את המסך עם הנתונים הקודמים. מניסיוני האישי זה מאפשר להזין משימות נוספות במהירות הבזק וביעילות.</p> <p> <strong>זמן הקידוד</strong><br /> ערכתי שלושה ניסיונות, עבור איכויות של 1080,720,480, להלן התוצאות: </p> <p> זמן הקידוד באיכות 1080 עמד על כ-8 דקות בלבד לכולם, זמן הקידוד באיכות 720 עמד על כ-5 דקות בלבד לכולם, זמן הקידוד באיכות 480 עמד על כ-5 דקות בלבד לכולם. </p> <p> אני מרוצה מהתוצאות מכיוון שלמעשה ברגע שסיימתי להזין את המשימה הראשונה והמקודד התחיל לעבוד לחצתי 9 פעמים על Copy ורק שיניתי את שם הקובץ שהופיעה אוטומטית והוספתי בזריזות את המשימות הנותרות. עד שבדקתי מה המצב כבר שמונה סיימו ואז ראיתי את התשיעי והעשירי מסיימים. כל התהליך זרם מהר לשביעות רצוני. </p> <p> טיפ, בזמן שקודדתי את עשרת הסרטים לפורמט 480p, באותו הזמן המקודד המתחרה עשה רק 15% מקובץ בודד, כלומר באופן יחסי המקודד האלסטי של אמזון מהיר מאוד מהמתחרים. </p> <p> <strong>אינטגרציה</strong><br /> במידה ומעוניינים בספריות חמות או בפתרון מקצה לקצה ניתן לכתוב זאת באמצעות סל מוצרי הפיתוח העשיר בענן של אמזון או לחליפין להשתמש תבנית (AWS CloudFormation templates) שבונה פתרון קידוד שלם המ אוטומטית מקצה לקצה עבור וידאו לפי דרישה (Video on Demand on AWS) החל מהטענת חומרי הגלם (עם או בלי metadata), אם אפשרות לגיבוי קר של חומר הגלם (Amazon Glacier Archive), ניהול\מעקב באמצעות בסיס נתונים (Amazon Dynamodb), שליחת סטטוס בעזרת שירות ההודעות הפשוט (Amazon SNS topics) והגשה באמצעות ה-CDN של אמזון (Amazon CloudFront). </p> <p> התהליך מבוסס על מיקרו שרותים מתקדמים (Amazon Step Functions/Lambda Function) וכמובן עושה שימוש מרכזי במקודד האלסטי או המקודד האלמנטרי (עם שינוי קל בארכיטקטורה). </p> <p><img src="/images/articles/elastic_template.png" alt="" class="img-fluid" /></p> <p> <strong>לסיכום</strong><br /> המקודד האלסטי של אמזון הישן (2012) והטוב עדיין עושה את עבודתו בפשטות וביעילות ובמחיר סטנדרטי הדומה למתחרים וללא צורך לשלם פרימיום על מנת שיעשה את עבודתו קצת יותר מהר. במידה וצריך לקודד בצורה מתקדמת יותר תמיד ניתן להשתמש במקודד מדיה החדש יותר של אמזון, אבל אם רוצים ממשק פשוט ולעניין אז ברוב המקרים המקודד האלסטי יעשה את העבודה בזריזות וביעילות. </p> </div> </article> </section> <section class="more-articles"> <h3 class="ma-title a-container container-fluid">עוד כתבות שיעניינו אתכם:</h3> <div class="m-cont row"> <button class="ma-right"> <img src="/images/articles/arrow-right.png" alt="ימינה" /> </button> <div class="ma-carousel owl-carousel"> <a class="ma-item" href="https://yit.co.il/article/5"> <div class="m-img"> <img src="https://yit.co.il/images/articles/amain.jpg" alt="" /> </div> <div class="m-txt"> חדשנות על הקצה: הטייק שלנו מכנס &quot;Innov8rs 2018&quot; </div> </a> <a class="ma-item" href="https://yit.co.il/article/7"> <div class="m-img"> <img src="https://yit.co.il/images/articles/bmain.jpg" alt="" /> </div> <div class="m-txt"> Smart Assistant </div> </a> <a class="ma-item" href="https://yit.co.il/article/8"> <div class="m-img"> <img src="https://yit.co.il/images/articles/mentoring.jpg" alt="" /> </div> <div class="m-txt"> YIT Mentoring 2018 </div> </a> <a class="ma-item" href="https://yit.co.il/article/10"> <div class="m-img"> <img src="https://yit.co.il/images/articles/dd.jpg" alt="" /> </div> <div class="m-txt"> YIT Sorenson Squeeze Server 4 </div> </a> <a class="ma-item" href="https://yit.co.il/article/12"> <div class="m-img"> <img src="https://yit.co.il/images/articles/typography.jpg" alt="" /> </div> <div class="m-txt"> Best Fonts </div> </a> </div> <button class="ma-left"> <img src="/images/articles/arrow-left.png" alt="שמאלה" /> </button> </div> </section> </main> <section id="contact-form-section"> <div class="container"> <div class="row justify-content-center"> <div class="col-xxl-2 col-lg-2"> <div class="wrapper h-100 d-lg-flex flex-column"> <span class="h3"> {{footerStrings.span1}}&nbsp;</span> <span class="h3"> {{footerStrings.span2}} </span> <span class="h3"> {{footerStrings.span3}}</span> </div> </div> <div class="col-xxl-6 col-lg-8 d-flex flex-lg-row flex-column justify-content-between"> <fieldset> <div class="form-group"> <input type="text" class="form-control input-name" id="" aria-describedby="emailHelp" placeholder="{{footerStrings.name}}"> </div> <div class="form-group"> <input type="email" class="form-control input-email" id="" aria-describedby="emailHelp" placeholder="{{footerStrings.mail}}"> </div> <div class="form-group"> <input type="text" class="form-control input-phone" id="" aria-describedby="emailHelp" placeholder="{{footerStrings.phone}}"> </div> </fieldset> <fieldset> <div class="form-group message-group d-flex justify-content-end"> <textarea class="form-control" id="" placeholder="{{footerStrings.text}}" rows="3"></textarea> </div> </fieldset> </div> </div> <div class="row justify-content-center"> <div class="col-xxl-2 col-lg-2 no-gutters"> </div> <div class="col-xxl-4 col-lg-4 no-gutters privacyDiv"> <input type="checkbox" id="privacyCheckbox" class="privacyCheckbox"> <label for="privacyCheckbox" class="privacyCheckboxLabel">{{footerStrings.privacyText}} <a href="/Privacy.pdf" class="privacyHref">{{footerStrings.privacyLink}}</a></label> <br /> <label id="privacyErr" class="privacyErr">{{footerStrings.privacyErr}}</label> </div> <div class="col-xxl-2 col-lg-4 no-gutters text-right"> <div class="btn rounded-corners whited"> {{footerStrings.btn}} </div> </div> </div> </div> </section> <!-- footer --> <footer class="py-5"> <div class="container"> <div class="row justify-content-center pb-1"> <div class="col-lg-1 col-3 text-center"> <a href="/"><img class="img-fluid logo" alt="logo"></a> </div> </div> <div class="row justify-content-center"> <div class="col-xl-8 col-lg-6 col-md-8 col-12 d-flex justify-content-center"> <ul class="d-flex align-items-center flex-lg-row flex-column" id="footer-contact"> <li><a href="tel:03-6082888">03-6082888</a></li> <li ng-if="lang =='eng'">Mozes 1st, Rishon Letsion</li> <li ng-if="lang =='heb'">נח מוזס 1 , ראשון לציון</li> <!--<li class="hide"><a href="mailto:a@a.com">yit@mail.co.il</a></li>--> </ul> </div> </div> </div> </footer> <!-- jQuery first, then Tether, then Bootstrap JS. --> <script src="/scripts/tether.min.js" type="text/javascript"></script> <script src="/scripts/bootstrap.min.js" type="text/javascript"></script> <script src="/Built/main.bundle.js" type="text/javascript"></script> <div id="loader"> <div class="container"> <i class="fa fa-spinner rotateme" aria-hidden="true"></i> </div> </div> <div id="async-message" class="text-center async-msg"> <div class="container"> <div class="close_message"> </div> <img src="/images/thanks.png" alt="" /> <script> $("#async-message").on("click", function (e) { $("#async-message").fadeOut(); }); </script> </div> </div> <a href="tel:03-6082888"> <img id="cnt-lnk" src="/images/Contact.png" /> </a> <!-- Paste the following code at the bottom of the page --> <!-- Accessibility - yit.co.il (SSL)--> <script data-cfasync="false"> window.interdeal = { sitekey: "df0125ca4d6d72bdd6b86904d39ab89b", Position: "Right", Menulang: "HE" } </script> <script src="https://js.nagich.co.il/core/1.0.0/accessibility.js" async data-cfasync="false" integrity="sha512-Y0NPyyjfphZPEfVALhzp3qc97KN78bvQxYuL+Rm8EFUg9sPbyxUlDwtnxgazCw40Y5eqFlLoBG/GbMe9+uEibA==" crossorigin="anonymous"></script> <script> var AppSettings = { baseUrl: 'https://yit.co.il', reCaptchaSiteKey : '6Ld3AcwpAAAAACIE5lNwCGTDirYAsGncaRk66854' }; </script> <script> $('document').ready(function () { var articleCtrl = new ArticleCtrl(); }); </script> <script src="/Scripts/vendors/owlCarousel/2.3.3/owl.carousel.js"></script> <script src="/Scripts/yit/articles/ArticleCtrl.js"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10