{"id":37742,"date":"2025-06-05T07:00:00","date_gmt":"2025-06-05T14:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=37742"},"modified":"2025-06-05T17:09:18","modified_gmt":"2025-06-06T00:09:18","slug":"live-stream-prerecorded-video","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video","title":{"rendered":"Live Stream a Prerecorded Video With Cloudinary"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Live streaming prerecorded video content is a pretty common practice. You might want to use prerecorded content instead of an actual live stream for many reasons. From a high level perspective, some of the benefits are:<\/p>\n<ul>\n<li>\n<strong>Convenience and control.<\/strong> You can plan and edit everything up front without any surprises.<\/li>\n<li>\n<strong>\u201cLive\u201d experiences.<\/strong> Users can tune in and engage with your video as if it were a live event.<\/li>\n<\/ul>\n<p>Some common use cases might be webinars, product launches, online education, and marketing events. Plan your content, promote it, and bring it to your customers at a set time and date!\nIf you\u2019re familiar with Cloudinary, you won\u2019t be surprised to hear that the <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_video_player\">Cloudinary Video Player<\/a> simplifies things quite a bit. This post will walk through the steps and requirements for putting together a simulated live streaming experience.<\/p>\n<h2>How It Works<\/h2>\n<p>Before we move forward and implement a <a href=\"https:\/\/cloudinary.com\/documentation\/simulated_live_streaming\">simulated live streaming<\/a> setup, it will be useful to understand how it works.\nThe magic happens by telling the video player that the content is live, disabling the time controls, and providing a time to start the video playback.\nThe first couple of parts just require some simple settings on the Cloudinary Video Player. The last part will most commonly be implemented on a server. We\u2019ll get into more details on that later.<\/p>\n<h2>Step 1: Upload a Video to \u2018Live\u2019 Stream<\/h2>\n<p>The easiest way to upload your video to Cloudinary is through the console. There\u2019s a big blue <strong>Upload<\/strong> button at the top right of the console navigation bar. You can also upload your video directly for your website or application using one of the <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_sdks\">Cloudinary SDKs<\/a>.\nOnce your video is <a href=\"https:\/\/cloudinary.com\/documentation\/media_library_upload_tutorial\">uploaded to your Cloudinary media library<\/a>, you\u2019re ready to start simulating a live stream.<\/p>\n<h2>Step 2: Create a Start Time Service\/Endpoint<\/h2>\n<p>This can be done in a number of different ways. The key is that you have a way to tell the video player where to start the playback. Your service needs to know when the live stream is scheduled to start and the length of the video. Based on this, you can calculate where to start the video.\nHere\u2019s an example if you hardcode the start time directly on the web page using JavaScript:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">let<\/span> offsetTimeFromServer = <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\"><\/span>) <\/span>{\n  <span class=\"hljs-comment\">\/\/ Define the fixed start time of the event (Unix timestamp in seconds)<\/span>\n  <span class=\"hljs-comment\">\/\/ This could be fetched from a database<\/span>\n  <span class=\"hljs-keyword\">const<\/span> startTime = <span class=\"hljs-number\">1623765482<\/span>;\n\n  <span class=\"hljs-comment\">\/\/ Get the current time in Unix timestamp format (seconds)<\/span>\n  <span class=\"hljs-keyword\">const<\/span> timeNow = <span class=\"hljs-built_in\">Math<\/span>.floor(<span class=\"hljs-built_in\">Date<\/span>.now() \/ <span class=\"hljs-number\">1000<\/span>);\n\n  <span class=\"hljs-comment\">\/\/ Calculate the offset (how much time has passed since the event started)<\/span>\n  <span class=\"hljs-keyword\">return<\/span> timeNow - startTime;\n};\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>You could easily add similar code on your server that can fetch all the related details like start time and video URL from a database.<\/p>\n<h2>Step 3: Configure the Video Player<\/h2>\n<p>The Cloudinary Video Player can be installed on your <a href=\"https:\/\/cloudinary.com\/documentation\/video_player_tutorials\">web page or frontend framework of choice<\/a>. We\u2019ll use HTML and vanilla JavaScript for this tutorial.\nWe\u2019re adding a video element to play our live stream, our function to get the live stream start time (this could be a fetch request to your server), and loading the <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_video_player#option_2_include_the_video_player_directly_from_a_cdn_provider\">Cloudinary Video Player from a CDN<\/a>.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span> <span class=\"hljs-attr\">lang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">charset<\/span>=<span class=\"hljs-string\">\"UTF-8\"<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"viewport\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"width=device-width, initial-scale=1.0\"<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>Simulated Live Streaming<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"max-width: 600px\"<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">video<\/span>\n        <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"doc-player\"<\/span>\n        <span class=\"hljs-attr\">controls<\/span>\n        <span class=\"hljs-attr\">muted<\/span>\n        <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"cld-video-player cld-fluid vjs-live\"<\/span>\n      &gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">video<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n\t\t\t<span class=\"hljs-keyword\">let<\/span> offsetTimeFromServer = <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\"><\/span>) <\/span>{\n\t\t\t  <span class=\"hljs-comment\">\/\/ Define the fixed start time of the event (Unix timestamp in seconds)<\/span>\n\t\t\t  <span class=\"hljs-comment\">\/\/ This should be updated dynamically or set close to the actual start time<\/span>\n\t\t\t  <span class=\"hljs-keyword\">const<\/span> startTime = <span class=\"hljs-number\">1623765482<\/span>;\n\n\t\t\t  <span class=\"hljs-comment\">\/\/ Get the current time in Unix timestamp format (seconds)<\/span>\n\t\t\t  <span class=\"hljs-keyword\">const<\/span> timeNow = <span class=\"hljs-built_in\">Math<\/span>.floor(<span class=\"hljs-built_in\">Date<\/span>.now() \/ <span class=\"hljs-number\">1000<\/span>);\n\n\t\t\t  <span class=\"hljs-comment\">\/\/ Calculate the offset (how much time has passed since the event started)<\/span>\n\t\t\t  <span class=\"hljs-keyword\">return<\/span> timeNow - startTime;\n\t\t\t};\n    <\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n    <span class=\"hljs-comment\">&lt;!-- Load Cloudinary Video Player from CDN --&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"stylesheet\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"https:\/\/cdn.jsdelivr.net\/npm\/cloudinary-video-player@2.3.3\/dist\/cld-video-player.min.css\"<\/span> <span class=\"hljs-attr\">crossorigin<\/span>=<span class=\"hljs-string\">\"anonymous\"<\/span> <span class=\"hljs-attr\">referrerpolicy<\/span>=<span class=\"hljs-string\">\"no-referrer\"<\/span> \/&gt;<\/span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/cdn.jsdelivr.net\/npm\/cloudinary-video-player@2.3.3\/dist\/cld-video-player.min.js\"<\/span> <span class=\"hljs-attr\">crossorigin<\/span>=<span class=\"hljs-string\">\"anonymous\"<\/span> <span class=\"hljs-attr\">referrerpolicy<\/span>=<span class=\"hljs-string\">\"no-referrer\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/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\">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>Now, we\u2019ll need to hook up our live stream video and configure the video player for a simulated live stream.\nFirst, we\u2019ll need some styles to hide the controls from the video player:<\/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\">style<\/span>&gt;<\/span><span class=\"css\">\n\t<span class=\"hljs-selector-class\">.cld-video-player<\/span> <span class=\"hljs-selector-class\">.vjs-control-bar<\/span> <span class=\"hljs-selector-class\">.vjs-progress-control<\/span> {\n\t    <span class=\"hljs-attribute\">display<\/span>: none;\n\t}\n\t<span class=\"hljs-selector-tag\">div<\/span><span class=\"hljs-selector-class\">.vjs-control-bar<\/span> &gt; <span class=\"hljs-selector-tag\">div<\/span><span class=\"hljs-selector-class\">.vjs-live-control<\/span><span class=\"hljs-selector-class\">.vjs-control<\/span> {\n\t    <span class=\"hljs-attribute\">display<\/span>: block;\n\t}\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/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<p>Next, we\u2019ll add to the JavaScript on our page to load our live stream video and start it from the calculated time for our live stream. You\u2019ll need to add your Cloudinary cloud name and have the public id or public URL for the video that you will be streaming.<\/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\">script<\/span>&gt;<\/span><span class=\"javascript\">\n\t<span class=\"hljs-comment\">\/\/ ^ Existing JS code<\/span>\n\t\n\t<span class=\"hljs-comment\">\/\/ Get a handle to the Cloudinary Video Player by its id (\u201cdoc player\u201d)<\/span>\n\t<span class=\"hljs-keyword\">const<\/span> demoplayer = cloudinary\n\t  .videoPlayer(<span class=\"hljs-string\">'doc-player'<\/span>, { <span class=\"hljs-attr\">cloudName<\/span>: <span class=\"hljs-string\">'demo'<\/span> })\n\t  .width(<span class=\"hljs-number\">600<\/span>);\n\t  \n\t<span class=\"hljs-comment\">\/\/ Public ID or video URL<\/span>\n\t<span class=\"hljs-keyword\">const<\/span> videoSource = <span class=\"hljs-string\">'products\/shoe_launch'<\/span>;\n\n\t<span class=\"hljs-comment\">\/\/ Get a reference to the player controls<\/span>\n\t<span class=\"hljs-keyword\">const<\/span> liveControls = <span class=\"hljs-built_in\">document<\/span>.getElementsByClassName(<span class=\"hljs-string\">'vjs-live-control'<\/span>);\n\n\t<span class=\"hljs-comment\">\/\/ Load the stream video in<\/span>\n\tdemoplayer.source(videoSource);\n\t\n\t<span class=\"hljs-comment\">\/\/ Start the video from the calculated start time<\/span>\n\tdemoplayer.on(<span class=\"hljs-string\">'play'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\"><\/span>) <\/span>{\n\t  liveControls&#91;<span class=\"hljs-number\">0<\/span>].classList.remove(<span class=\"hljs-string\">'vjs-hidden'<\/span>);\n\n\t  <span class=\"hljs-keyword\">const<\/span> offset = offsetTimeFromServer();\n\t  <span class=\"hljs-keyword\">if<\/span> (offset &lt; <span class=\"hljs-number\">0<\/span>) {\n\t    <span class=\"hljs-comment\">\/\/ Stream hasn't started yet, show a message and prevent playback<\/span>\n\t    alert(<span class=\"hljs-string\">'The live stream has not started yet. Please check back later.'<\/span>);\n\t    demoplayer.pause();\n\t  } <span class=\"hljs-keyword\">else<\/span> {\n\t    <span class=\"hljs-comment\">\/\/ Start at the correct offset time or fallback if out of range<\/span>\n\t    demoplayer.currentTime(offset &lt; demoplayer.duration() ? offset : <span class=\"hljs-number\">5<\/span>);\n\t  }\n\t});\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/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<p>You can find a full code example for a <a href=\"https:\/\/github.com\/cloudinary-devs\/simulated-live-streaming-demo\">simulated live stream implementation on GitHub<\/a>.<\/p>\n<h2>Join the Live Stream<\/h2>\n<p>Now, when our users load the web page during the time of our stream, they\u2019ll get a live streaming experience even though the video we configured has already been recorded.<\/p>\n<p>You\u2019ll notice that the video starts at the calculated time based on the scheduled stream time, and the player doesn\u2019t include controls for rewinding and fast-forwarding. The Cloudinary Video Player also includes an indicator in the bottom bar that lets the user know that the video is live.<\/p>\n<h2>Summary<\/h2>\n<p>Using Cloudinary, you can easily create a live-streaming experience with pre-recorded videos, which are ideal for webinars, product launches, or marketing events. By leveraging Cloudinary\u2019s Video Player, you can make prerecorded content appear live to your audience, offering the excitement of a live event with the control of preproduced material. Simply upload your video, configure the player, and you\u2019re ready to stream as if it were live. <a href=\"https:\/\/cloudinary.com\/contact\">Contact us today to learn more<\/a> about how Cloudinary can help simplify your video workflows.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":87,"featured_media":37743,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[393,303,310],"class_list":["post-37742","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-streaming","tag-video","tag-video-player"],"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>How to Live Stream a Prerecorded Video With Cloudinary<\/title>\n<meta name=\"description\" content=\"This guide walks you through uploading, configuring start times, and customizing the Cloudinary Video Player for seamless, live-like playback experiences.\" \/>\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\/live-stream-prerecorded-video\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Live Stream a Prerecorded Video With Cloudinary\" \/>\n<meta property=\"og:description\" content=\"This guide walks you through uploading, configuring start times, and customizing the Cloudinary Video Player for seamless, live-like playback experiences.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-05T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-06T00:09:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"melindapham\" \/>\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\/live-stream-prerecorded-video#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video\"},\"author\":{\"name\":\"melindapham\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\"},\"headline\":\"Live Stream a Prerecorded Video With Cloudinary\",\"datePublished\":\"2025-06-05T14:00:00+00:00\",\"dateModified\":\"2025-06-06T00:09:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video\"},\"wordCount\":7,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA\",\"keywords\":[\"Streaming\",\"Video\",\"Video Player\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video\",\"url\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video\",\"name\":\"How to Live Stream a Prerecorded Video With Cloudinary\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA\",\"datePublished\":\"2025-06-05T14:00:00+00:00\",\"dateModified\":\"2025-06-06T00:09:18+00:00\",\"description\":\"This guide walks you through uploading, configuring start times, and customizing the Cloudinary Video Player for seamless, live-like playback experiences.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Live Stream a Prerecorded Video 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\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\",\"name\":\"melindapham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"caption\":\"melindapham\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Live Stream a Prerecorded Video With Cloudinary","description":"This guide walks you through uploading, configuring start times, and customizing the Cloudinary Video Player for seamless, live-like playback experiences.","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\/live-stream-prerecorded-video","og_locale":"en_US","og_type":"article","og_title":"Live Stream a Prerecorded Video With Cloudinary","og_description":"This guide walks you through uploading, configuring start times, and customizing the Cloudinary Video Player for seamless, live-like playback experiences.","og_url":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video","og_site_name":"Cloudinary Blog","article_published_time":"2025-06-05T14:00:00+00:00","article_modified_time":"2025-06-06T00:09:18+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary-jpg?_i=AA","type":"image\/jpeg"}],"author":"melindapham","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video"},"author":{"name":"melindapham","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9"},"headline":"Live Stream a Prerecorded Video With Cloudinary","datePublished":"2025-06-05T14:00:00+00:00","dateModified":"2025-06-06T00:09:18+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video"},"wordCount":7,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA","keywords":["Streaming","Video","Video Player"],"inLanguage":"en-US","copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video","url":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video","name":"How to Live Stream a Prerecorded Video With Cloudinary","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA","datePublished":"2025-06-05T14:00:00+00:00","dateModified":"2025-06-06T00:09:18+00:00","description":"This guide walks you through uploading, configuring start times, and customizing the Cloudinary Video Player for seamless, live-like playback experiences.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/live-stream-prerecorded-video#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Live Stream a Prerecorded Video 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":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9","name":"melindapham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","caption":"melindapham"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1748035821\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary\/Blog_How_to_live_stream_a_pre-recorded_video_with_Cloudinary.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/37742","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\/87"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=37742"}],"version-history":[{"count":2,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/37742\/revisions"}],"predecessor-version":[{"id":37745,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/37742\/revisions\/37745"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/37743"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=37742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=37742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=37742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}