{"id":21917,"date":"2019-07-17T15:50:35","date_gmt":"2019-07-17T15:50:35","guid":{"rendered":"http:\/\/video_manipulations_and_delivery_for_angular_video_apps"},"modified":"2025-03-02T14:23:47","modified_gmt":"2025-03-02T22:23:47","slug":"video_manipulations_and_delivery_for_angular_video_apps","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps","title":{"rendered":"Video Manipulations and Delivery for Angular Video Apps with Cloudinary"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>On social media, <a href=\"https:\/\/cloudinary.com\/video_api\">videos<\/a> posted by users constitute a significant amount of the content appeal on those platforms. From upload to manipulation to delivery, a smooth, efficient, and effective pipeline for the posting process is mandatory to ensure consistent user sessions and their steadily increasing volume. However, building such an infrastructure is a complex, labor-intensive, and problem-prone undertaking.<\/p>\n<p>Enter Cloudinary, whose capabilities impressively form such an infrastructure. This article shows you how to manipulate, transform, and deliver videos in Angular apps with Cloudinary\u2019s robust drop-in components.<\/p>\n<h2>Installing the Angular SDK<\/h2>\n<p>To manipulate and transform videos while on Cloudinary, leverage the parameters in its Angular video component.<\/p>\n<p>First, install the Cloudinary SDK for your Angular version. Type this NPM command:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\"><span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">cloudinary-core<\/span> <span class=\"hljs-keyword\">@cloudinary<\/span>\/angular-5.x --save\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Afterwards, import from the SDK the <code>&lt;cl-video&gt;<\/code> component, which places in your app an HTML 5 video player. That player plays videos\u2014whether in <code>webm<\/code>, <code>ogv<\/code>, or <code>mp4<\/code> format\u2014without a glitch on all major web browsers.<\/p>\n<div class='c-callout  c-callout--inline-title c-callout--note'><strong class='c-callout__title'>Note:<\/strong> <p>AngularJS 1.x developers: You can obtain the <code>&lt;cl-video&gt;<\/code> component by typing this Bower command line:<\/p><\/div>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\"><span class=\"hljs-selector-tag\">bower<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">cloudinary_ng<\/span><span class=\"hljs-selector-id\">#1<\/span><span class=\"hljs-selector-class\">.x<\/span> <span class=\"hljs-selector-tag\">--save<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>You can now transform and manipulate videos with no need for a dedicated server. Read on for the specific tasks and their related procedures.<\/p>\n<h3>Transcoding Video Formats<\/h3>\n<p>The <code>format<\/code> parameter takes one of these three values: <code>webm<\/code>, <code>ogv<\/code>, and <code>mp4<\/code>.<\/p>\n<p>For example, to transcode the existing format of an Angular video called <code>cat<\/code> to the <code>webm<\/code> format, code as follows:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-video<\/span> <span class=\"hljs-attr\">public-id<\/span>=<span class=\"hljs-string\">\"cat\"<\/span> <span class=\"hljs-attr\">format<\/span>=<span class=\"hljs-string\">\"webm\"<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-video<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h3>Concatenating Angular Videos<\/h3>\n<p>To concatenate multiple Angular videos by overlaying one on top of another, specify the related values for the <code>overlay<\/code> parameter for the <code>&lt;cl-video&gt;<\/code> and <code>&lt;cl-transformation&gt;<\/code> components. For example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-video<\/span> <span class=\"hljs-attr\">public-id<\/span>=<span class=\"hljs-string\">\"footballer\"<\/span> &gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-transformation<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"400\"<\/span> <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">\"250\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"fill\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-transformation<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-transformation<\/span> <span class=\"hljs-attr\">overlay<\/span>=<span class=\"hljs-string\">\"video:ball\"<\/span> <span class=\"hljs-attr\">flags<\/span>=<span class=\"hljs-string\">\"splice\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"300\"<\/span> <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">\"200\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"fill\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-transformation<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-video<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h3>Adjusting Video Quality<\/h3>\n<p>The <code>quality<\/code> parameter takes any value between 0 and 100. The lower the value, the smaller the video size. By specifying a value for <code>quality<\/code>, you set the level of quality you desire for the video size at delivery.<\/p>\n<p>For example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-video<\/span> <span class=\"hljs-attr\">public-id<\/span>=<span class=\"hljs-string\">\"drink\"<\/span> &gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-transformation<\/span> <span class=\"hljs-attr\">quality<\/span>=<span class=\"hljs-string\">\"60\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-transformation<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-video<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h3>Controlling the Playback Speed<\/h3>\n<p>While playing videos, users often accelerate or reduce the playback speed to accommodate various scenarios. For example, to watch as many course videos offered by a time-limited subscription as possible, a user might choose to skim through some of them.<\/p>\n<p>To enable control of playback speed, specify a value of between -50 and 100 for the <code>accelerate<\/code> attribute in the <code>effect<\/code> parameter.<\/p>\n<div class='c-callout  c-callout--inline-title c-callout--note'><strong class='c-callout__title'>Note:<\/strong> <p>That value applies to both acceleration and deceleration. For example:<\/p><\/div>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-video<\/span> <span class=\"hljs-attr\">public-id<\/span>=<span class=\"hljs-string\">\"dog\"<\/span> &gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-transformation<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"300\"<\/span> <span class=\"hljs-attr\">effect<\/span>=<span class=\"hljs-string\">\"accelerate:100\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"scale\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-transformation<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-video<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h3>Generating Video Previews With AI<\/h3>\n<p>AI automatically identifies the appealing excerpts of a video and generates a preview version of the duration that you specify. Code as follows:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-video<\/span> <span class=\"hljs-attr\">public-id<\/span>=<span class=\"hljs-string\">\"afcon\"<\/span> &gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-transformation<\/span> <span class=\"hljs-attr\">effect<\/span>=<span class=\"hljs-string\">\"preview:duration_10\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-transformation<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-video<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>The value <code>10<\/code> above denotes 10 minutes. You can specify any value between [?] and [?].<\/p>\n<div class='c-callout  c-callout--inline-title c-callout--note'><strong class='c-callout__title'>Note:<\/strong> <p>This feature, currently in Beta, truly rocks! Do take a spin with it. You\u2019ll be awed.<\/p><\/div>\n<h3>Adding Captions and Subtitles<\/h3>\n<p>To add a caption to a video, specify the caption\u2019s font type, font size, wording, and such for the <code>text<\/code> attribute in the <code>overlay<\/code> parameter. Here is a self-explanatory code example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-video<\/span> <span class=\"hljs-attr\">public-id<\/span>=<span class=\"hljs-string\">\"dog\"<\/span> &gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-transformation<\/span> <span class=\"hljs-attr\">overlay<\/span>=<span class=\"hljs-string\">\"text:arial_60:Angular%20Video\"<\/span> <span class=\"hljs-attr\">gravity<\/span>=<span class=\"hljs-string\">\"south\"<\/span> <span class=\"hljs-attr\">y<\/span>=<span class=\"hljs-string\">\"80\"<\/span> <span class=\"hljs-attr\">start-offset<\/span>=<span class=\"hljs-string\">\"2\"<\/span> <span class=\"hljs-attr\">end-offset<\/span>=<span class=\"hljs-string\">\"5\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-transformation<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-video<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>As soon as that video called dog starts playing, its text caption, Angular Video, is displayed.<\/p>\n<p>To add subtitles to a video as an overlay, specify in the <code>overlay<\/code> parameter the font type and size that you desire along with the name of the related SRT file. For example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-video<\/span> <span class=\"hljs-attr\">public-id<\/span>=<span class=\"hljs-string\">\"cat\"<\/span> &gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cl-transformation<\/span> <span class=\"hljs-attr\">overlay<\/span>=<span class=\"hljs-string\">\"subtitles:arial_20:sample_sub_en.srt\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-transformation<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cl-video<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p><strong>Reminder:<\/strong> Be sure to upload the SRT<code>.srt<\/code> file to Cloudinary first.<\/p>\n<p>For other transformations you can apply to Angular videos, see the <a href=\"https:\/\/cloudinary.com\/documentation\/video_manipulation_and_delivery\">related documentation<\/a>.<\/p>\n<h2>Browsing Other References<\/h2>\n<p>The following Cloudinary documentation contains many nuances that are worth a look:<\/p>\n<ul>\n<li>A complete <a href=\"https:\/\/cloudinary.com\/documentation\/video_manipulation_and_delivery#quality_control\">reference<\/a> on video manipulation and transformation with Cloudinary.<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_sdks\">SDKs and libraries: server side, client side, and mobile<\/a>\n<\/li>\n<\/ul>\n<hr \/>\n<h2>Further Reading on Video Manipulation<\/h2>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/video_api\">Video Transcoding\nand Manipulation<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/top_10_mistakes_in_handling_website_videos_and_how_to_solve_them\">Top 10 Mistakes in Handling Website Videos and How to Solve Them<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/how_to_automate_compression_of_video_files_with_one_line_of_code\">How to Compress Video Size Automatically With One Line of Code<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/exoplayer_android_tutorial_easy_video_delivery_and_editing\">ExoPlayer Android Tutorial: Easy Video Delivery and Editing<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/html5_video_player\">Ultimate HTML5 Video Player Showdown: 10 Players Compared<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/how_to_generate_waveform_images_from_audio_files\">How to Generate Waveform Images From Audio Files<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/with_automatic_video_subtitles_silence_speaks_volumes\">Auto Generate Subtitles Based on Video Transcript<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/auto_generate_video_previews_with_great_results_every_time\">Auto-Generate Video Previews with Great Results Every Time<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/html5_video_tags_won_t_do_for_your_videos\">Adaptive HLS Streaming Using the HTML5 Video Tag<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/optimizing_video_with_cloudinary_and_the_html5_video_player_part_1\">Video Optimization With the HTML5 &lt;\\video&gt; Player<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/converting_android_videos_to_animated_gif_images_with_cloudinary_a_tutorial\">Converting Android Videos to Animated GIF Images With Cloudinary: A Tutorial<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":21918,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,263,303,305],"class_list":["post-21917","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-sdk","tag-video","tag-video-api"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Video Manipulations and Delivery for Angular Video Apps<\/title>\n<meta name=\"description\" content=\"This article shows you how to manipulate, transform, and deliver videos in Angular video apps with Cloudinary\u2019s robust drop-in components.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Video Manipulations and Delivery for Angular Video Apps with Cloudinary\" \/>\n<meta property=\"og:description\" content=\"This article shows you how to manipulate, transform, and deliver videos in Angular video apps with Cloudinary\u2019s robust drop-in components.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-17T15:50:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-02T22:23:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Video Manipulations and Delivery for Angular Video Apps with Cloudinary\",\"datePublished\":\"2019-07-17T15:50:35+00:00\",\"dateModified\":\"2025-03-02T22:23:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps\"},\"wordCount\":10,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA\",\"keywords\":[\"Asset Management\",\"SDK\",\"Video\",\"Video API\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2019\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps\",\"url\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps\",\"name\":\"Video Manipulations and Delivery for Angular Video Apps\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA\",\"datePublished\":\"2019-07-17T15:50:35+00:00\",\"dateModified\":\"2025-03-02T22:23:47+00:00\",\"description\":\"This article shows you how to manipulate, transform, and deliver videos in Angular video apps with Cloudinary\u2019s robust drop-in components.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Video Manipulations and Delivery for Angular Video Apps with Cloudinary\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Video Manipulations and Delivery for Angular Video Apps","description":"This article shows you how to manipulate, transform, and deliver videos in Angular video apps with Cloudinary\u2019s robust drop-in components.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps","og_locale":"en_US","og_type":"article","og_title":"Video Manipulations and Delivery for Angular Video Apps with Cloudinary","og_description":"This article shows you how to manipulate, transform, and deliver videos in Angular video apps with Cloudinary\u2019s robust drop-in components.","og_url":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps","og_site_name":"Cloudinary Blog","article_published_time":"2019-07-17T15:50:35+00:00","article_modified_time":"2025-03-02T22:23:47+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video-jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps"},"author":{"name":"","@id":""},"headline":"Video Manipulations and Delivery for Angular Video Apps with Cloudinary","datePublished":"2019-07-17T15:50:35+00:00","dateModified":"2025-03-02T22:23:47+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps"},"wordCount":10,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA","keywords":["Asset Management","SDK","Video","Video API"],"inLanguage":"en-US","copyrightYear":"2019","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps","url":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps","name":"Video Manipulations and Delivery for Angular Video Apps","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA","datePublished":"2019-07-17T15:50:35+00:00","dateModified":"2025-03-02T22:23:47+00:00","description":"This article shows you how to manipulate, transform, and deliver videos in Angular video apps with Cloudinary\u2019s robust drop-in components.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/video_manipulations_and_delivery_for_angular_video_apps#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Video Manipulations and Delivery for Angular Video Apps with Cloudinary"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721043\/Web_Assets\/blog\/Angular-Video\/Angular-Video.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21917","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21917"}],"version-history":[{"count":3,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21917\/revisions"}],"predecessor-version":[{"id":37090,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21917\/revisions\/37090"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21918"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21917"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21917"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}